Skip to content

Http Live Streaming 으로 아이폰 동영상 서비스

조회 수 29100 추천 수 0 2012.02.07 16:35:26

이 문제로 무려 세번의 리젝트를 얻어 드시고 드디어 찾아낸 방법을 올린다.

이전에는 그런게 없었던것 같은데 2010년 10월경에 Developer Guide 가 새로 올라오면서 동영상쪽에 새로운

정말 까탈스러운 기준이 하나가 생겼다

 

그것이 바로 Http Live Streaming 이라는 녀석이다.

아이폰에서 동영상을 보여주려면 기존에는 그냥 mp4로 변환해서 링크를 걸거나 보여주면 됐었다. 아주 간단히

그런데 언제부턴가 5분이상의 동영상에 10메가 이상의 파일일 경우에는

다이렉트링크로 넘기면 바로 리젝트를 먹게 되었당..

 

게다가 인코딩시 코덱와 비트레이트도 지정된것 이상이 되면 바로 리젝트 떨어진다.

 

  • Low – 96 Kbps video, 64 Kbps audio
  • Medium – 256 Kbps video, 64 Kbps audio
  • High – 800 Kbps video, 64 Kbps audio

     

    웃긴게 팟캐스트는 같은 애플계열인데 여기는 mp4가 허용된다는 것이다. 아놔 뎅장

    좀 이상한 기준이긴 하지만 까라면 까야지

     

    이것을 해결할 두가지의 방법이 있는데 첫번째는 스트리밍 서버를 사용하는 것이다.

    그러나 가격이 꽤 된다.

    그래서 생각한게 애플에서 내놓고 무료로 배포하는 Darwin Streaming Server (DSS)를 스트리밍서버로 사용하는 것이었는데

    일단 CentOS5에 올리긴 올렸다. 브라우저로 서비스도 잘된다.

    그러나. 결정적인 문제가 있는데

    아이폰의 사파리는 이 DSS의 스트리밍을 재생하지 못한다!!

     

    수십가지 설정과 방법들을 전부 동원해 봤지만 결국은 실패. 결론은 아이폰의 사파리는 DSS의 스트림을 재생못한다로 결론을 내렸다.

    즉, 돈 아낄려고 DSS로 해봐야 아이폰에선 안되니 포기하는게 낫다는 것이다.

     

    그럼 어쩌겠냐. 다른 방법을 찾아봐야지

     

    그래서 나온게 Http Streaming Service 라는 것이다.  사실 애플에서 강력하게 밀고 있는 사항이기도 하다

    만약 이글을 보는 당신이 이런 내용으로 리젝트를 당했다면 잘 찾아오셨다.  ^_^) 씨익~~~

     

    Http Live Streaming 방식이라는 것은 HTTP 프로토콜을 이용해서 스트리밍을 하는 것인데

    사실 이 방법은 그냥은 안된다. 왜냐면 HTTP 프로토콜은 이속적인 연결을 가지는 프로토콜이 아니기 때문에

    우리가 알고 있는 앞으로 뒤로 왔다리 갔다리 하는 스트리밍이 아니라 Progressive 방식이기 때문이다.

     

    그래서. 이 Http Live Streaming 을 사용하려면 파일 자체를 변경해 줘야 한다.

    즉, 일반 동영상(AVI, MPG, MP4) 파일을 Mpeg-TS (MPEG transport stream) 으로 변환을 해 줘야 한다는 것이다.

    이 과정이 겁나게 까다롭다.

     

    물론 윈도우용 변환 어플도 있긴 하지만 변환하는데 정말 시간이 많이 걸리는데다가

    필수적으로 필요한 Segmeter나 m3u8 파일을 만들어 주지 않는다.

    이것들을 따로 할려면 귀찮기가 그지 없다.

     

    물론 맥에는 이 세그먼트툴이 따로 있긴 하지만 이것도 귀찮기는 매 한가지더라

    그래서 인터넷을 찾아보던중 FFMpeg 를 이용해서 한방에 보내버릴 수 있는 방법을 찯았다.

    그러나 좋아하진 말자.. 이것도 귀찮다.. 물론 윈도우용 툴이나 맥에서 하는 것 보다야

    일단 구축만 해두면 훤씬 편하긴 하다만

    여튼 소스컴파일을 할려면 그렇게 해보시고 본인은 귀차니즘의 종결자인지라 그냥 yum 으로 설치하도록 하겠다

     

     

    설치환경

     

    CentOS5.5

    FFMpeg-0.5.3

    Segmenter

     

    1. ffmpeg 다운로드

     

    http://www.ffmpeg.org/download.html

     

     

    2. 서버에 올리고 컴파일

     

    #./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libx264
    #make; make install

     

     

    위의 컴파일이 우분투에서는 정상적으로 되는가 보던데 CentOS에서는 안된다. 오류 대따시 뜬다.

    그냥 yum으로 설치하는게 속편하다

    그런데 yum 으로 그냥 설치하면 안되고 다음의 과정을 거쳐야 된다.

     

    1. 레포지토리 업데이트

     

    #vi  /etc/yum.repos.d/CentOS-DAG.repo
    ======================================================================================  <아래내용추가>

    [dag]
    name=Dag RPM Repository for Red Hat Enterprise Linux
    baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
    gpgcheck=1
    enabled=1


     

    2. Development Tool 업데이트 <만약 CentOS 설치시 설치하지 않았다면)

    #yum groupinstall "Development Tools"

     

     

    3. RPM 업데이트

    rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3. 6-1.el5.rf.i386.rpm

     

    4. 기타

    #yum -y install subversion ruby


     

    5. ffmpeg, ffmpef-devel 설치 (devel 을 설치하지 않으면 TS변환시 오류 발생함)

    #yum install ffmpeg ffmpeg-devel

     

    6. Segmenter 설치

     

    첨부된 Segmenter.c 를 올려놓고 다음과 같이 컴파일

     

    #gcc -Wall -g segmenter.c -o segmenter -lavformat -lavcodec -lavutil -lbz2 -lm -lz -lfaac -lmp3lame -lx264 -lfaad

     

    이때 오류가 나면 알아서 찾아서 해결하시고, 그래도 안되면 그냥 첨부된 컴파일된 바이너리를 사용하시는게 속편할 수도 있음

     

     

     

    위까지가 일단 TS 변환을 위한 예비작업이 다 끝난 상태

    이제는 파일을 업로드하고 변환을 하면된다.

    첨부된 PDF 파일을 보면 자세한 과정이 나오니 이것을 참고하길 바라며

     

    사용하기 전에 첨부된 mp2ts.sh 파일을 열어서 DOMAIN 부분을 자신의 환경에 맞게 수정을 하고 사용하도록 해야함

     

    이렇게 해서 Xcode에서 바로 콜을 하면 정상적으로 보이게 된다.

    음.. 이 부분에서도 약간 문제가 있는데 내가 뭔가 잘못 만졌는지는 몰라도 m3u8은 AutoPlay가 안된다.

    mp4는 된다. 그런데 TS파일은 안된다. 자동재생이

     

    그래서 보통 웹페이지에서 이걸 넘기는데 잘 생각해야 된다.

    UITableView  에서 무비목록을 터치하면 바로 콜을 할것인지 아니면 UIWebView 를 콜해서 여기서 태그로 보여줄지 말이다.

    왜냐면 무비 재생을 마친후 <DONE> 버튼을 누르면 웹페이지로 이동시 해당 페이지가 흰색으로 떵그러니 보이는 문제가 생길수도 있기 때문이다.

     

    아이폰의 무비재생쪽은 좀 문제가 있다.

    가끔 상단의 Information Header Bar 가 사라져 버리는 황당한 경우가 발생하기도 한다.

    이런 경우엔 답없다. 최상단의 델리게이트에 타이머 하나 놓고, 일정 시간마다 헤더를 무조건 보이도록 하는 방법 밖에는 -_-;;

     

    여튼 이렇게 하면 Http Live Streaming 을 위한 모든 준비가 다 끝난다.

    음.. 솔직히 변환된 TS의 화질은 그닥 맘에 안든다.

     

    아무리 생각을 해도 이건 애플에서 자사의 애플TV를 밀려고 동영상의 포맷을 TS로 바꾸게 하려는 것 같은 생각밖에 안든다. -_-

     

    참고로 <video src='> 에 거는 링크는 TS 파일이 아니라 만들어진 m3u8 파일이 걸리는 것이다.
    mp2ts.sh 파일을 보면 코드라는 것으로 명명된 폴더명칭안에 같이 TS 파일들과 m3u8 파일이 들어있는데
    이것 때문에 그런것이다. 여러개의 TS 파일이 만들어지기 때문에 하나의 동영상당 하나의 폴더로 만들어서
    관리하는 것이 편하다

     

     

    그럼 즐삽!!

     

     

     

    아이폰스트리밍을 위한 동영상변환.zip(자세한 내용을 설명한 문서)

    Segmenter.tar.gz(하나의 무비 파일을 여러개의 TS 파일로 쪼개주는 역할, 아래의 쉘에서 한번에 처리해줌)

    mp2ts.sh(그나마 편하게 처리를 하게 하기 위한

  •  

     

    출처 : http://blog.daum.net/duf2wjs/8

    profile

    일요일은 짜빠게뤼~ 먹는날~^^

    엮인글 :
    http://adminplay.com/77014/666/trackback
    List of Articles
    번호 제목 글쓴이 날짜 조회 수sort
    » Http Live Streaming 으로 아이폰 동영상 서비스 ADMINPLAY 2012-02-07 29100
    326 고정아이피 설정하기(Ubuntu Server DIY ) l2zeo 2010-02-20 28540
    325 [linux] 리눅스에서 hostname 변경과 구동과정 ADMINPLAY 2010-12-16 28292
    324 FFmpeg ADMINPLAY 2010-05-03 27917
    323 리눅스 패키지 정보 확인 ADMINPLAY 2010-05-03 27656
    322 악성코드 일괄 삭제 ADMINPLAY 2010-04-17 27422
    321 System V 메시지 큐(Message Queue), 세마포어(Semaphore)... ADMINPLAY 2010-04-28 27337
    320 insmod,rnmod,lsmod,modprobe 명령어 ADMINPLAY 2010-05-02 27184
    319 L4 스위치 대신 LVS로 부하분산 해결 ADMINPLAY 2009-11-30 27156
    318 JWPlayer 사용법 ADMINPLAY 2010-11-11 27078
    317 CentOS 4, CentOS 5, CentOS 6 에 NTFS 파일시스템 마운트... ADMINPLAY 2012-01-16 27040
    316 리눅스 데몬의 종류 (서비스 종류) ADMINPLAY 2010-06-26 27007
    315 Making Linux Streaming Server RED5 스트리밍 리눅스서버... ADMINPLAY 2009-09-24 26632
    314 [UNIX] 솔라리스 보안 [ 발표자료 ] - 김 석 님 자료 file l2zeo 2010-03-08 26451
    313 usb 부팅 리눅스 만들기(knoppix) ADMINPLAY 2009-08-08 26436
    312 리눅스 한글 설정 l2zeo 2010-03-08 26432
    311 리눅스 하드디스크 에러메세지 ADMINPLAY 2009-11-01 26413
    310 net-snmp 설치 및 snmp 사용법 ADMINPLAY 2009-06-24 26408
    309 sftp 포트 변경시 접속 ADMINPLAY 2010-11-10 26397
    308 oracle IP 변경시 변경 해야될 파일 ADMINPLAY 2009-11-01 26278

    Copyright ADMINPLAY corp. All rights reserved.

    abcXYZ, 세종대왕,1234

    abcXYZ, 세종대왕,1234