2017-01-15 2 views
0

Я пробивал себе голову за проход 2 недели, и я до сих пор не могу понять это. Я пытаюсь создать потоковый проигрыватель на основе Server-Client на Python (Ironpython для wpf GUI), который передает видеофайлы. Моя проблема заключается в том, когда клиент запрашивает часть, которую он еще не загрузил. Когда я пытаюсь отправить его только в середине файла .mp4, он, похоже, не может его воспроизвести.Как работает запрос на частичный контент HTTP 206

Теперь я знаю, что такая вещь существует, потому что у каждого онлайн-игрока есть это, и она использует запрос HTTP 206 Partial Content, где клиент просто запрашивает диапазон байтов, который он желает, и сервер отправляет его ему.

Мой вопрос: - Как клиент может воспроизводить видео с пробелом в байтах в своем файле .mp4 - как он может начать просмотр для середины файла? Когда я, кажется, пытаюсь, игрок просто не откроет файл.

И что еще более важно: как я могу реализовать это на своей программе Server-Client, чтобы включить бесплатный поиск?

Я действительно пытался найти простое объяснение этому по всему интернету ... Пожалуйста, объясните это основательно и простыми словами для новичка, такого как я, я был бы очень признателен.

Заранее спасибо.

ответ

1

Перед воспроизведением файла MP4 клиенту (например, браузеру) необходимо прочитать часть заголовка файла. MP4 разбит на «атомы», а атом Moov является заголовком или индексом для файла.

Для файлов MP4, которые будут переданы потоком, общая оптимизация заключается в перемещении этого атома Moov в переднюю часть файла.

Это позволяет клиенту получить moov в начале, и затем он будет иметь необходимую информацию, чтобы вы могли перейти к смещению, которое вы хотите в своем случае.

Если у вас нет атома moov в начале, клиент должен либо загрузить весь файл, либо если он немного сложнее, скачайте файл с запросами диапазона, пока он не найдет его.

+0

Но как только у меня есть атом moov, как я могу заставить его сыграть середину файла? –

+1

Атом moov содержит смещение байта каждого кадра в файле. Разберите атом, найдите кадр синхронизации, найдите смещение куска и загрузите с этого байта. – szatmary