При стриминге потока без видео он не воспроизводится на demo плеере

dmitry1987

New Member
Если стримить с видео то поток воспроизводится и с видео и с аудио , если же стримить поток с одним аудио то он не воспроизводится в демо плеере https://demo.flashphoner.com:8888/admin/demo.html

Пример стриминга:
Code:
ffmpeg -re -i screenrecord2.mov -map a -acodec mp3 -f flv rtmp://нашсервер.рф:1935/live/stream_ffmpeg
 

Max

Administrator
Staff member
1. MP3 не поддерживается, лучше использовать AAC
2. Если в RTMP-метаданных не указано, что поток audio-only, то для воспроизведения как WebRTC нужно добавить constraints с video: false (как в примере Media Devices)
Code:
session.createStream({
   name: streamName,
   constraints : {
       audio: true,
       video: false,
   }
...
 

dmitry1987

New Member
Спасибо за ответ, поменяли кодек аудио на AAC , прогнали поток через микшер https://docs.flashphoner.com/pages/viewpage.action?pageId=9241422
Поток воспроизводится но прерывисто (лагает) с фиксированным интервалом (причем источник просто файл и если воспроизвести стрим напрямую с видео то все работает норм), с чем может быть связана такая проблема результата микширования ?
 

Max

Administrator
Staff member
Пришлите, пожалуйста, используя эту ссылку, файл и команду ffmpeg, которая используется для стриминга, - проверим.
 

dmitry1987

New Member
Пришлите, пожалуйста, используя эту ссылку, файл и команду ffmpeg, которая используется для стриминга, - проверим.
там максимум 30мб можно прикрепить, вот ссылка на google drive https://drive.google.com/file/d/1pPEAVBonAKGzXA1nh_rMite-kRgtwkzR/view
Запуск стрима
Bash:
ffmpeg -re -i screenrecord2.mov -preset ultrafast -acodec aac -vcodec copy -f flv rtmp://localhost:1935/live/stream_ffmpeg
создание микшера
Code:
POST https://localhost:8444/rest-api/mixer/startup
Accept: */*
Cache-Control: no-cache

{ "uri": "mixer://mixer1", "localStreamName": "stream3", "hasVideo": "true" }

###

POST https://localhost:8444/rest-api/mixer/add
Accept: */*
Cache-Control: no-cache

{ "uri": "mixer://mixer1", "localStreamName": "stream3", "remoteStreamName": "stream_ffmpeg" }
 

Max

Administrator
Staff member
Воспроизвели лаги в микшере (внутренний тикет WCS-2901), сообщим по результатам.
 

Max

Administrator
Staff member
Добрый день.
Наши тесты показали, что файл закодирован по профилю Main с использованием B-фреймов. Чтобы микшер играл такой поток плавно, необходимо либо перекодировать поток без использования B-фреймов (предпочтительно), либо увеличить входной буфер микшера
Code:
mixer_in_buffering_ms=600
но это даст дополнительную задержку.
Также обращаем внимание, что поток закодирован с FPS 60, а микшер по умолчанию кодирует в 30 FPS. Публикация такого потока в микшер дает дополнительную нагрузку на процессор сервера и расход системной памяти (не Java heap). В связи с этим, рекомендуем публиковать в микшер потоки не более 30 FPS.
 

dmitry1987

New Member
Добрый день.
Наши тесты показали, что файл закодирован по профилю Main с использованием B-фреймов. Чтобы микшер играл такой поток плавно, необходимо либо перекодировать поток без использования B-фреймов (предпочтительно), либо увеличить входной буфер микшера
Добрый день перекодировали поток без B-фреймов и в 30 fps, разбили на 2 потока (аудио и видео), публикуем:
Bash:
ffmpeg -re -i screenrecord2.mov -preset ultrafast -map 0:v -c:v libx264 -f flv -x264-params bframes=0 -filter:v fps=fps=30 rtmp://localhost:1935/live/stream_ffmpeg_v
ffmpeg -re -i screenrecord2.mov -preset ultrafast -map 0:a -acodec aac -f flv rtmp://localhost:1935/live/stream_ffmpeg_a
и микшируем:
Code:
POST https://localhost:8444/rest-api/mixer/startup
Accept: */*
Cache-Control: no-cache

{ "uri": "mixer://mixer1", "localStreamName": "stream3", "hasVideo": "true" }

###

POST https://localhost:8444/rest-api/mixer/add
Accept: */*
Cache-Control: no-cache

{ "uri": "mixer://mixer1", "localStreamName": "stream3", "remoteStreamName": "stream_ffmpeg_v", "hasVideo": "true", "hasAudio": "false" }

###

POST https://localhost:8444/rest-api/mixer/add
Accept: */*
Cache-Control: no-cache

{ "uri": "mixer://mixer1", "localStreamName": "stream3", "remoteStreamName": "stream_ffmpeg_a", "hasVideo": "false", "hasAudio": "true" }
При просмотре выходного потока, видео стрим регулярно исчезает , если его добавить снова через вызов REST API, то он снова появляется (ошибок повторного добавления нету) , что говорит о том что сам стрим не отвалился на сервере Flashphoner но из микшера пропадает.
 

Max

Administrator
Staff member
Попробуйте добавить эту настройку в flashphoner.properties и перезапустить сервер
Code:
mixer_in_buffering_ms=600
Если не поможет, предоставьте оба файла для тестирования, используя эту форму (ссылку на Google Drive или другое файлохранилище можно указать в поле Comment, чтобы не светить ссылки на форуме)
 

dmitry1987

New Member
а обязательно перезагружать сервер (просто сервер prod) ? добавили настройку и сделали reload , не помогло

(файл тот же что и до этого использовался)
 

Max

Administrator
Staff member
а обязательно перезагружать сервер (просто сервер prod) ? добавили настройку и сделали reload , не помогло
Эта настройка применяется только к новым экземплярам микшера, на те, что уже работают к моменту перечитывания настроек, она не повлияет.
Также обратите внимание, что, поскольку с точки зрения сервера это два разных источника потока (две публикации), синхронизация аудио и видео не может быть гарантирована, изначально тот поток, который опубликован позднее, будет отставать на разницу времен публикации (до сотен миллисекунд, что уже будет заметно зрителю), поэтому не рекомендуется такое разделение на потоки в продакшне.
Мы создали тикет WCS-2928 для воспроизведения проблемы, но, повторяем, кейс выглядит неприменимым в продакшне, поэтому просим уточнить кейс. О результатах по тикету сообщим здесь.
 

Max

Administrator
Staff member
Мы повторили Ваш тест с раздельной публикацией аудио и видео дорожек в микшер. Поскольку микшер создан как аудио+видео микшер, поток с видео, но без аудио выводится из микшера по отсутствию активности аудио составляющей. В Вашем случае рекомендуем отключить контроль активности для обоих составляющих настройками
Code:
rtp_activity_audio=false
rtp_activity_video=false
Эти настройки требуют перезапуска сервера
 
Top