문제

Apple에는 iPhone OS 3.0에 HTTP 적응 형 비트 전송 스트리밍이 포함되어 있으며, 특히 Safari는 자동으로 처리합니다.

저렴한 방식으로 이것을 플레이하고 싶지만 최악의 경우 사용자 정의 HTTP 서버와 흥미로운 PHP/etc 스크립팅이 필요할 것으로 예상됩니다.

그러나 먼저 프로토콜 차이 또는 표준이 무엇인지 알아야합니다. HTTP는 프로토콜로서 합리적으로 간단하지만 적응 형 비트 레이트는 파일 크기가 다르고 청크 위치가 다른 비트 레이트에서 다르다는 것을 의미합니다. 모두 서버 측에서 처리 되었습니까?

최종 사용자의 버퍼링 일시 중지를 제거하는 것은 라이브 및 사전 녹음 된 비디오 스트림 모두에 매우 매력적이며, 많은 네트워크와 정부가 비 포트 80 트래픽을 제한하고 있다면 HTTP를 통해 두 가지를 모두 수행하는 것이 훨씬 좋습니다.

  • HTTP 적응 비트 전송률 스트리밍, 특히 Apple의 구현에 대한 기술적 세부 사항은 무엇입니까?
  • HTTP 서버 자체의 일부인 모드의 일부인이 가장 잘 구현 된 것은 어디에 있습니까?

  • 클라이언트 측면에 어떤 변경이 필요한가?

도움이 되었습니까?

해결책

업데이트

Apple은 IETF 초안 제안을 만든 것처럼 보이며 일부 사람들은 이미 세그먼트를 연구하고 있습니다.

HTTP 라이브 스트리밍-Draft-Pantos-HTTP-Live-Streaming-01
http://tools.ietf.org/id/draft-pantos-pantos-live-streaming-01.txt

FFMPEG 및 오픈 소스 세그먼트와 함께 iPhone HTTP 스트리밍
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/


HTTP 서버가 단순히 멍청한 HTTP 서버로 작용하는 것 같습니다. Akamai가 제공 한 예제 웹 사이트를 파악하면 정적 컨텐츠 스트리밍을 시작하기에 충분한 정보가 제공됩니다.

http://iphone.akamai.com/

백서 ( http://www.akamai.com/dl/akamai/iphone_wp.pdf )는 전송 스트림 인코딩에 대한 정보를 제공하므로 .ts 스트림이 간단합니다.

인코더 (또는 별도의 세그먼터 프로세스)는 MPEG-2 TS 형식 (.ts)에서 일련의 작은 컨텐츠 세그먼트에서 H.264/AAC 함량을 생성합니다. 세그먼트를 참조하는 M3U8 인덱스 파일도 있습니다. 라이브 컨텐츠의 경우 M3U8은 최신 컨텐츠를 반영하도록 지속적으로 업데이트됩니다.

H.264 인코딩은 단일 패스 기준선 프로파일이어야합니다. 프레임 재 분격 비활성화. 키 프레임은 5 초마다 제안되며, 선택된 세그먼트 길이의 짝수 구 제수입니다.

웹 사이트는 M3U8 파일을 제공합니다.이 파일은 단순히 M3U 재생 목록이지만 UTF-8 문자 인코딩 형식입니다.

그런 다음 해당 파일은 각 비트 전송률에 대해 M3U8 파일로 연결됩니다. 나는 그들이 모두 같은 위치 (예 : 2 ~ 10 초마다)에서 컷을 가져와야한다고 가정하여 스위칭이 원활 할 수 있도록합니다. 클라이언트는 완전히 클라이언트 중심으로 보입니다. 클라이언트는 대역폭을 측정하는 방법과 어떤 버전을 얻을 것인지 결정합니다.

기본 파일의 내용은 다음과 같습니다.

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8

그런 다음 다른 파일은 다음과 같습니다.

HI/prog_index.m3U8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

med/prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

lo/prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

이것은 HTML 5 비디오 태그와 함께 작동합니다.

<video width="640" height="480">
   <source src="content1/content1.m3u8" />
</video>

여전히 답이없는 많은 질문이 있지만, 이것은 아마도 시작하기에 충분할 것입니다.

다른 팁

그리고 Python+Gstreamer의 작은 선수 http://code.google.com/p/hls-player/

오픈 소스 인코더 및 세그먼터 및 기타 멋진 물건에 대해서는 이것을 참조하십시오 :)

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top