이 문제로 무려 세번의 리젝트를 얻어 드시고 드디어 찾아낸 방법을 올린다.
이전에는 그런게 없었던것 같은데 2010년 10월경에 Developer Guide 가 새로 올라오면서 동영상쪽에 새로운
정말 까탈스러운 기준이 하나가 생겼다
그것이 바로 Http Live Streaming 이라는 녀석이다.
아이폰에서 동영상을 보여주려면 기존에는 그냥 mp4로 변환해서 링크를 걸거나 보여주면 됐었다. 아주 간단히
그런데 언제부턴가 5분이상의 동영상에 10메가 이상의 파일일 경우에는
다이렉트링크로 넘기면 바로 리젝트를 먹게 되었당..
게다가 인코딩시 코덱와 비트레이트도 지정된것 이상이 되면 바로 리젝트 떨어진다.
웃긴게 팟캐스트는 같은 애플계열인데 여기는 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(그나마 편하게 처리를 하게 하기 위한