[진행중] EBS 방송 녹음을 어떻게 할까요?

scred의 이미지

리눅스에서 매일 방송을 녹음 청취하고 있었는데,
오늘자 방송들이 녹음이 안 되어있습니다.
그래서 확인해보니 예전의 그 주소에서 stream을 찾을 수 없다는 오류가 생기는 거였습니다.
EBS 홈페이지를 들어가보았더니 개편이 되었는지 모양도 달라진데다가,
실시간 방송하는 곳을 들어가보니,
http://www.ebsi.co.kr/ebs/jsp/apz/etc/etcOnAirPlayer.jsp?onair_ch=RADIO
이런식으로 방식이 바뀌었습니다.
그리고, iexplorer로 접속해보니 activex를 설치해야 볼 수 있다고 나오는군요.

어떻게하면 주소를 알아내어 mplayer로 녹음할 수가 있을까요?

P.S. 상황이 달라질 때마다 답글에 업데이트 중입니다.

vigor96의 이미지

정말 방법은 없는걸까요???

ㅠㅠ

듣고 싶어요..

astronux의 이미지

mmst://219.240.37.11/L-FM_300k

현재 제 컴퓨터(CentOS)에서는 녹음이 잘 되고 있습니다.
도움이 되었으면 좋겠네요.

Astronomy+Linux

Astronomy+Linux

scred의 이미지

예전에 쭉 그 주소를 사용해왔습니다만,
지금은

> mplayer mmst://219.240.37.11/L-FM_300k

라고 수행시키면 한참 다른 말들이 나오다가,

Playing mmst://219.240.37.11/L-FM_300k.
STREAM_ASF, URL: mmst://219.240.37.11/L-FM_300k
Resolving 219.240.37.11 for AF_INET6...
Couldn't resolve name for AF_INET6: 219.240.37.11
Connecting to server 219.240.37.11[219.240.37.11]: 1755...
Connected
read error:: Operation now in progress
pre-header read failed
Failed, exiting.
Resolving 219.240.37.11 for AF_INET6...
Couldn't resolve name for AF_INET6: 219.240.37.11
Connecting to server 219.240.37.11[219.240.37.11]: 80...
Server returned 404: Object Not Found
No stream found to handle url mmst://219.240.37.11/L-FM_300k

Exiting... (End of file)

이런 식의 오류를 내며 종료되어 버립니다.

저는 Fedora 쓰고 있습니다.
지난 주 목요일부터 그렇습니다.
리눅스뿐만 아니라, 윈도우즈에서도 다양한 프로그램들로 mms://~~~ 주소를 입력해보아도 모두 파일이 없다고 나오는 상황입니다.

답글 달아주신 분은 플레이어 실행시 어떤 로그들이 나오는지 혹시 알려주실 수 있으신가요?

Informatics

choissi의 이미지

저도 그 mms로 녹음해서 듣고 있었는데요;; 지난주 부터 안되네요

쩝 ebs 가 개편을 하더니 mms 라디오 방송서비스가 변경하려나봐요
그래서 방법을 바꿨습니다. 라디오를 하나 준비해서 오디오 라인인으로 놓고

/usr/bin/arecord -d ${time} -f cd -t raw | /usr/local/bin/lame -x -v -B 48 - ${program}_${today}.mp3

라디오 선정이 문제인데, 가격을 보니까 그냥 mp3를 사는게 좋겠네요.
http://search.naver.com/search.naver?sm=tab_hty&where=nexearch&query=camo+mp3
내장 건전지, 충전 중 라디오 재생이 되어서, 하나 달아놓고 crontab 약간 수정해서 다시 돌리고 있습니다.

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

astronux의 이미지

헉...죄송합니다.

요며칠 녹음을 안 들었는데, mp3 파일크기를 보고, 제대로 녹음이 되는줄 알았네요. T.T;;;
님의 말씀처럼, 그 주소로 더 이상 안되네요. T.T;;;
저 때문에 혼란스러우셨다면, 용서를...

다시 한 번 죄송하다는 말씀드립니다. 꾸벅~

Astronomy+Linux

Astronomy+Linux

bushi의 이미지

방송 데이타 스트림 자체는 LAME 3.97 (beta) 로 인코딩된 mp3 인 것 같으니...
최초에 접속과정만 통과하면 디코딩 문제는 어떻게든 될 것 같습니다.

한 20분간 패킷을 요모조모 따져봤는데, 접속과정은 의외로 단조롭군요.
쓸데없는 삽질을 하는 것 처럼 보이는 것도 있고...

... 본 김에 한번 해봤습니다. 쓸데없는 삽질을 하는 것 처럼 보이는 부분을 제외해도 잘 되네요.
단조로운데도 불구하고... 한 단계씩 살을 붙이며 나가다 보니 코드가 개판이 됐습니다.

누구한테 보이기 민망한 코드지만,
첨부로 붙이니 필요하신 분은 제대로 만들어서 활용해보세요.

OTL

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.c.txt10.26 KB
Plain text icon ebs.h.txt8.87 KB
bushi의 이미지

중간중간 0x0f 0x0f 0x0f 0x0f 로 시작하는 32byte 의 무언가를 제거해야만
깨끗한 음질로 들을 수 있는 mp3 파일이 되는군요.

