2014-02-07 1 views
1

У меня есть Chromecast и URL-адрес файла mp4 онлайн. У меня также есть подключение для загрузки 2 Мбит/с, что является жалкой и делает прямую буферизацию для Chromecast слишком медленной. Вот что я пробовал до сих пор:Chromecast PHP Buffer MP4

Через консоль разработчика я просто установил location.href в онлайн-адрес mp4. Chromecast будет буферизоваться в течение 20 секунд, воспроизводить видео за 10 секунд, а затем снова буферизировать. Таким образом, через консоль я приостановил видео и давал ему буфер в течение 5 минут. Когда я позволил ему снова сыграть, он играл около 15 секунд, а затем потерял весь прогресс и должен был быть возвращен на главный экран.

Поскольку я не хочу дождаться завершения полной загрузки mp4, я в настоящее время пытаюсь это сделать: я задерживаю mp4 в локальном файле, который находится в моем каталоге htdocs, и затем я направляю Chromecast в расположение этого файла. Однако при открытии файла mp4 thorugh Chrome (браузер) вместо воспроизведения отображается приглашение на загрузку, а Chromecast возвращается на главный экран.

Я реализовал буферизацию в PHP, и это выглядит следующим образом:

$bufferSource = 'http://example.com/path/to/file.mp4'; 

$bufferedReader = fopen($bufferSource, 'r'); 

while(!($finished = feof($bufferedReader))){ 

    if($finished !== false){ break; } 

    //get onle line 
    $buffer = fgets($bufferedReader); 


    file_put_contents('buffer.mp4', $buffer, FILE_APPEND); 

} 

fclose($bufferedReader); 

Я знаю, что PHP делает свою работу, как я могу посмотреть размер файла растет на моем компьютере, и я могу открыть файл с VLC. Может быть, еще один PHP-скрипт, который я мог бы сделать, чтобы получить доступ к локально буферизованному файлу mp4, который имитирует «буферность», поэтому Chrome не показывает диалог загрузки, а буферизирует файл, как и Chromecast?

EDIT: Еще одна вещь. Я не направляю Chromecast в скрипт PHP. Я фактически направляю его непосредственно в файл buffer.mp4.

ответ

1

Вам не хватает заголовка Content-Type в вашем скрипте PHP.

Выяснить, что заголовок исходного типа контента с вашего сервера (возможно video/mp4) и отправить его с проксирования скриптом так:

header('Content-Type: video/mp4'); 

Это позволит браузеру определить тип контента и воспроизвести его напрямую (если поддерживается), без загрузки.

Кроме того, я бы рассмотрел использование реального прокси-сервера, такого как Nginx, вместо того, чтобы изобретать колесо. Это будет намного проще и надежнее.

+0

На самом деле, я использую только скрипт PHP для буферизации в файл. Я не имею доступа к скрипту PHP на Chromecast, а скорее к самому выпущенному файлу, где, я думаю, заголовок автоматически включается из-за буферизации файла сценария. Таким образом, сервер-> клиентский и локальный сервер-> Chromecast - это два отдельных независимых процесса. – arik

+0

@ arik-so Так или иначе ваша проблема такая же. Ваш локальный сервер не настроен на отправку правильных заголовков содержимого. Если вы опубликуете, какой сервер вы используете, я могу направить вас более конкретно. – Brad

+0

Я использую локальный сервер XAMPP. В этом случае завтра я попытаюсь сделать еще одну страницу, которая будет обращаться к файлу после отправки заголовка mp4. – arik

0

Вы можете использовать ресивер с тегом Media Element, а затем указать его источник в файл mp4 на вашем сервере. Если вы не хотите писать свой собственный ресивер, вы можете использовать либо default, либо Styled Media Receiver. Вам понадобится очень простой отправитель для отправки URL-адреса, ознакомьтесь с репо github для примеров

 Смежные вопросы

  • Нет связанных вопросов^_^