Как воспроизводить видео с заданного времени

Serg

New Member
Доброго дня, коллеги. Подскажите, пожалуйста, каким образом могу проиграть в плеере на внешнем сайте видеофайл в медиасервера (трансляция уже завершена и доступен только архив видеозаписи) с определённого места. Например с 25 по 38 секунду.

В описаниях к медиафайлам на сервере есть временные метки Timecodes, но в документации не нашел как их записывать и использовать.
 

Max

Administrator
Staff member
Добрый день.
В текущей реализации все сделано в основном для real-time видеопотоков.
Работа с воспроизведением записе - VOD, реализована в базовом варианте для просмотра.
Т.е. начать с определенного момента не получится.
Варианты:
1. Переместить записанный mp4 файл в каталог web-сервера, например apache или nginx и далее использовать плеер и прогрессивную загрузку чтобы проиграть файл с определенного места.
2. Использовать другой медиасервер для воспроизведения записанных файлов.
Мы планируем добавить функцию просмотра заданного места, но в первых приоритетах ее нет.
 

Serg

New Member
Добрый день. Может уже появилась поддержка real-time видеопотоков в новом медиасервере? Или руки так и не дошли?
 

Max

Administrator
Staff member
Добрый день.
Поддержка воспроизведения записанных файлов с определенного места по-прежнему не является приоритетной, поскольку WCS в первую очередь предназначен для realtime стриминга. Текущие доступные варианты решения задачи были описаны выше.
 

Serg

New Member
Опишу проблему подробно. По вашей рекомендации в марте 2019 мы настроили nginx медаифайлов с метками начала и конца. Всё работало без проблем. Недавно из-за того, что эфиры перестали прослушиваться на IOS решили обновить медиа-сервер (проблему это не решило с айфономи, но возникла проблема другая).

Почти все новые записи (которые создал flashphonrer 5.2) стали очень странно прослушиваться. Пример:
https://stream.mythospro.ru/stream-...bsmjmlcb0ui0r5cdtgqnj.mp4?start=52.375&end=66 играет
https://stream.mythospro.ru/stream-...bsmjmlcb0ui0r5cdtgqnj.mp4?start=52.375&end=65 молчит
или
https://stream.mythospro.ru/stream-...pfvm4i0olhq9frqs7ma94ksv38.mp4?start=5&end=66 играет
https://stream.mythospro.ru/stream-...pfvm4i0olhq9frqs7ma94ksv38.mp4?start=5&end=65 молчит

Все файлы, которые записаны были flashphoner 5.0 воспроизводятся в любом диапазоне времени без проблем. Пример:
https://stream.mythospro.ru/stream-...6behu0alauek0usdk8lcd41jc6.mp4?start=5&end=65
https://stream.mythospro.ru/stream-...-3rmgl2sh04agcq34jjlcophgj1.mp4?start=5&end=6

У меня сложилось такое впечатление, что вы стали как-то по другому записывать файлы. Но что именно не так и есть ли возможность это исправить - я не пойму.
Очень прошу вашей помощи разобраться в проблеме. В чем разница медифайлов от сервера 5.0 и 5.2?
 

Max

Administrator
Staff member
Добрый день.
В WCS версии 5.2 были внесены некоторые изменения по синхронизации аудио/видео при записи потока.
Для дальнейшей работы с проблемой, соберите, пожалуйста, логи по инструкции (с дампами входящих потоков, с момента их публикации)
и отправить их нам на support@flashphoner.com.
Кроме того, если возможно, предоставьте ssh-доступ на сервер.
 

Serg

New Member
Коллеги, на support все отправил. Очень жду вашей помощи.
 

Max

Administrator
Staff member
Добрый день. Данные на support получили.
Проверили ваши mp4 файлы. Они корректно пишутся в mp4 кодек AAC 44100 Hz и проигрываются в VLC плеере полностью.
Таким образом, видимых проблем с самой записью нет.
Есть проблема в воспроизведении файлов с помощью Nginx и только в том случае, когда задаются временные метки.
Дальнейшие действия:
1. Попробуйте перекодировать запись с помощью ffmpeg в тот же самый кодек AAC 44100 Hz.
Примеры перекодирования есть в документации ffmpeg
Code:
ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a
ffmpeg должен выровнять транскодировать mp4 и выпрямить тайминги, если что-то сломалось
Таким образом, вы можете переконвертировать все аудио файлы, или же настроить автоматическую конвертацию по событию окончания записи: on_record_hook
В этом случае, все записанные файлы будут проходить переконвертацию вашим скриптом на стороне сервера.
2. Чтобы мы могли протестировать Nginx, дайте пожалуйста в этой ветке форума подробные пошаговые инструкции как установить и настроить модуль Nginx, отвечающий за проигрывание файлов с определенного места. Тогда мы сможем пройти по вашей инструкции и воспроизвести проблему на наших серверах. В этом случае, мы сможем завести тикет / баг и сообщить когда будет найдено решение.
 

Serg