[bushi@rose ebs]$ ./ebs 2>/dev/null > a.bin
^C
[bushi@rose ebs]$ file a.bin
a.bin: MPEG ADTS, layer III, v2,  64 kBits, 24 kHz, JntStereo
[bushi@rose ebs]$ 
[bushi@rose ebs]$ hexdump -e '"%04.4_ax| " 192/1 "%02x " "\n"' a.bin | cut -c -80 | head -10
0000| ff f3 84 64 ff 12 66 0b 50 2a 3c 66 cc 80 00 03 48 00 00 00 00 20 60 9b e1
00c0| ff f3 84 64 ff 10 e9 e5 50 2f 3d 23 4e 80 00 03 48 00 00 00 00 33 3c be 15
0180| ff f3 84 64 ff 10 81 bf 4c 0b 3d 23 56 80 00 03 48 00 00 00 00 65 90 63 08
0240| ff f3 84 64 ff 15 e9 d1 3a 00 ac ac 00 80 00 03 48 01 40 00 00 c7 dd 7d 3b
0300| ff f3 84 64 fa 1a 22 17 46 0a cc 3c 00 00 00 03 48 01 80 00 00 d7 39 84 d4
03c0| ff f3 84 64 d4 19 29 df 7f 2f c4 3c 01 00 00 03 48 01 80 00 00 a1 38 e0 08
0480| ff f3 84 64 b5 12 84 e5 5a 01 ed 3c 00 00 00 03 48 01 c0 00 00 05 75 3b 97
0540| ff f3 84 64 cb 17 16 09 50 01 65 88 d2 80 00 03 48 00 00 00 00 c9 62 c3 88
0600| ff f3 84 64 bd 13 de 05 54 01 69 e7 6c 80 00 03 48 00 00 00 00 cd ef 7d e6
06c0| ff f3 84 64 c9 10 89 f3 5a 03 61 e5 5e 80 00 03 48 00 00 00 00 2b 7e 3f 7f
[bushi@rose ebs]$ 
[bushi@rose ebs]$ hexdump -e '"%04.4_ax| " 192/1 "%02x " "\n"' a.bin | cut -c -80 | tail -10
6900| ff f3 84 64 ff 14 7a 03 4e 27 64 c3 9c 80 00 03 48 00 00 00 00 3c 1e 06 76
69c0| ff f3 84 64 ff 15 72 09 44 01 61 86 3e 00 00 03 48 00 00 00 00 8d 91 1f f9
6a80| ff f3 84 64 fe 13 c6 0b 52 0a 3d 86 04 80 00 03 48 00 00 00 00 c4 51 45 05
6b40| ff f3 84 64 ff 15 3c f9 54 01 61 e9 68 80 00 03 48 00 00 00 00 22 0a dc e5
6c00| ff f3 84 64 ff 15 5c f9 54 02 61 ec a4 00 00 03 48 00 00 00 00 e1 b3 d2 34
6cc0| ff f3 84 64 ff 16 19 69 52 52 65 85 c4 00 00 03 48 00 00 00 00 01 91 24 d0
6d80| ff f3 84 64 f9 14 91 65 52 02 61 85 a8 00 00 03 48 00 00 00 00 a5 04 94 a6
6e40| ff f3 84 64 ff 14 19 6b 50 01 61 22 a8 00 00 03 48 00 00 00 00 bf bb 19 44
6f00| ff f3 84 64 ff 16 7d e3 4c 01 61 86 78 80 00 03 48 00 00 00 00 a3 cf 4d d8
6fc0| ff f3 84 64 f6 14 95 b3 48 01 65 85 8e 80 00 03 48 00 00 00 00 be 8f 41 1e
[bushi@rose ebs]$ 

stdout 으로 출력해서 mplayer 나 mpg321 의 stdin 으로 집어넣어보려고 했는데 잘 안됩니다.
파일로 기록해서 연주시켜보는 것으로 만족.

OTL

haihaba의 이미지

정말로 대단하십니다.

코드는 이해 할 수 없지만 사용하는데,
무리는 없겠네요.
자동으로 저장까지 할 수 있겠군요.

하하하
그런데, 제 컴에서 녹음을 하면 규칙적으로 음이 변형이 되는데,
저만 그러는 건지 알고 싶군요.

bushi의 이미지

EBS 에서 데이타포트로 보내는 방송패킷에 포함된 자체 헤더 때문인데...
덩어리로 구분되는 기준을 알 수 없어서 EBS 자체헤더까지 통째로 저장한 덕분에 음이 튀었습니다.

조낸 들여다 본 끝에,
간신이 덩어리의 크기를 나타내는 부분을 찾아서 EBS 자체헤더를 빼고 mp3 프레임들만 저장하니
음이 튀지 않더군요.

OTL

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.c.txt12.15 KB
vigor96의 이미지

최고 이시네요.

와...멋져요

전 그냥 패킷만 잠깐 보고 포기했었는데..

대단하십니다...

감사드려요..

leemgs의 이미지

Linux Desktop 사용자를 위한 예약용도로 다시 정리했습니다.
첨부된 파일을 다운로드 한후에 아래와 같이 셋팅하시면 됩니다.
(소스 컴파일하는 것도 사용자에게는 별 의미가 없을것 같아 모든 리눅스 배포판에서
문제없이 실행되도록 Static으로 실행가능한 ebs 파일 같이 첨부합니다. )

winxp 사용자는 alsong(알송) 프로그램을 이용하시면되고,
저같이 Linux 사용자는 mplayer을 이용하여 mp3파일을 플레이 하시면 됩니다.

P.S: 미지리눅스회사의 부시분에게 감사의 장미를 던집니다. ^^

Fedora6#> vi /etc/crontab
39 07 * * 1-6 root /opt/EBS/ebs.sh

Fedora6#> ls /opt/EBS
ebs.sh ( script file for crontab )
ebs (static executable elf format file)
ebs.c ( This file is consist of c-source and c-header )

Fedora6#> chmod 755 /opt/EBS/ebs.sh
Fedora6#> chmod 755 /opt/EBS/ebs
Fedora6#> ls /opt/EBS/

Play ***.mp3 and then listen to toeic lecture.
( ***.mp3 is located in /opt/EBS/ directory )

end of line.

댓글 첨부 파일: 
첨부파일 크기
Package icon ebs.recorder.power_.english.invain.zip248.93 KB

Geunsik Lim (Nick: invain)

barrios의 이미지

PowerEnglish를 들으시나 보군요..ㅎㅎ

kickme의 이미지

다들 대단하시네요..lol
VLC로 녹음중이였는데, 올려주신 것을 이용하면 변환 자체가 필요가 없는듯 하네요...

주소 자체는 rtsp://211.218.209.124:8080/L-FM_300k 로 들으시면 됩니다만...
rtsp 가 이상한건지? mplayer에서는 재생이 되지 않습니다..
wms를 이용하는 것 같은데, 헤더가 약간 다른듯?, VLC로 들으시면 됩니다...

leemgs의 이미지


VLC에서는 rtsp://211.218.209.124:8080/L-FM_300k Play가 정상적으로 잘되는데,
Mplayer에서 제대로 안되는 이유는 M$의 rtsp 프로토콜을 플레이하기 위해서 필요한
"Live Media" 라이브러리(RTP ASF demuxing 기능 지원)가 존재하지 않아서 입니다.

이 "Live Media" 라이브러리가 mplayer에 포함되어 있지 않은 경우 mpalyer 플레이시에
RTP payload format unknown or not supported 에러 메세지를 볼수 있게 됩니다.

따라서, VLC에서처럼 Mplayer을 이용하여 rtsp://211.218.209.124:8080/L-FM_300k 을 정상적으로
플레이하려면, http://www.live555.com/mplayer/ 주소에서 "Live Media(live555)" 라이브러리를
이용하여 mplayer소스를 재설치하여 이용하시면 됩니다.

제 경우에는 vlc가 아닌 mplayer으로 rtsp의 플레이를 할경우에는
이 방법으로 Fedora (필자는 Fedoar Core 6 and Fedora 9만 주로 사용함.) 리눅스 배포판에서 사용합니다.

Fedora6#> mplayer -v -rtsp-stream-over-tcp rtsp://211.218.209.124:8080/L-FM_300k
Fedora6#> mplayer rtsp://211.218.209.124:8080/L-FM_300k

p.s: 유럽쪽 리눅스 매니아들은 Streamming 쪽은 VLC을 상당히 애용하더군요.

Geunsik Lim (Nick: invain)

zzaratra의 이미지

오.......... 감사 합니다.

일할때 ebs 라디오 자주 듣는데..
혹시 위 프로그램로 저 처럼 그냥 듣기만을 위한 분들을 위해서.

