2013-06-17 4 views
2

HTTP 라이브 비디오 스트림을 파일에 저장하려고합니다. 이 목적을 위해 M3U8 파일을 주기적으로 요청하고 미디어 세그먼트의 URL을 추출하여 세그먼트를 다운로드 한 다음 다시 어셈블해야합니다. 내가 가지고있는 문제는 부드러운 재생을 달성하기위한 올바른 전략을 찾는 것입니다. 재구성 된 비디오는 항상 화면이 고르지 만 오디오는 건너 뜁니다. 처음 몇 초만 괜찮습니다. 내가 파일을 구문 분석 후HTTP 라이브 스트림으로 부드러운 비디오 재생

#EXTM3U 
#EXT-X-TARGETDURATION:2 
#EXT-X-VERSION:3 
#EXT-X-ALLOW-CACHE:NO 
#EXT-X-MEDIA-SEQUENCE:1105 
#EXTINF:1.00000, 
tmp/video1.ts 
#EXTINF:1.00000, 
tmp/video2.ts 
#EXTINF:1.00000, 
tmp/video2.ts 
#EXTINF:1.00000, 
tmp/video3.ts 
#EXTINF:1.00000, 
tmp/video4.ts 
#EXTINF:1.00000, 
tmp/video5.ts 

, 나는 모든 (당시 하나) 파일을 TS 다운로드를 시작하고 내가 마지막에서 두 번째 다운로드에 대한있을 때, I :

내 M3U8 파일은 다음과 같이 보입니다 새 M3U8 파일을 요청하십시오. 잘못인가? 서버가 아직 세그먼트를 업데이트하지 않았습니까? 따라서 동일한 파일을 다시 다운로드하고 있습니까? 새 재생 목록을 요청하기 전에 5 초 동안 기다렸으나 (number_of_videos * duration) 아직 언급 된 재생 문제는 계속 발생합니다.

원활하게 재생할 수있는 방법에 대한 아이디어 나 전략이 있으십니까?

답변

0

기본 전략은 다음과 같습니다.

먼저 매니페스트 파일을 처리하고 버퍼를 채우기 위해 처음 몇 개의 세그먼트를 다운로드하십시오. 버퍼에 충분한 데이터가 있으면 재생을 시작하고 매니페스트가 끝날 때까지 순차적으로 추가 세그먼트를 계속 다운로드하면서 다시 요청할 수 있습니다. 새로 고침 된 매니페스트에서 새 세그먼트를 찾으면 이러한 URL을 다운로드 대기열에 추가합니다. 그렇지 않으면 미리 정해진 시간 동안 기다렸다가 매니페스트를 다시 새로 고칩니다. 예를 들어, 클라이언트는 (세그먼트의 총 지속 시간 * 세그먼트 수/2)에 따라 M3U8 매니 페스트를 폴링 할 수 있습니다.

일부 상용 플레이어는 재생 버퍼가 낮아지고 새로 고침 된 매니페스트에 다운로드 할 새 세그먼트가 없을 때 편집증 모드로 들어간다는 것을 알고 있습니다. 이 경우 업데이트 된 매니페스트를 훨씬 더 자주 요청하기 시작합니다.

또한 콘텐츠와 함께 클라이언트와 HTTP 서버 간의 캐싱에주의를 기울여야합니다. 예를 들어 일부 CDN은 최소 필수 기간 동안 매니페스트 파일을 캐시하므로 일부 기간에 요청하려고하면 부실한 매니페스트 파일이 다시 제공 될 수 있습니다.

위의 예에서 (그리고 나는 단지 손으로 만든 예제에 포함되기를 바란다.) 각 세그먼트의 지속 시간은 1 초로 보이는데, 이것은 매우 낮다. 실제로 이것이 사실이라면, 그에 따라 초기 버퍼를 조정하고 싶을 것입니다.

마지막으로 안정적인 플레이어와 소스 스트림을 확인한 결과 문제가 다른 쪽 끝이 아닌지 확인합니다.

- ab1

관련 문제