Проблема при воспроизведении прямой трансляции DashCast
Я пытаюсь захватить рабочий стол и транслировать его в прямом эфире на сервер Apache, используя DashCast. Он записывает и играет правильно, когда я делаю это по требованию, однако, когда я делаю это в прямом эфире, а затем играть с MP4Client
он показывает только черный экран, даже не получая никакого сообщения об ошибке во время захвата. Команды, которые я использую:
DashCast -vf x11grab -vres 1280x720 -v :0.0 -npts -live -out /public_html/
А потом я играю с:
MP4Client http://localhost/vitor/dashcast.mpd
Что приводит к следующему выводу:
MP4Client http://localhost/vitor/dashcast/dashcast.mpd
Using config file in /home/vitor directory
System info: 11948 MB RAM - 8 cores
Modules Found : 36
Loading GPAC Terminal
[Thread MediaManager] Couldn't set priority(2) for thread ID 0x9b55a700
[Thread MediaManager] Couldn't set priority(2) for thread ID 0x9b55a700
Terminal Loaded in 35 ms
Opening URL localhost/vitor/dashcast/dashcast.mpd
[DASH] Slight drift in UTC clock at time 2015-08-05T12:38:45Z: diff AST - now 3563501 ms
Service Connected
Так что я делаю не так? Клиент, по-видимому, правильно подключается к серверу, открывает проигрыватель, но на экране ничего не отображается. Я использую Ubuntu 14.04 с GPAC версии 0.5.0.
1 ответ
[DASH] Slight drift in UTC clock at time 2015-08-05T12:38:45Z: diff AST - now 3563501 ms
Это сообщение указывает на то, что существует разница ("небольшое" - это неправильное слово здесь, учитывая фактическую разницу!) Между временем UTC, указанным в MPD в атрибуте AvailabilityStartTime, и текущим временем, которое MP4Client использует для вычисления того, какой сегмент выбрать. Это актуально только для реального времени, поскольку предполагается, что все сегменты по требованию доступны постоянно.
MP4Client использует разные стратегии для определения "текущего" времени. Системное время на клиенте может отличаться от системного времени на сервере, если они, например, используют разные NTP-серверы. Системное время не надежно. Таким образом, MP4Client пытается получить время с сервера. Сначала он пытается использовать определенный HTTP-заголовок "Server-UTC", который может установить сервер. Смотрите, например, этот код. Если этот заголовок не установлен, он просматривает HTTP-заголовок "Дата", даже если он не очень точен. В вашем случае ваш HTTP-сервер, вероятно, имеет конфигурацию времени, которая не соответствует системному времени. Вы можете указать MP4Client прекратить использование информации о сервере и полагаться на его системное время. Поскольку вы используете клиент и сервер на одной машине, это должно работать. Документация по этой опции находится здесь. Для этого используйте:
MP4Client http://localhost/file.mpd -opt DASH:UseServerUTC=no
Кроме того, вы можете попробовать воспроизвести MPD локально, не заходя на веб-сервер.
MP4Client file.mpd
Если это не работает, откройте проблему на GitHub GPAC, предоставляя как можно больше информации, в частности, результат MP4Box -version
,