zzar@debian:~/ebs$ cat ebs.radio
#!/bin/sh
mkfifo ebs.mp3
./ebs > ebs.mp3 &
 
mplayer ebs.mp3

이상은 Valkyrie
http://aladdin.co.kr/shop/wproduct.aspx?ISBN=8995710160&kw=00001A
mms://211.106.66.141/live4/kbs/psong182_m.asf
HAPPy !!

kickme의 이미지

밥먹고 와서 필요한거 몇줄 추가해봤습니다. 테스트해보니 그냥저냥 잘 돌아가는것 같습니다..
stdout만 파일 스트림으로 변경했고, 시간은 그냥 time함수 써서 비교하는 식으로 했습니다만.
별 문제 없겠죠?-_-

소스봐도 잘 모르겠네요..프로그래밍이야 대학때 잠시 해본게 전부라..
소스는 leemgs 님이 헤더랑 합쳐주신걸 썻습니다..

~$ebs 파일 시간

다시한번 bushi님께 감사드리면서....귀트영 짱..

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.c.txt24.05 KB
scred의 이미지

정리해주신 스크립트 수정해서 적용하였더니 성공적으로 작동하고 있습니다.
3일 넘게 답이 하나도 없길래 안되는 건가 하고,
EBS에 건의사항 보내고 ('관련부서에 전달했으나, 언제 시행될지 모른다'는 답변이 오더군요) 있었더니,
이래저래 해결책을 찾아보고 계셨군요!

감사합니다. ^^;

Informatics

sungjae의 이미지


덕분에 잘 사용하고 있습니다.
감사합니다.

light8402의 이미지

정말 잘 되네요..
감사합니다.
잘 사용할께요.

IsExist의 이미지

덕분에 잘 사용하겠습니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

trip2me의 이미지

cur: ST_IDLE
to: ST_CTL_START
cur: ST_CTL_START
[EBS RADIO]
to: ST_CTL_PREPARE_REQ
cur: ST_CTL_PREPARE_REQ
[0x02 0x00 0x01 0x02]
[0x43 0x37 0x02 0x49]
to: ST_CTL_MAKE_REQ_1
cur: ST_CTL_MAKE_REQ_1
to: ST_CTL_MAKE_REQ_2
cur: ST_CTL_MAKE_REQ_2
to: ST_CTL_MAKE_REQ_3
cur: ST_CTL_MAKE_REQ_3
data:cur:ST_IDLE
data:to:ST_DATA_START
to: ST_CTL_LOOP
data:cur:ST_DATA_START
data:to:ST_DATA_LOOP
.not found

이렇게 메시지를 내고는 멈춰버리네요

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

bushi의 이미지

나름 revision 이 올라갔나봅니다.
전에 하던 뻘짓도 없어졌고, 착실하게 할 일만 하는군요.

소스(원본에선 ebs.h)의 PACKET_R 정의 부분에서 한 바이트만 바꾸면됩니다.
원래는 0x48 이었는데, 0x49 로 바뀌었군요.
첨부 그림에서 빨간 동그라미 쳐진 부분입니다.

OTL

댓글 첨부 파일: 
첨부파일 크기
Image icon ebs_h.png25.13 KB
sjang의 이미지


내일 아침부터는 잘 되겠네요.
감사합니다.

The Future !!!

vigor96의 이미지

바로바로 고쳐주시니 넘 좋습니다.^_^

wanchang의 이미지

덕분에 잘 사용하고 있습니다.
어제부터 잘 안되서 패킷로그 잡아서 변경사항을 확인해볼려고 했는데,
회사일이 바빠서 미루다가 이 페이지에 다시 와보니, patch가 이미 있군요 ^^

테스트 해보니 잘 되네요. 감사히 잘 사용하겠습니다.

bushi의 이미지

변명같지만...
회사일이 안 바빠서 패킷을 들여다 본것은 아니고...
뭐가 바뀌었나 궁금해서 참을 수가 없어 들여다봤고,
전에 찜찜했던 부분을 먼저 들여다본다는 계획이 잘 들어맞았던 덕분에 금방 찾을 수 있었습니다.

처음엔 mp3 헤더(0xff 로 시작하는)을 못 찾는 것인 줄 알았습니다.
제대로 파싱하지 않고 하드코딩했기 때문에 찜찜했었거든요.
시험해보니 데이타를 아예 받지 못하더군요.
접속절차 자체는 정상이었습니다.
5056 포트로 왔다갔다 하는 것 자체는 별 이상이 없는데
5057 포트로 data request(라고 짐작되는) 패킷을 날린 이후에
5057 포트 소켓을 서버에서 닫아버리고 있더군요.
request 패킷이 뭔가 틀려졌나 싶어서 그것만 들여다봤습니다.
이전엔 request 패킷을 만들어낼 때 조작하는 바이트가 연속된 3개였습니다.
그 주위를 봤더니 바로 뒤의 바이트하나가 바뀌어있더군요.
예전엔 변하지 않던 바이트였습니다.
세션과는 상관없이 항상 0x48로 고정되어 있던 바이트였고,
바뀐 지금에도 계속 0x49 로 고정되어 있습니다.
오히려 전엔 계속 바뀌던 세번째 바이트가 지금은 0x02 고정으로 바뀐 것 같고요.

아무튼 한번의 삽질로 수정할 부분을 찾을 수 있었고,
서너번의 시험으로 크게 이상이 없다는 것을 확인할 수 있었습니다.
덕분에 금방 댓글 달 수 있었고요.

삽질환경은...
리눅스의 eth0 에 bridge 된 tap0 를 만들고, virtualbox 로 돌아가는 windows xp 에서
IE 로 교육방송 라디오에 접근할 때의 패킷들을 커널의 ip_queue.ko 모듈로 캡쳐해서
netfilter/libipq 를 사용한 간단한 프로그램으로 텍스트 형태의 파일로 저장한 다음
kompare 를 사용해서 diff 를 시각적으로 좀 편하게 보는 정도가 고작입니다.
iptables 에서 교육방송 서버, 라디오 방송 포트만 지정해서 QUEUE 로 jump 를 시켰기에
평소에도 그냥 저대로 놓고 리눅스를 사용하므로,
테스트 환경을 다시 만들거나 검증하는 데 걸리는 시간이 크게 들지 않습니다.
virtualbox 로 windows 부팅하고 IE 실행시켜서 EBS 홈페이지에 접속하는 시간이 고작이죠.

아무튼!
일 할 시간에 엄한 짓을 했다건가,
할 일이 없어서 노느라 엄한 짓을 한 것은 아닙니다 !
EBS가... 그래도 나름대로 생각해서 방송을 개방했는데도
리눅스에서... 어쩌구... 하는게 눈에 거슬렸기에 시작했던것이고,
시험삼아 만든 코드가 터무니없게 절차지향적이라
따져보는데 그렇게 시간이 많이 걸리거나 하는 것이 아니었을 뿐입니다.

다니던 회사가 망해서 다른 회사로 합병됐는데... 죄책감 들게 하지 마세요 OTL

OTL

wanchang의 이미지

