Испорченный webm файл в WebRTC конференции (?)

alexanderY

Member
Наткнулся на проблемы с обработкой одного файла ffmpeg'ом.
Стал копать, в итоге посмотрел на файл-исходник (отданный Flashphoner'ом):
  • в начале файла есть звук
  • примерно через минуту от начала звук пропадает
  • в это же время duration bar в плеере VLC перескакивает в самый конец файла
  • при этом, видео продолжает воспроизводиться без проблем до самого конца (~7 минут)
В комнате, во время конференции, проблем замечено не было, юзера все слышали, а вот файл с записью подпорченный.
Файл на почту logs вам вышлю сейчас.
 

Max

Administrator
Staff member
Файл получили. Проблемы со звуком попробуем воспроизвести на тестах под нагрузкой.
Если есть возможность найти лог этой сессии, пришлите его тоже. Возможно там будут какие-то ошибки.
 

Max

Administrator
Staff member
Нормально воcпроизвести проблему не удалось.
Пару раз получали сломанную запись при сильной искуственной порче канала и потерях.
Но у вас видео чистое, а звук оборвался. Что-то другое.

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

Чтобы включить логи, нужно обновиться до последней сборки и добавить строку в конфиг log4j.properties
Code:
log4j.logger.FFOutputWriter=DEBUG
 

alexanderY

Member
Обновились до 2276, строку в конфиг добавили. Потестируем.

Пока анализировал разные видеозаписи, созрел вопрос. С какими настройками вообще сохраняется / транскодируется видео? Я имею в виду framerate, GOP size, или любые другие настройки. Замечаю такой баг иногда: некоторые ролики почти невозможно перемотать. Если смотреть от начала до конца — проблем с воспроизведением нет. Но если попытаться посмотреть с любой другой точки, то воспроизведение откатывается почти к самому началу. Но такое не во всех видео есть. Плеер vlc. И сама перемотка долгая, по сравнению с мгновенной перемоткой mp4, например, хотя подозреваю, что это особенность кодека.
 

Max

Administrator
Staff member
Видео не транскодируется специально чтобы не повышать нагрузку на сервер.
Если видео заходит в VP8, пишется в файл webm.
Если видео заходит в H.264, пишется в файл mp4.
Я имею в виду framerate, GOP size, или любые другие настройки.
Параметрами видео управляет Chrome браузер, который кодирует и публикует видеопоток.
Поэтому какой GOP он установит, такой и будет записан.
Как будет плавать FPS внутри стрима, так и будет записано в файл.
И сама перемотка долгая, по сравнению с мгновенной перемоткой mp4, например, хотя подозреваю, что это особенность кодека.
Особенности VP8 кодека при использовании Chrome в том, что он очень долго может не высылать key-frame, а перемотка как раз привязана к ключевым кадрам.

Здесь можно сделать следующее:

1) Попробовать перейти на H.264
Code:
codecs=opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
В этом случае будет писать mp4 (H.264 + AAC) и проблем с записью и перемоткой возможно будет меньше.
Из недостатков: с H.264 иногда возникают странные вещи на некоторых платформах.
Например, везде работает хорошо. Потом у кого-то под Windows на определенном ноутбуке странно кодирует Chrome. В результате падает битрейт а за ним и качество.
Бывает редко, но встречается.
H.264 вряд ли сделает GOP и Key Frame Int стабильными. Вполне может быть так, что они продолжат динамически меняться. Разве только GOP может стать короче чем у VP8.

2) Транскодировать архивы записей самостоятельно с помощью ffmpeg на этом же сервере или на другом.
При транскодинге можно указать GOP, Key Frame Int и получить видео с нормальной перемоткой.
 

alexanderY

Member
Спасибо. Я примерно так себе и представлял процесс. Мы, конечно, делаем транскодинг средствами ffmpeg. Загвоздка была в том, что при исользовании одной и той же команды, разные видео давали разный результат. От "всё хорошо" до "звук есть, картинки нет". Это для меня крайне странно. Сейчас я тестирую ещё кое-какие изменения в параметрах ffmpeg, вроде бы пока всё хорошо, но сначала прогоню большую пачку файлов, чтобы убедиться наверняка. Если проблем не будет, выложу команду здесь, если вдруг кому пригодится.
 

Maksym

Member
Добрый день
Видео не транскодируется специально чтобы не повышать нагрузку на сервер.
Если видео заходит в VP8, пишется в файл webm.
Если видео заходит в H.264, пишется в файл mp4.
А если надо все же, что бы записанный файл был в mp4, то перекодировать при помощи ffmpeg или уже появился параметр, который принудительно заставит WCS записывать в mp4 ?
 

Max

Administrator
Staff member
А если надо все же, что бы записанный файл был в mp4, то перекодировать при помощи ffmpeg или уже появился параметр, который принудительно заставит WCS записывать в mp4 ?
Настроек, которые форсируют транскодинг в mp4 нет.
Поэтому только конвертировать.
После окончания записи вызывается скрипт WCS_HOME/bin/on_record_hook.sh с именем файла записи.
Там можно реализовать конвертацию в mp4 с помощью ffmpeg.
 

Maksym

Member
Настроек, которые форсируют транскодинг в mp4 нет.
Поэтому только конвертировать.
Спасибо. А в планах на будущее такое есть?
После окончания записи вызывается скрипт WCS_HOME/bin/on_record_hook.sh с именем файла записи.
Там можно реализовать конвертацию в mp4 с помощью ffmpeg.
Да, знаю.
 

Max

Administrator
Staff member
Завели feature request WCS-1217. В ближайших планах пока нет.
Как будут по нему движения, сообщим.
 
Top