2017-01-15 1 views
0

2 주 동안 내 머리를 부러 뜨 렸습니다. 아직 해결할 수 없습니다. 저는 비디오 파일을 스트리밍하는 Python (wpf GUI 용 Ironpython) 기반의 서버 - 클라이언트 기반 스트리밍 플레이어를 구축하려고합니다. 내 문제는 클라이언트가 아직로드하지 않은 부분을 찾도록 요청한 경우입니다. 내가 .mp4 파일의 중간을 보내려고 할 때, 그는 그것을 재생할 수없는 것 같습니다.HTTP 206 부분 콘텐츠 요청은 어떻게 작동합니까?

이제는 모든 온라인 플레이어에 있기 때문에 존재한다는 것을 알았습니다. 클라이언트는 원하는 바이트 범위를 요청하고 서버가 그에게 보내는 HTTP 206 부분 콘텐츠 요청을 사용합니다.

내 질문은입니다. 클라이언트가 .mp4 파일의 갭 (바이트)으로 비디오를 재생할 수있는 방법은 무엇입니까? 파일 중간에 어떻게 시청할 수 있습니까? 내가 그것을 시도하는 것처럼 보일 때 플레이어는 파일을 열지 않을 것입니다.

더 중요한 것은 : 무료로 검색 할 수 있도록 내 서버 클라이언트 프로그램에서 어떻게 구현할 수 있습니까?

나는 인터넷을 통해이 모든 것에 대한 간단한 설명을 찾으려고 정말로 노력했다 ... 나 같은 초보자를 위해 철저하고 간략하게 설명해 주시면 매우 감사하겠습니다.

미리 감사드립니다.

답변

1

MP4 파일을 재생하기 전에 클라이언트 (예 : 브라우저)는 파일의 헤더 부분을 읽어야합니다. MP4는 'Atoms'로 나누어지고 무브 아톰은 파일의 헤더 또는 인덱스 아톰입니다.

스트리밍되는 MP4 파일의 경우이 Moov 원자를 파일의 앞쪽으로 이동하는 것이 일반적으로 최적화됩니다.

이렇게하면 클라이언트가 처음부터 moov를 가져올 수 있으므로 원하는 오프셋으로 이동할 수 있도록 필요한 정보를 얻을 수 있습니다.

시작 부분에 moov 아톰이 없으면 클라이언트는 전체 파일을 다운로드해야하거나 조금 더 정교한 경우에는 찾을 때까지 범위 요청이있는 파일로 건너 뜁니다.

+0

일단 moov 원자를 얻으면 파일의 중간 부분을 재생할 수 있습니까? –

+1

moov 아톰에는 파일의 모든 프레임에 대한 바이트 오프셋이 들어 있습니다. 원자를 파싱하고, 싱크 프레임을 찾고, 청크 오프셋을 찾고, 그 바이트에서 다운로드하십시오. – szatmary

관련 문제