만드신 코드와 ethereal로 잡은 패킷을 비교해보니, 대략 어떻게 진행되는진는 파악했는데,
뭔가가 변경된건지, 저도 궁금해서 ethereal로 잡아 놓은 패킷을 beyond compare로 비교해보다가
현재 진행중인 프로젝트의 급한 이슈때문에 길게 시간을 내지 못했었습니다.

bushi님이 일할시간에 엄한짓 하신거라곤 생각하진 않네요. 이런 삽질(?)을 하면서 나름 배우고
아이디어를 얻는 경우도 많구요.

다행이 빨리 찾아 주셔서 저같은 사람이 ebs 라디오를 녹음해서 듣는 행복을 다시 찾게 되었네요.
다시 한번 감사의 말을 드리고 싶네요 ^^

trip2me의 이미지

다시 수정된 코드로 잘 듣고 있습니다.

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

thomas84의 이미지


감사 말씀 드릴려구 일부로 로그인했네요.

몇번 도움을 받았는데 이제야 인사드리네요..

감사합니다.

doodoo의 이미지

삽질환경은...
리눅스의 eth0 에 bridge 된 tap0 를 만들고, virtualbox 로 돌아가는 windows xp 에서
IE 로 교육방송 라디오에 접근할 때의 패킷들을 커널의 ip_queue.ko 모듈로 캡쳐해서
netfilter/libipq 를 사용한 간단한 프로그램으로 텍스트 형태의 파일로 저장한 다음
kompare 를 사용해서 diff 를 시각적으로 좀 편하게 보는 정도가 고작입니다.
iptables 에서 교육방송 서버, 라디오 방송 포트만 지정해서 QUEUE 로 jump 를 시켰기에
평소에도 그냥 저대로 놓고 리눅스를 사용하므로,
테스트 환경을 다시 만들거나 검증하는 데 걸리는 시간이 크게 들지 않습니다.
virtualbox 로 windows 부팅하고 IE 실행시켜서 EBS 홈페이지에 접속하는 시간이 고작이죠.

혹시 시간이 되시면 쬐끔만 더 자세하게 써 주실수 있으세요?
궁금하고, 신기해서 그렀습니다.....리눅스 멋지게 쓰시는 분들의 사용기처럼 볼수있나
해서요

bushi의 이미지

구버전(아마도 2.0대?) virtualbox 를 사용하던 시절에 쓰던 방법입니다.
tap0 을 사용한 것은... windows guest 로 부팅해서 사내 내트웍에 편하게 붙으려 한 목적이었고,
방법자체는 '강좌' 포럼 어디엔가 적어뒀지만 최근 virtualbox 에는 해당되지 않습니다.
최근 virtualbox 에서는 설정메뉴 선택만으로 host bridge 를 편하게 사용할 수 있습니다.

libipq 는 iptables-devel(혹은 iptables-dev)를 설치하면 개발에 필요한 것은 완비되고,
대강 두드려 만들어 사용한 소스는 http://kldp.org/node/95974 댓글의 첨부파일과 대동소이합니다.

누군가 화두를 던질때마다 나름 이것저것 두드려보는 버릇이 있는데,
마침 이 조각들을 조합하면 이것도 풀어볼 수 있겠다 싶어서 시작하게 됐네요.
특히 EBS 교육방송이라 더욱 땡기기도 했고, 부담도 없었습니다.

OTL

trip2me의 이미지

다른 방법으로 해 보려고 위의 leemgs님께서 언급하신 mplayer에 Live555패치를 작 적용하지 못해서인지 빌드후 재생해도 코덱을 찾지못하기에 그래서 vlc로 방향을 선회했습니다.

아래처럼 옵션을 적당히 주고 저장을 했습니다만.

 vlc -I dummy <a href="rtsp://211.218.209.124:8080/L-FM_300k" rel="nofollow">rtsp://211.218.209.124:8080/L-FM_300k</a> --sout "#transcode{acodec=mp3,ab=64,samplerate=24000}:standard{mux=raw,dst=test.mp3,access=file}:sout-transcode-soverlay=0"

이상하게 제가 사용하는 KT네트웍의 Mac OS X VLC 0.8.6d 에서는 문제가 없는데 centos5를 사용하는 다른 네트웍의 vlc 0.8.6h -1.el5.rf 에서는

overflow in spectral RLE, ignoring
이라는 에러를 보이면서 녹음이 되는데 문제는 결과파일이 들을 수 없을 정도로 주기적 끊어짐이 심하다는 것입니다.

윈도우에서 실행하면
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. Do not report crashes to FFmpeg developers.
이런 말이 나오고 구글링에서도 FFMpeg문제로 나오는듯 한데 해결책이 나와야 할 듯 합니다.

다른 분들은 문제 없으신가요? ㅠ_ㅠ

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

Let's be a realist, howe-ver, keep impossible dr-eam in our mind.
-Che Guevara-

And only the mistakes have been mine
-Malcolm X-

내게로 떠나는 여행~

thames의 이미지

멋있네요 -_-b


──────────────────────────────────

htukor의 이미지

잘 쓰겠습니다.

혹시 c 파일 컴파일할 때 특별한 옵션이 있나요?

김도현의 이미지

powerpc 에서 컴파일하여 사용해보니 2,3초에 한번씩 “삑삑” 잡음이 들리는지라 정상적으로 사용하기가 곤란합니다.

Starting playback...
mpg123: Can't rewind stream by 23 bits!
[EBS RADIO]
62340
mpg123: Can't rewind stream by 38 bits!% 
mpg123: Can't rewind stream by 27 bits!% 
[EBS RADIO]7.4) of -2.5 (unknown) 101.7% 
42315
mpg123: Can't rewind stream by 1 bits!
mpg123: Can't rewind stream by 54 bits!
mpg123: Can't rewind stream by 44 bits!

화면에 뿌려지는 mplayer 메시지는 이렇습니다. 원인이 무엇일까요? 저는 i386 기계도 가지고 있는데 여기서는 문제 없습니다.

bushi의 이미지

FIXME 들 중의 하나인 endian 문제입니다.
1.ebs_header_s 라는 구조체를 날로 사용하는 것,
2. 멤버 변수중의 하나인 this_len 을 날로 사용하는 것.

조잡하게 수정한 것을 첨부로 붙이겠습니다.
ebs.h는 옛날 것 그대로 쓰시면 됩니다.

OTL

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs_endianfree.c.txt12.27 KB
김도현의 이미지

빠른 답변, 감사합니다. 문제없이 잘 됩니다.

다만 맥 오에스 텐 타이거에서는 컴파일이 안 되는지라 다음처럼 수정하여 사용하고 있습니다. 제대로 고친 것인지는 제가 프로그래밍에 문외한인지라 알지 못합니다.

--- ebs_endianfree.c.txt        2008-09-30 23:08:54.000000000 +0900
+++ ebs_endianfree.c    2008-09-30 23:35:38.000000000 +0900
@@ -19,8 +19,13 @@
 #include &lt;netinet/ip.h&gt;
 #include &lt;arpa/inet.h&gt;
 