New Member
Спасибо за ваше участие.
1. Перекодировать попробовал
Code:
ffmpeg -i stream-test1.mp4 -c:a libfdk_aac -b:a 128k stream-test2.mp4
В результате конечный файл так же не проигрывается с концом меньше 66 секунды https://stream.mythospro.ru/stream-test2.mp4?start=7&end=65
2. Модуль для nginx вот такой https://nginx.org/ru/docs/http/ngx_http_mp4_module.html , вроде в centos он уже собран с этим параметром, нужно только включить библиотеку
load_module "/usr/lib64/nginx/modules/ngx_stream_module.so";
и настроить:

Code:
server {
        listen       80 default_server;
        server_name  domen_name.com;
   
root         /usr/local/FlashphonerWebCallServer/records/;

  location ~ \.(mp4)$ {
        mp4;
        mp4_buffer_size 5m;
        mp4_max_buffer_size 20m;
        gzip on;
        gzip_static on;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        expires max;
        directio 10m;
#        limit_rate 96k;
#        limit_rate_after 3m;
        }
}
 

Max

Administrator
Staff member
Добрый день.
Мы создали тикет WCS-2386 для исследования Вашего случая, но, к сожалению, нам не удается воспроизвести проблему с приведенными Вами настройками nginx/1.16.1 и сборкой сервера 5.2.416. Просим предоставить SSH доступы к Вашему серверу для тестирования в Вашем окружении на support@flashphoner.com
 

Max

Administrator
Staff member
В нашем случае удалось скорректировать запись следующей командой:
Code:
ffmpeg -i bad.mp4 -c:v libx264 -c:a aac -movflags -faststart good.mp4
Пока разбираемся что можно сделать чтобы не пришлось конвертировать каждую запись.
 

Serg

New Member
Спасибо за помощь. Перекодировать - это не самая большая проблема. Важно, чтобы новые записи корректно воспроизводились. У меня стоит версия wcs 5.2.396. В версии 5.2.417 такая проблема сохраниться?
 

Max

Administrator
Staff member
Проблема заключается в размещении метаданных в начале файла при записи, так сделано для того, чтобы потом записи можно было играть, например, с хранилища AWS S3, не выкачивая предварительно весь файл целиком. Это было добавлено в сборках 5.2, поэтому в последних сборках проблема тоже будет воспроизводиться, пока мы не найдем фикс, чем сейчас и занимаемся. В качестве временного фикса можно использовать перекодирование.
 

Serg

New Member
Возможно Вы знаете какой-либо другой способ воспроизведения записей с метаданными вначале с указанием начала и конца? Вообще очень хотелось бы получить эту возможность в самом медиасервере.
 

Serg

New Member
В описании модуля https://nginx.org/ru/docs/http/ngx_http_mp4_module.html как раз рекомендуется размещать метаданные вначале файла, чтобы не расходовать ресурсы на чтение всего файла перед формированием потока. Т.е. скорее это проблема с формированием самих метаданных.
 

Max

Administrator
Staff member
Добрый день.
Проблема не в метаданных, а в используемом аудиокодеке при записи. Мы работаем над фиксом. В качестве временного решения можно выставить настройку
Code:
use_fdk_aac=false
В версии 5.0 использование аудиокодека FDK еще не поддерживается, соответственно и проблема не проявлялась.
 

Serg

New Member
Проверил и заработало!!!! Спасибо огромное. Без вашей помощи я бы не разобрался.
 

Max

Administrator
Staff member
Добрый день.
Проблема была исправлена в сборке 5.2.428. Кроме того, фиксы по записи с учетом воспроизведения через nginx были добавлены в сборке 5.2.437. Пожалуйста, обновите 5.2 до данной сборки, включите FDK AAC и проверьте.
Проблема была в постоянном битрейте аудио, выставляемом по умолчанию для записей. Для управления битрейтом добавлена настройка
Code:
record_fdk_aac_bitrate_mode=5
Эта настройка по умолчанию выставлена в 5 режим битрейта (наиболее качественный) для FDK AAC кодека. Подробности приведены в документации.
 

Serg

New Member
Добрый день. Может уже появилась поддержка real-time видеопотоков с определенной временной метки в новом медиасервере?

У меня работает модуль ngx_http_mp4_module в nginx, но он использует flash-плеер (в последней опере звук вообше перестал воспроизводится). Хочется полного решения из одного продукта.

Добрый день.
В текущей реализации все сделано в основном для real-time видеопотоков.
Работа с воспроизведением записе - VOD, реализована в базовом варианте для просмотра.
Т.е. начать с определенного момента не получится.
Варианты:
1. Переместить записанный mp4 файл в каталог web-сервера, например apache или nginx и далее использовать плеер и прогрессивную загрузку чтобы проиграть файл с определенного места.
2. Использовать другой медиасервер для воспроизведения записанных файлов.
Мы планируем добавить функцию просмотра заданного места, но в первых приоритетах ее нет.
 

Max

Administrator
Staff member
Добрый день.
Добрый день. Может уже появилась поддержка real-time видеопотоков с определенной временной метки в новом медиасервере?
Для real-time видеопотоков нет возможности начать воспроизведение с определенной временной метки. Есть возможность играть записанный файл в браузере (поддерживается прогрессивная загрузка), в этом случае работает перемотка, но это работает только для контейнера MP4.
Но при проигрывании в браузере файл начинает играть с начала.
 
Top