apache2 아이폰 mp4 스트리밍
글쓴이: poss / 작성시간: 화, 2012/06/12 - 8:28오후
테스트서버(ubuntu 10.04, apache2)에 mp4 화일을 올려놓고,
아이폰으로 http://xxx.xxx.xxx.xxx/test.mp4
하면 잘 플레이 됩니다.
하지만 실제 사용할 서버(CentOS5.4, httpd2.2)에서는
플레이가 전혀 되지 않네요.
Ubuntu쪽 아파치 설정과 CentOS쪽 아파치 설정이 달라서 그런것 같긴 한데, 뭐가 다른지 모르겠습니다.
두 서버 다 설정은 기본 설정입니다.
혹시 비슷한 경험 있으신 분들 조언 부탁드려요.
참고로 스티리밍서버는 따로 구성하지 않았습니다.
Forums:
웹서버와 아이폰이 자체적으로 디코딩 가능한 동영상을
웹서버와 아이폰이 자체적으로 디코딩 가능한 동영상을 인터넷을 통해 불러올경우 자체적으로 디코디하여 잘 플레이 되는데
기타 지원하는 않는 포멧이라면 안되더군요..
저도 비슷한 경우로 우분투와 맥osx 아파치에서 테스트 해본 경험이 있네요(별도의 스트리밍 방식을 사용하지 않고 사파리로 url 동영상(mp4) url 접속)
동영상 포멧을 확인한번 해보시는건 어떨까요?
네가 꿈을 꾸지 않는 한, 꿈은 절대 시작되지 않는단다.
언제나 출발은 바로 '여기'야 떄가 무르익으면, 그럴수 있는 조건이 갖춰지면,
하고 미루다 보면, 오느새 현실에 파묻혀 소망을 잃어버리지.
그러므로 무언가 '되기(be)' 위해서는 반드시 지금 이 순간 무언가를 '해야(do)'만 해
- Stuart Avery Gold 의 우화소설 Ping 중에서..
화일 포맷 문제는 아닌듯 합니다.
화일 포맷 문제는 아닌듯 합니다.
Content-Type
PC에서
wget -S http://ubuntu.example.com/test.mp4
wget -S http://centos.example.com/test.mp4
했을 때 MIME type / Content-Type 내용이 서로 다른가요?
잘 되는 서버.#wget -S --spider
잘 되는 서버.
#wget -S --spider http://gaegle.co.kr/a.mp4
Spider mode enabled. Check if remote file exists.
--2012-06-14 09:33:32-- http://gaegle.co.kr/a.mp4
Resolving gaegle.co.kr... 115.86.218.39
Connecting to gaegle.co.kr|115.86.218.39|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Thu, 14 Jun 2012 00:33:32 GMT
Server: Apache/2.2.14 (Ubuntu)
Last-Modified: Thu, 07 Jun 2012 14:23:39 GMT
ETag: "1a004f-88311a-4c1e2a1499529"
Accept-Ranges: bytes
Content-Length: 8925466
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: video/mp4
Length: 8925466 (8.5M) [video/mp4]
Remote file exists.
안되는 서버
# wget -S --spider http://xxx.xxx.xxx.xxx/test/a.mp4
Spider mode enabled. Check if remote file exists.
--2012-06-14 09:45:26-- http://xxx.xxx.xxx.xxx/test/a.mp4
Resolving xxx.xxx.xxx.xxx... 0.0.0.0
Connecting to xxx.xxx.xxx.xxx|0.0.0.0|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Thu, 14 Jun 2012 00:44:19 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Thu, 07 Jun 2012 14:23:39 GMT
ETag: "28005b2-88311a-a140f0c0"
Accept-Ranges: bytes
Content-Length: 8925466
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Content-Type: video/mp4
Length: 8925466 (8.5M) [video/mp4]
Remote file exists.
아, 플레이가 안되는 서버와 잘 되는 서버의차이는,
안되는 서버의 상단에 각종 보안장비들(방화벽, IPS, 웹방화벽)이 있다는겁니다.
물론 80포트는 열려 있고요. 웹브라우져에서는 quicktime 플러그인설치되어 있으면
픞레이가 둘 다 잘 됩니다.... ;ㅡㅡ
아, 확인해 보니 플레이가 안되는 서버는.
아, 확인해 보니 플레이가 안되는 서버는. text/plane으로
잘 되는 서버는 video/mp4 로 나옵니다...
어. 착각 했어요. 두 서버 다 video/mp4 로
어. 착각 했어요. 두 서버 다
video/mp4 로 나옵니다...
혹시 몰라 안드로이드에서 확인 해 봤는데, 안드로이드는 두 서버 모두 잘 플레이 됩니다
아이폰에서는 왜 안될까요?
안녕하세요.
비슷한 문제로 고민 중입니다.
우분투 10.04, 페도라6, 윈도우xp, 임베디드 리눅스에 웹서버를 열어놓은 상태입니다.
리눅스 계열 OS에는 모두 아파치 2.2.8 버전을 사용 중이며,
윈도우xp에는 아파치 2.2.4버전을 사용중입니다.
우분투 10.04, 페도라6, 윈도우7, 갤럭시s2, 아이폰, 아이패드 등에서 테스트 했습니다.
문제는 아이폰과 아이패드입니다.
여타 우분투, 페도라6, 윈도우xp 의 웹서버에서는 모두 정상적으로 영상이 보입니다.
임베디디 리눅스의 웹서버에서와 iOS계열이 문제네요.
http://192.168.0.100/video/sample.mp4
파일이 열리지가 않습니다.
poss님과 비슷한 상황인지라 이렇게 글 남깁니다.
혹시 해결하셨거나 참고할 내용 있으면 좀 부탁드릴께요.
robelias@naver.com으로 메일 부탁드리겠습니다.
p.s : 애플 테러하러 가실 분 모집합니다.
http://mobiforge.com/developi
http://mobiforge.com/developing/story/content-delivery-mobile-devices
http://hckim.tistory.com/389
이 둘이 어떤식으로든 상호작용하고 있을 가능성이 있습니다. 아파치 단에서 Range 요청에 대한 어떤 패치가 되어 있다던지, 중간 네트워크 경로 어디선가 Range 요청을 차단하고 있다던지 하는 등의 시나리오를 생각할 수 있겠습니다.
꼭 이게 원인이 아니더라도 동작하는 상황과 동작하지 않는 상황 모두 시뮬레이션할 수 있으므로 wireshark 등으로 패킷을 분석해 보는 것을 추천드립니다.
보통 player들이 http protocol을 통해
보통 player들이 http protocol을 통해 처리를 할때, 처음 시작할 경우에는 200으로 처리를 할 텐데요. 동영상 넘기기 같은 것을 할 때나 206으로 재 요청을 하는 것으로 알고 있습니다. 그러므로 이 문제는 아닐 듯 싶습니다.
기존 구현이 어떠한지는 모르겠습니다만, 제 생각에는
기존 구현이 어떠한지는 모르겠습니다만, 제 생각에는 200으로 수동적으로 처리하는 것보다는 206을 적절히 사용하는 것이 나은 방식이라고 생각합니다. 예를 들어 대용량 비디오 파일을 재생각은 경우도 대비해서...
제가 아는 선에서 player가 서버에서 byte-range header를 통해 컨텐츠를 받는 방식은 대충 아래와 같은 시나리오로 진행합니다.
여기서 처음 HEAD method를 통해서 컨텐츠의 크기를 알아내고, 또 Accept-Ranges: bytes를 보고 서버가 byte-range request에 응답할 수 있음을 알 수 있습니다.
그런데 위 댓글에서도 적었다시피 iphone의 경우에는 HEAD method를 쓰지 않고, 처음부터 GET method에서 "Range: bytes=0-1" 헤더를 포함해서 보내고, 응답이 적절할 경우 이후 순서를 진행하는 듯 보입니다.
206 패킷을 보낼 시 한가지 이상한 문제가
206 패킷을 보낼 시 한가지 이상한 문제가 있었습니다.
"Response Header"의 "Content Range"가 "4294967296-2241967/5578101213906606520"이렇게 나옵니다.
정상적인 우분투의 "Response Header"의 "Content Range"는 "0-1/5183534"입니다.
혹시 엔디안 문제일까요?
우분투의 경우 big를 사용하고, 저희 임베디드 리눅스는 리틀을 사용합니다.
빅을 사용하는 임베디드 리눅스에 테스트해보아야겠습니다. ㅠㅠ
다른 의견 있으신 분 어떤의견이라도 감사히 듣겠습니다.
일단 iphone에 video streaming의
일단 iphone에 video streaming의 원인이 이것이 아니더라도, 현재 포팅하고 계신 apache가 명백히 잘못된 응답을 하고 있기 때문에, 이 부분을 찾아서 수정하시는 것이 먼저라고 생각합니다.
답변 감사합니다. 아파치 서버랑 웹쪽은 해본적이
답변 감사합니다.
아파치 서버랑 웹쪽은 해본적이 없는지라.
"Response"에 대해 자세히 정의해주셔서 감사합니다.
p.s 서버 문제인거 같지만...
애플에는 테러하러 가야겠습니다.
가실분 모집합니다.
해결됐지만 iOS 6.0이 발목잡음
srclib/apr/include/apr.h 파일을 수정 후 잘됩니다.
//sukyung's change
//typedef off_t apr_off_t;
typedef long long apr_off_t;
위와 같이 off_t 자료형을 8Byte "long long"로 수정후 동영상이 나오기 시작했습니다.
But iOS6 패치 후 다른 문제가 발생하였습니다.
이넘의 애플은 정말..~~싫습니다.
P.S 테러하러가실분 여전히 모집합니다.
아직 한분도 지원하지 않았습니다.
댓글 달기