+#ifdef __MACH__
+#include &lt;machine/endian.h&gt;
+#include &lt;libkern/OSByteOrder.h&gt;
+#else
 #include &lt;endian.h&gt;
 #include &lt;asm/byteorder.h&gt;
+#endif /* __MACH__ */
 
 #include "ebs.h"
 
@@ -157,7 +162,11 @@
 
 static int recv_mp3_data(struct ebs_sock *sock, struct ebs_header_s *ebshdr)
 {
+#ifdef __MACH__
+       int left = OSSwapLittleToHostInt16(ebshdr-&gt;this_len);
+#else
        int left = __le16_to_cpu(ebshdr-&gt;this_len);
+#endif /* __MACH__ */
        int ret;
        unsigned char *mp3buf = sock-&gt;cxt-&gt;buf;
        while (left) {
@@ -184,7 +193,11 @@
 static const unsigned char mp3_magic[4] = { 0xff, 0xf3, 0x84, 0x64};
 int scan_and_recv_mp3_data(struct ebs_sock *sock, struct ebs_header_s *ebshdr)
 {
+#ifdef __MACH__
+       int left = OSSwapLittleToHostInt16(ebshdr-&gt;this_len);
+#else
        int left = __le16_to_cpu(ebshdr-&gt;this_len);
+#endif /* __MACH__ */
        int pt = 0, i;
        int ret, found;
        unsigned char *mp3buf = sock-&gt;cxt-&gt;buf;

madman93의 이미지

power pc에서는 byteorder가 틀리다는 사실을..

이 코드를 가지고 cocoa쪽으로 옮겨볼까 생각중이기는 합니다만..
그렇게 해도 저만 쓸것 같긴 하군요 ^.^

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

bushi의 이미지

저는 맥을 모르니 적절한 초식인지 아닌지 잘 모르겠습니다.
미관상,

#ifdef __MACH__
#include <machine/endian.h>
#include <libkern/OSByteOrder.h>
#define le16_to_cpu(x)    OSSwapLittleToHostInt16(x)
#else
 #include <endian.h>
 #include <asm/byteorder.h>
#define le16_to_cpu(x)    __le16_to_cpu(x)
#endif /* __MACH__ */

가 좋겠는데, 제대로 만들기나 하고 미관을 따지던가 해야지 지금의 민망한 코드로는 한숨만...

OTL

ppsycho의 이미지

컴파일 하여 Synology DS-101j 에서 돌려 봤는데...
그전 것 보다는 잡음(찍찍)이 덜하는데... 아직도 남아 있네요...

깨끗한 녹음을 할 수 있을까요???...

bushi의 이미지

글쎄요, CPU 는 특별할 게 없는데...
어떤 컴파일러를 사용하시는지요 ?

OTL

ppsycho의 이미지

http://www.nas-forum.com/forum/index.php?autocom=ineo&showarticle=26
에 링크되어 있는
http://kegel.com/crosstool/crosstool-0.43.tar.gz

크로스툴을 설치하여 gcc 사용했습니다...

bushi의 이미지

iwmmxt 로 한 것도 아니고...
그냥 평범한 32bit arm v5 big-endian 툴체인인데...
arm 의 4byte align 에 걸려들지 않도록 충분히 무식하게 만든 것 같은데,
미처 생각지 못한 뭔가가 또 있을지도 모르겠습니다.

찜찜했던 놈을 아예 날려버린, 날림수정한 소스 첨부합니다.
ebs.h 는 예전과 동일하고요.

OTL

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs_endianless.c.txt11.75 KB
ppsycho의 이미지

잘 작동하는군요...
깨끗하게 녹음이 되네요...
다시 한번 감사드립니다... ^^

ppsycho의 이미지

어떻게 지우죠.. ㅎㅎ

jerryju의 이미지

안녕하세요? 만들어 주신것 감사 드립니다.

잘 사용하고 있습니다.
기존에 mms녹음하는것보다 음질도 좋고, 용량도 좋아서 진짜 만족합니다.

bushi 님의 최종소스 (ebs_endianless.c.txt, 2008/10/15 - 3:51pm)에
kickme 님의 소스 (ebs.c.txt, 2008/07/21 - 1:41pm)를 두개 합쳐 봤습니다.

나름 이걸 최신이라 생각하셔도 될듯 합니다.
자바하는 녀석이 C 할라니깐, 힘드네요.

더 원하시는 분이 있을까 해서 넣었습니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon ebs_src.zip7.63 KB
delsdwf72의 이미지

잘 쓰겠습니다.

Fe.head의 이미지

와우 .. 대단한데요.. 깨끗하군요.
이정도 일줄이야 bushi, jerryju 감사히 잘쓰겠습니다.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

leemgs의 이미지

before) 211.218.209.124:8080 (rtsp)
219.240.12.254:5056(Control)
219.240.12.254:5057(Data)

after)
219.240.12.253:5050
219.240.12.253:5150
219.240.12.254:5050
219.240.12.254:515

댓글 첨부 파일: 
첨부파일 크기
Package icon ebs.dump_.tcpdump.zip1.63 MB

Geunsik Lim (Nick: invain)

scred의 이미지

프로마다 차이가 있더니 오늘은 거의 안 되는 것 같네요.

프로그램 소스를 어떻게 수정하면 해결이 될 지 좀 더 구체적으로 알려주실 수 있으신지요?

Informatics

bushi의 이미지

저도 저 댓글을 보고 생각 날 때마다 (그러니까 그리 자주는 아니고 띄엄띄엄, 평균 하루에 두번정도, 오후와 야밤) 돌려보는데요,
안되는 적이 한번도 없어서 아직 문제가 뭔지도 모르고 있습니다.
적어주신 다른 주소로는 접속조차 한번도 성공해보지 못했구요.

+

서버 폭주가 아닐까 싶은데... 증거는 없습니다.
인기 있는 프로그램은 접속이 힘들고, 다른 프로그램 방송시간대엔 접속이 잘되고... 뭐 이런게 아닐까요 ?

OTL

scred의 이미지


정말 3월이라 인기프로에 대한 폭주일지도 모르겠네요.

그렇다면 조금만(한 달?) 참으면 정상화가 되겠군요. ^^;

하루씩 빠지면 한달치 퀴즈 응모에 지장 있어서 안타까워요.

Informatics

leemgs의 이미지

2009년 2월 25일 기준 EBS Radio 녹음용 파일입니다.

압축을 해제하신후에 ebs.bin and ebs.sh 파일을 특정 디렉토리에 옮기시고 나서
ebs.sh 코드를 참고하여 자신에게 맞게 수정하여 사용하시면 됩니다.

P.S: 4월 29일 기준으로 정상적으로 잘동작되었습니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon ebs-radio-Taskfile-20080225.zip247.8 KB

Geunsik Lim (Nick: invain)

scred의 이미지

그동안의 실행파일을 이용할 경우 다음과 같은 오류가 생기면서 끝나버려,
녹음이 되지 않고 크기 0짜리 파일만 만들어집니다.

어떻게 해결할 수 있을까요?

Quote:

Status: RO

cur: ST_IDLE
to: ST_CTL_START
cur: ST_CTL_START
[EBS RADIO]
to: ST_CTL_PREPARE_REQ
cur: ST_CTL_PREPARE_REQ
[0x02 0x00 0x01 0x02]
[0xe1 0x66 0x02 0x4a]
to: ST_CTL_MAKE_REQ_1
cur: ST_CTL_MAKE_REQ_1
to: ST_CTL_MAKE_REQ_2
cur: ST_CTL_MAKE_REQ_2
to: ST_CTL_MAKE_REQ_3
cur: ST_CTL_MAKE_REQ_3
data:cur:ST_IDLE
data:to:ST_DATA_START
to: ST_CTL_LOOP
data:cur:ST_DATA_START
data:to:ST_DATA_LOOP
0
not found

Informatics

bushi의 이미지

ebs_endianless.c 를 사용해보세요.

전에 0x48 이 0x49 로 바뀌었을 때 처럼 이번엔 0x49 에서 0x4a 로 바뀌었습니다.
(적어주신 로그에도 보이죠. [... ... ... 0x4a] )

ebs_endianless.c 를 수정할 때 아예 token 의 길이를 3바이트에서 4바이트로 바꿨기때문에
ebs_endianless.c 와 이걸 바탕으로 한 수정판들은 이상없이 동작하리라 생각합니다.

OTL

onino의 이미지

감사합니다. ^________^

gauryan의 이미지

다른 분들처럼... 아래의 쉘을 cron 에 등록하여 주기적으로 녹음을 하고 있습니다.
잘 사용하고 있었는데, 엊그제 OS(Debian Squeeze)를 재설치하고, 다시 설정했는데...
이상하게도 3~4 분 정도만 녹음이 되버리는 것입니다.

터미널에서 직접 실행을 하면 정상적으로 20분만에 종료가 되는데요,
CRON 에만 등록하면 3~4 분만에 ebs 프로그램이 종료되버리네요.

왜그럴까요?

#!/bin/bash
# Radio Broadcast Name: 파워잉글리쉬
# Broadcast Time : AM 07:40 - 08:00
# Created Date : 2008.12.01
TIME="20m"
# DATE=`/bin/date +%Y%m%d%H%M`
DATE=`/bin/date +%Y%m%d`
MP3="../web/data/po_$DATE.mp3"
cd /opt/project/english/bin/
 
# records stream into wav file during specified period
# and then, kills a process
./ebs > $MP3 &
sleep $TIME
kill %1

취미개발자 '해피가이'
[ http://gauryan.blogspot.com/ ]

gauryan의 이미지

근본적인 문제는 해결이 되지 않았지만~
어찌되었든 해결했습니다.
CRON 을 이용하되, 터미널로 접속을 하여 해당 스크립트를 실행하도록 하니,
잘~ 됩니다.

취미개발자 '해피가이'
[ http://gauryan.blogspot.com/ ]

paeksj98의 이미지

정말 좋은 방법이네요...
시간대가 맞을때만 듣곤 했느데...
저도 한번 시도 해봐야 겠네요...

rdy4u의 이미지

한가지 여쭙습니다.
사정상 mplayer를 설치할 수 없어서,
위에 작성해주신 프로그램을 컴파일해서 잘 사용하고 있습니다. (감사합니다)

다름이 아니오라.
public access되는 mms를 위의 스크립트들 처럼 녹화하려면 어느 부분을 수정해야 할지요..
tbs eFM을 업무중에 듣지 못해서 녹음하여 퇴근후에 들으려고 합니다.
mms://210.90.46.63/efmlive

조언 주시면 정말 감사드리겠습니다

bushi의 이미지

mms 를 이미 구현한 프로그램을 사용하는게 불가하다면 본인이 직접 구현해서 사용하는 수 밖에 없습니다.
libmms 라는 놈이 있으니 적당히 참고해서 만들면 될 것 같습니다.

mplayer 가 덩치가 커서 불만이라면 mimms 같은 놈을 사용해보세요.
컴파일러를 사용할 수 있는 환경이라면 mmsrip 을 컴파일해서 사용하셔도 되겠습니다.
(컴파일러와 C 라이브러리만 있으면 빌드할 수 있는 놈입니다)

[bushi@rose JAX10]$ mmsrip --help
 
mmsrip (MMS Ripper) version 0.7.0
 
usage: mmsrip <[-oFILE] stream url> ...
 
General Options:
	-a, --about		show information about mmsrip
	-h, --help		show this help
	-v, --version		show version number
 
Program Behaviour:
	-oFILE, --output=FILE	output to specified file (can be repeated)
	-gFILE, --debug=FILE	output debug info to specified file
	-q, --quiet		quiet mode (can be repeated)
	-dDELAY, --delay=DELAY	save the stream during DELAY seconds and exit
	-k, --trick		attempt to trick recalcitrant servers
	-t, --test		test mode (check stream availability)
 
[bushi@rose JAX10]$ 
[bushi@rose JAX10]$ mmsrip -o a <a href="//210.90.46.63/efmlive
 
mmsrip" rel="nofollow">mms://210.90.46.63/efmlive
 
mmsrip</a> (MMS Ripper) version 0.7.0
 
warning: stream seems to be live, an error may occur.
 
93833 bytes written (18.8 kbps)
^C
[bushi@rose JAX10]$ 
[bushi@rose JAX10]$ file a
a: Microsoft ASF
[bushi@rose JAX10]$ 

OTL

rdy4u의 이미지

답변 감사드립니다.
호스팅을 통해서 하다보니 여러 제약이 많네요.
컴파일러는 사용가능하지만, 인스톨 하는데는 권한 문제가 많군요..

아무래도 VMware나, 다른 방법으로 직접 인스톨해서 사용해야겠네요.
감사합니다.

bushi의 이미지

... 뭘 설치하시건... 직접 컴파일할 수 있다면 본인 홈 디렉토리에 설치해도 상관없는데요.
mplayer 도 마찬가지고요.
다만, mplayer 는 요구하는 라이브러리들이 웍낙 많아서 일일이 가져다 컴파일해서 설치하기가 매우 귀찮을 뿐이죠.
좀 덜 귀찮은 방법으론.. 이미 컴파일된 바이너리들을 본인 홈디렉토리 밑에 적절한 path 로 복사하고,
LD_LIBRARY_PATH 등의 환경변수로 로더를 조작할 수도 있습니다.

OTL

scobyseo의 이미지

일단, 중간에 접속이 원활하지 않을 때 죽는 경우가 발생해서 디버깅했구요 ^^
Crontab에 쉽게 사용할 수 있도록 수정해 봤습니다.
Command-line에서 파일을 지정할 수 있도록 하고, 녹음하는 시간을 지정할 수 있도록 했습니다.

사용예 : ebs powerenglish-`date +%Y%m%d`.mp3 20
--> 지정한 파일명으로 20분간 저장합니다 ^^

가능한 파일명으로는 절대경로를 사용하실 것을 권장합니다.

아래 파일은 /etc/crontab에 등록할 때 사용하던 쉘 스크립트를 수정한 겁니다 ^^
간단해졌죠?

#!/bin/sh
# Radio Broadcast Name: English Speaking Master
# Broadcast Time : AM 07:00 - 07:20
# Reference website: <a href="http://kldp.org/node/68033
#" rel="nofollow">http://kldp.org/node/68033
#</a>                    <a href="http://kldp.org/node/95974
#" rel="nofollow">http://kldp.org/node/95974
#</a> Created Date : 2008.07.18
TIME="20"
DATE=`/bin/date +%Y%m%d_%H%M`
MP3FILE="/home/scoby/ENGLISH/EnglishSpeakingMaster-$DATE.mp3"
 
# records stream into wav file during specified period 
# and then, kills a process
/home/scoby/ENGLISH/ebs $MP3FILE $TIME

그럼 영어공부 열심히 하세요 ^^

댓글 첨부 파일: 
첨부파일 크기
Package icon ebs.zip3.47 KB

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

dkvp21의 이미지

header에서는 0x4a가 다시 0x49로 바뀐건가요...?

저도 계속 죽어서 고민하고 있었는데, 감사합니다~ ^^

----------
I wanna know you~!

----------
I wanna know you~!

gillez의 이미지

Porting이랄 것도 없지만...
암튼 저는 mac으로 crontab 써서 이 프로그램을 돌리고 있습니다.
이 기회를 빌어 scobyseo님께 감사..

지난번 까지는 컴파일이 그냥 되더니 이번에 수정해 주신 프로그램은 안되길래 구글링 해서 좀 찾아봤습니다.
Mac으로 녹음하실 분은 다음을 고쳐주시면 됩니다.

1.
endian.h와 asm/byteorder.h 대신 architecture/byte_order.h 를 include 합니다.

2.
/*int left = __le16_to_cpu(ebshdr->this_len);*/
int left = NXSwapLittleShortToHost(ebshdr->this_len);

compile할 때 warning이 좀 나오긴 하지만, 녹음 잘 되네요.

맥에서도 끊김 없는 녹음이 함께 하시길...

gillez의 이미지

다른 분들은 어떠신지.
오늘 녹음해 봤는데, 여전히 끊어지네요...

sjang의 이미지

여전히 끊기네요.

2메가쯤 저장된 파일도 있고, 2.5메가정도인 파일도 있네요.

The Future !!!

sjang의 이미지

근래에 자주 끊겨서 왜 이럴까 고민만 했답니다.

녹음시간 단위가 분단위네요. 초단위를 원하시는 분들이 많을 겁니다. ( 60곱하는 부분을 빼면 되더군요.)

대단히 감사합니다.

The Future !!!

scobyseo의 이미지

흠. 분단위가 녹음에 편할 거라고 생각했습니다만, 초단위를 원하시는 분이 많으시군요 ^^

명령행에 대해 대충 설명드리면,

ebs output-file duration

duration은 분단위 이구요, duration을 쓰지 않으면 무한대로 녹음됩니다.
제가 테스트해본 결과로는 하루정도.. 잘 되더군요.

output file을 쓰지 않거나 파일을 열 수 없으면 stdout으로 출력되도록 해 두었습니다만,
데몬으로 실행되도록 수정한 이상, redirection을 써서 파일로 저장하는 방법은 동작하지 않습니다 ^^

그리고, 중간에 packet이 드롭되는 경우에는 녹음이 완벽하게 되지 않고 일부 구간이 끊겨서 녹음될 수 있습니다.
기존 소스코드에서는 packet이 드롭된 경우에 뻗어버리는 버그가 있어서 고친거지만..
그런 경우에 그 구간을 살려낼 방법은 존재하지 않아... 이건 어쩔 수 없이 받아들일 수 밖에 없는 듯합니다.
뭐, 재방송이라는 게 있으니, 둘다 녹음하면 왠만해서는 다 들으실 수 있으실 것 같습니다.

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

sjang의 이미지

중간에 패킷 드랍으로 녹음이 중단되는 경우가 많아서 저녁 재방송도 걸어 놓습니다만
요즘들어 두 번다 녹음이 끝까지 안되는 회수가 증가하고 있네요.
패킷 드랍은 방송 서버 문제일 수 있으니, 확실한 조치는 불가능이겠네요.

저도 패킷이 드랍되는 경우에 소켓상태가 어떤지 체크해 보았는데, read() 시에 0인 것으로 보아
소켓연결이 끊어진 거 같습니다.
그러니, 이런 경우에 재접속해서 기존 파일에 계속 쓰면 몇초간 내용이 없더라도 끝까지 녹음이 가능하지 않을까요?

저는 수정할 능력이 안되어 그냥 손놓고 있습니다.

요즘 녹음 성공을 운에 맡기고 있지요.

The Future !!!

scobyseo의 이미지

패킷 드랍 관련해서는 일단 테스트를 좀 해보고 있습니다.
이게. 디버깅을 하는 입장에서는 자주 발생해 주면 좋겠지만 ^^ 그렇지도 않아서...
해결책을 찾으면 올리겠습니다.
저두 녹음한 게 중간에 잘려서 상심이.. 쩝.

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

scobyseo의 이미지

열심히 들여다 보니, 버퍼 오버플로우가 일어나는 부분이 하나 있더군요.
패킷이 로스트된 경우 큰 패킷이 오는 경우가 발생하는데 그 때 버퍼 오버플로우 때문에 잡음도 들어가고, 결국은 죽는 것 같습니다.

그래서, 일단 ebs.c 파일처럼 그냥 버퍼 오버플로우가 발생하지 않도록 임시처방을 하는 방법이 가능합니다.

하지만! ebs2.c 파일은 만약 뭔가 문제가 발생해서 연결이 끊기면,
처음부터 다시 접속해서 새로 받아올 수 있도록 완전히 고친 버전입니다.
아주 삽질을 해서 새로 작성은 했는데요, 잘 돌지는... 일단 돌려보고 있는 중입니다.
간단하게 멀티쓰레드 구조로 다시 작성했으니,
관심있으신 분들은 돌려보시고 에러 리포팅 혹은 수정 부탁드립니다 ^^

아, ebs.h 파일은 0x4a가 맞더군요.

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.c.txt13.76 KB
Plain text icon ebs2.c.txt9.14 KB

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

sjang의 이미지

저도 ebs2.c 파일로 테스트 해보겠습니다.

The Future !!!

sjang의 이미지

방금 ebs2.c를 가지고 10분정도 녹음했는데요.
일단, 10분 녹음은 끝까지 가는데요.
값이 이상하게 stdout 되는 부분부터 mp3 파일을 들어보니 2개의 방송이 같이 나오는 거 같으면서
몇초간격으로 소리가 튀는 부분도 있네요. 방송내용 앞뒤가 뒤 섞여 나오는거 같기도 하고요.

The Future !!!

scobyseo의 이미지

예. 그런 부분이 있더군요.
아직 정확한 이유를 모르겠습니다만, 어느 순간부터 갑자기 패킷 크기가 커지면서 소음이 끼어들어 갑니다.
이게 버퍼 오버플로우 때문에 일어나는 현상이라고만 생각했는데, 그게 아닌 모양입니다.

ps.
근데 가장 큰 문제는 제가 바라볼때는 그런 문제가 발생 안하다가 눈을 떼고 조금 있으면 그런 문제가 발생해서...
버그의 원인을 찾기가 쉽지 않아요 --; 웅웅.

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

불편한웹의 이미지

C 손 안 댄지가 10년이 넘었는데...
C소스(http://kldp.org/files/ebs2.c.txt)에서 이게 __le16_to_cpu 당최 이해가 되지 않아 루비로 포팅하다 포기했습니다.
시간이 투입된 소스라 버리기 아까워 그냥 올립니다.
$ ruby ebs.rb 하면 실행은 됩니다.
수정해서 쓰실 분 쓰세요.
C 소스에 (하드웨어 관련한 부분에서) 주석 좀 많이 달아주시거나,
나중에 제가 버클리 소켓 내공이 닦이면 다시 손볼지도 모르겠습니다.

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.rb_.txt1.63 KB
Plain text icon ebs_packet.rb_.txt8.85 KB
scobyseo의 이미지

이 함수는.. 정확히는 매크로지만...
little endian으로 표현된 16비트 숫자를 현재 cpu에서 사용하는 endian으로 변경해 주는 코드입니다.
아마, 루비 소켓에도 구현되어 있을 겁니다...
이것도 한번 분석해 보지요 ^^

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

scobyseo의 이미지

조금 고쳤습니다.
중간에 데이터 연결이 끊기면 다시 연결해서 계속 받을 수 있도록 한 부분을 수정해서
해당 기능이 확실히 동작하는 걸 확인했습니다.
어쨌거나, 가끔씩 연결이 끊기기도 하고, 그런 경우 잠시 내용이 끊기는 경우가 있긴 있는데요,
이건 정말 해결책이 없구요 ^^
그래도, 원하는 기간 동안은 내용을 다 받아다 줍니다.
그리고, 잡음이 들어가는 부분도 해결을 봤구요.
아주 자잘한 버그인데, 에러가 자주 발생하는 게 아니다 보니 잡는게 힘들어요 ^^
아마 이 정도면 큰 문제는 없을 것 같아서 release 하고 이후 수정은 원하시는 분께 넘겨드리겠습니다. ^^
그럼, 열공!!

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs.c.txt10.57 KB

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

sjang의 이미지


잘 쓸께요.
열공~ 열공~

The Future !!!

sjang의 이미지

조금 수정했습니다.

1. 일단, 분단위 duration을 초단위로 했습니다. 따라서, 300를 쓰면 300분이 아닌 300초로 인식합니다.
2. 서버와 끊어지고 재시작하는 부분의 코드에서 시간 크기 비교에 오류가 있는 듯 해서 수정했습니다.

아래 2번의 수정내용입니다.

main() 안에서...

504     while(1){   /* repeat until determined time comes ... */
505         proc_ctrl_session();
506
507         printf("trying restart...\n");
508         gettimeofday(&now_tv, NULL);
509         if ((duration > 0) && (now_tv.tv_sec >= end_tv.tv_sec))
510             break;
511         again++;
512         printf("restart[%d]\n", again);
513     };

위에서 509 라인에서 now_tv.tv_sec가 더 클때 break 해야하는 것 같습니다.

수정한 파일을 첨부합니다.

댓글 첨부 파일: 
첨부파일 크기
Plain text icon ebs_reconnect.c.txt10.18 KB

The Future !!!

scobyseo의 이미지

녹음이 전혀 안되어서 확인 했더니, preamble을 찾는다고... 삽질하고 있는 상황이네요 --;
128Kbps로 올라갔군요. ㅎㅎ.

185번째 라인을

static const unsigned char mp3_magic[4] = { 0xff, 0xfb, 0x94, 0x64 };

이렇게 고쳐 주시면 잘 동작할 겁니다.

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

gillez의 이미지

Your effort is always greatly appreciated.

sjang의 이미지


바로 고쳐주셨네요.
감사합니다.

The Future !!!

scobyseo의 이미지

에휴, 쓸데없이 시간을 엄청 써가면서, GUI를 붙여보았네요.

wxWidgets로 작성해서, 윈도우, 리눅스 모두 잘 동작할 겁니다.
mpg123을 써서 play할 수 있도록 했구요,
현재 컴파일은 윈도우로만 해서 테스트 했습니다.
리눅스에서 테스트 해주실 분!!!

http://www.cyworld.com/scobyseo/3252247 이 현재는 공식 홈페이지 입니다 ^^

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

oldbell의 이미지

올려주셔서 감사합니다. (물론 0kb짜리로 해당 파일은 생깁니다만.) ebsr.cfg파일의 설정을 찾는 문제가 생겼드랬습니다.

인생의 무게를 느껴라. 아는 만큼 보이는게다.

rdy4u의 이미지

$ gcc -O2 -s -o ebs ebs.c -Wall
ebs.c: In function `data_thr':
ebs.c:301: warning: unused variable `preamble'
ebs.c: In function `main':
ebs.c:496: warning: unused variable `ret'
/tmp/ccK23Y4C.o(.text+0x8d2): In function `proc_ctrl_session':
: undefined reference to `pthread_create'
/tmp/ccK23Y4C.o(.text+0x98f): In function `proc_ctrl_session':
: undefined reference to `pthread_join'
collect2: ld returned 1 exit status

scobyseo님이 최종 수정해주신 ebs.c 파일로 컴파일하고 있습니다.
sjang님 소드도 마찬가지구요.
잘 안되네요. 어떤 부분을 손봐야 할까요?
조언 부탁드려요 ^^;

scred의 이미지

gcc 마지막에 -lpthread 를 추가하니 아래의 reference 관련 오류는 없어지고, compile이 됩니다.

저같은 경우는 unused variable 오류는 그대로 남은 상태인데,
결과적으로 실행파일이 생성되어서 실행해보면,
크기가 0인 녹음파일만 만들어져서 사용을 못하고 있네요.

Informatics

rdy4u의 이미지

$ gcc -O2 -s -o ebs ebs.c -Wall -lpthread
ebs.c: In function `data_thr':
ebs.c:301: warning: unused variable `preamble'
ebs.c: In function `main':
ebs.c:496: warning: unused variable `ret'

조언 감사합니다.

sjang의 이미지

gcc의 Wall 옵션때문에 사용하지 않는 변수가 있다고 경고만 주는 겁니다.
컴파일은 성공하신거고요 ebs 라는 실행파일이 생겨 있을 겁니다.

실행할 때 옵션에 대해서 유의하십시오. 녹음지속시간을 옵션으로 사용할 수 있습니다.

The Future !!!

페이지

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.