관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[네트워크] 멀티미디어 스트리밍 (실시간 라디오 녹음 및 저장) 본문

네트워크

[네트워크] 멀티미디어 스트리밍 (실시간 라디오 녹음 및 저장)

막무가내막내 2019. 12. 21. 03:49
728x90

 

 

 

멀티미디어 스트리밍 프로토콜을 이용한 실시간 라디오 녹음 및 저장을 할 수 있는 프로그램을 python을 사용해 만들어봤다.

RTMP 프로토콜을 사용해서 EBS 라디오를 녹음하고 HLS 프로토콜을 사용해서 KBS 라디오를 녹음할 수 있다.

그리고 녹음뿐 아니라 crontab을 이용해서 내가 정한 주기마다 라디오를 다운받을 수 있게 했다.

이렇게 녹음된 파일 들을 소켓 웹서버에 올리고 실행 및 다운을 할 수 있는게 최종 결과물이다.

 


RTMP protocol: Real TIme Messaging Protocol, 인터넷 상에서 멀티미디어 스트리밍 서비스를 이용하기 위해서 사용하는 프로토콜중 하나이다.

 

HLS protocol: HTTP Live Streaming, http 기반 미디어 스트리밍이고 apple에서 만든 프로토콜이다. 웹서버에서 비디오와 오디오를 전송한다.


 

 

1. RTMP를 이용한 EBS 라디오 녹음 (EBSdownload.py)

RTMP는 Real Time Messaging Protocol의 약자로서 인터넷 상에서 멀티미 디어 스트리밍 서비스를 이용하기 위해서 사용하는 프로토콜중 하나이다.
먼저 EBS와 KBS 둘 다 다운 받는 디렉토리를 .../EBS 로 하였다. rtmp()는 rtmp 프로토콜을 사용하여 EBS 라디오를 다운 받는 코드이다. subprocess를 사용하여 rtmpdump 명령어를 실행하고 15초 길이만큼 .flv 포맷으로 다운받는다.
그 다음 __flv_to_mp3()는 다운 받은 EBS 라디오 .flv 파일을 mp3로 변환해 주는 코드이다. 이 또한 subprocess를 사용하여 ffmpeg 명령어를 실행한다.

 

마지막으로 __change_meta_data()는 mp3 파일의 메타데이터를 변경해주는 코드이다. 

 

 

 

 

 

2. HLS를 이용한 KBS 라디오 녹음(KBSdownload.py)

HLS는 HTTP Live Streaming의 약자로서 http 기반 미디어 스트리밍, apple에서 만든 프로토콜이며 웹서버에서 비디오와 오디오를 전송한다.
mplayer는 미디어 플레이어 소프트웨어이다. mplayer $(curl -s "http://onair.kbs.co.kr/index.html?sname=onair&stype=live&ch_code=24 &ch_type=radioList"| grep "service_url" | cut -d\" -f 16 | cut -d\\ -f 1) -ao pcm:file= your/path/file_name.flv -vc dummy –vo null 를 subprocess로 실행한다. (웹 크롤링 + 파싱 + 미디어 URL을 HLS로 요청)
그 후는 EBS에서 한거와 동일하게 .flv를 mp3로 변환하고 메타데이터를 변경 해준다.

 

 

 

 

KBS radio를 다운 받는 명령어를 콘솔에서 실행해본 결과이다. TEST12.flv 파일이 받아진 것을 볼 수 있다.

 

 

 

 

밑은 이 외에 curl을 실행해본 결과들이다.

=> 라디오 생방송 페이지를 가져온다. curl –s "http://onair.kbs.co.kr/index.html?sname=onair&stype=live&ch_code=24&ch_type=radioList

 

 

 

 

 

 

 

 

 

결론적으로 사용한 코드  => $(curl -s "http://onair.kbs.co.kr/index.html?sname=onair&stype=live&ch_code=24&ch_type=radioList"| grep "service_url" | cut -d\" -f 16 | cut -d\\ -f 1) -ao pcm:file= your/path/file_name.flv -vc dummy – vo null

 

 

 


 

3. crontab을 이용한 주기적 실행

출처: https://jdm.kr/blog/2

crontab을 사용해서 프로그램 실행을 스케줄링(예약) 할 수 있다. crontab을 통해 내가 만든 EBS, KBS download.py를 주기적으로 실행시키게 하여 mp3 파일을 다운 받게 해보았다.

 

 

 

 

 

 

 

 


4. 웹서버에 녹음된 파일 올리기

TCP 소켓을 사용한 HTTP 서버를 만들고 클라이언트에게 다운받은 mp3을 다운 및 재생 할 수 있는 웹페이지를 응답해준다.
차례대로 보면 다음과 같다

 

 

 

 

 


[결과]

 

 

 

 


소스코드

EBSdownload.py
0.00MB

 

KBSdownload.py
0.00MB
server.py
0.00MB

728x90
Comments