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

Discussion in 'Web Call Server 5' started by Serg, Mar 13, 2019.

  1. Serg

    Serg New Member

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

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

    Max Administrator Staff Member

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

    Serg New Member

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

    Max Administrator Staff Member

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

    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?
  6. Max

    Max Administrator Staff Member

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

    Serg New Member

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

    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, отвечающий за проигрывание файлов с определенного места. Тогда мы сможем пройти по вашей инструкции и воспроизвести проблему на наших серверах. В этом случае, мы сможем завести тикет / баг и сообщить когда будет найдено решение.
  9. Serg

    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;
            }
    }
    
  10. Max

    Max Administrator Staff Member

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

    Max Administrator Staff Member

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

    Serg New Member

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

    Max Administrator Staff Member

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

    Serg New Member

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

    Serg New Member

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

    Max Administrator Staff Member

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

    Serg New Member

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

Share This Page