Проблемы с WSS потоком

Ivan

Member
При вещании RTMP потока WSS поток при просмотре тормозит и имеет ужасный звук.
Тоже самое и с ЮТУБ роликами, прилагаю два видео, Ютуб ролик вещается по rtmp.
1 видео просмотр RTMP
https://yadi.sk/i/Gp0ZsCkC3FtCsP
2 видео просмотр WSS (это один и тот же поток)
https://yadi.sk/i/rqWFQlMp3FtCst
 

Max

Administrator
Staff member
Как именно вещаете по RTMP?
Какая сборка сервера?

Например, мы вещаем mp4 файл такой командой на наш демо-сервер:
Code:
ffmpeg -re -i /tmp/VIDEO2findingnews.mp4 -preset ultrafast -acodec aac -strict -2 -vcodec libx264 -f flv rtmp://wcs5-eu.flashphoner.com:1935/live/stream1
Работает плавно, звук чистый в плеере https://wcs5-eu.flashphoner.com/demo2/player
Сборка 2122

Кстати, в ваших записях звуковой составляющей нет. Только видео. Дайте инструкцию, как вы вещаете, мы у себя установим и проверим.
 

Ivan

Member
Записал видео трансляции со звуком.
Вещание идёт через RTMP, просмотр WSS. (Если вещание идёт через WSS, то с просмотром WSS всё отлично)
У нас версия 5.0.2117
Звук всё время ужасный, изображение зависло на пару секунд в конце видео.
Кстати, в HLS всё хорошо с изображением, но звук примерно такой же.
https://yadi.sk/i/YzJxrzty3FyGbV
 

Ivan

Member
Как у нас проигрываются ролики:
1 процесс читает с youtube :
self._process = subprocess.Popen(('youtube-dl', '--no-color', '--no-cache-dir', '--no-progress','-o', '-', '-f', '22/18', self.url, '--reject-title', self.stream_id),stdout=subprocess.PIPE)

2 процесс вещает на flashphoner через ffmpeg:
self._process2 = subprocess.Popen(('ffmpeg', '-re', '-i', '-', '-c:v', 'copy', '-acodec', 'copy', '-threads','1', '-f', 'flv',
'-rtmp_conn','O:1 NS:appKey:flashStreamingApp NO:custom:O:1 NS:auth:' + self.auth + ' NS:stream:' + self.stream_id + ' O:0 O:0',self.destination + '/flashStreamingApp/' + self.stream_id), stdin=self._process.stdout)

Настройи ffmpeg были взяты такие же как у нас сейчас идёт вещание на FlashMediaServer.
Кстати в случае с Ютуб роликами (видео которе выше), звук хороший.
 

Max

Administrator
Staff member
Звук всё время ужасный, изображение зависло на пару секунд в конце видео.
Снова спрошу. Как именно вещаете по RTMP?
Мы проверили два способа:
1. ffmpeg
Code:
ffmpeg -re -i /tmp/VIDEO2findingnews.mp4 -preset ultrafast -acodec aac -strict -2 -vcodec libx264 -f flv rtmp://wcs5-eu.flashphoner.com:1935/live/stream1
2. Стандартный пример Flash Streaming
https://wcs5-eu.flashphoner.com/demo2/flash-streaming
В обоих примерах со звуком все в порядке.
Если у вас кастомный RTMP / Flash стример, приведите кусок кода - как используется микрофон.
В нашем примере Flash Streaming
Используются следующие настройки микрофона (line 95)
Code:
private function initMic():void{
                var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
                options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
                options.echoPath = 128;
                options.nonLinearProcessing = true;
                mic.codec = SoundCodec.SPEEX;
                mic.encodeQuality = 5;
                mic.framesPerPacket=1;
                mic.gain=50;
                mic.setSilenceLevel(0,2000);
                mic.enhancedOptions = options;
                Logger.info("Mic initialized");
            }
 

Max

Administrator
Staff member
Звук всё время ужасный, изображение зависло на пару секунд в конце видео.
Кстати в случае с Ютуб роликами (видео которе выше), звук хороший.
Теперь совсем не понятно где звук хороший, а где плохой. Опишите пожалуйста по шагам, что нужно сделать, чтобы воспроизвести проблему.
Застримить любое видео с Youtube на WCS, используя ваши команды?
 

Ivan

Member
И записал видео зависание Youtube ролика на rtmp потоке после минут 30 вещания (В начале с ним всё идеально, как в видео из первого поста).
В тоже самое время wss поток со своими проблемами остаётся стабильным - изображение плохое как в первом видео, но нет таких тормозов.
https://yadi.sk/i/JYQpVBsM3FyVZg
 

Ivan

Member
Звук ужасный при транслировании из флеш плеера с вэбкамеры и просмотре этого потока по WSS
при проигрывании youtube роликов звук впорядке.
 

Ivan

Member
настройки из нашего флешплеера

public static const DEFAULT_AUDIO_USE_ECHO_SUPPRESSION:Boolean = true;
public static const DEFAULT_AUDIO_AUTOGAIN:Boolean = true;
public static const DEFAULT_AUDIO_QUALITY:Number = 8;
public static const DEFAULT_AUDIO_CODEC:String = SoundCodec.SPEEX;
public static const DEFAULT_AUDIO_VAD:Boolean = true;
public static const DEFAULT_AUDIO_RATE:Number = 22;


microphone.setSilenceLevel(0,1000);
microphone.framesPerPacket = 1;

if(!properties)
return;

microphone.codec = properties.audioCodec;
microphone.setUseEchoSuppression(properties.audioUseEchoSuppression);

var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
options.autoGain = properties.audioAutoGain;
if(!properties.audioUseEchoSuppression)
options.mode = MicrophoneEnhancedMode.SPEAKER_MUTE;

microphone.encodeQuality = properties.audioQuality;
microphone.enableVAD = properties.audioIsNeedVAD;
microphone.rate = properties.audioRate;

if(!properties.audioIsNeedVAD)
microphone.setSilenceLevel(-1,2000);
 

Max

Administrator
Staff member
Теперь понятнее. Поправьте, если что-то не так.
1. Когда захватываете ролики с YouTube, то
  • Flash (RTMP) плеер - воспроизведение может зависнуть через 30 секунд. Звук хороший.
  • WebRTC плеер - есть проблемы с качеством видео, но не зависает. Звук хороший.
2. Когда транслируете с Web-камеры и Flash Player
  • Звук плохой, при воспроизведении по WebRTC.
  • Звук хороший при воспроизведении RTMP.
Все верно? В каком браузере тестируете?

Попробуйте опубликовать поток с вашего Flash Player на наш демо-сервер.
Code:
rtmp://wcs5-eu.flashphoner.com:1935/live
И воспроизвести здесь
Code:
https://wcs5-eu.flashphoner.com/demo2/player
Что со звуком?

Если через наш сервер ваш плеер тоже дает плохой звук, то будем проверять код плеера.
А если все в порядке, тогда вам возможно нужно обновить сервер или проверить серверные настройки.
У нас в Flash Streaming настройки звука похожие. Работает ровно.
 

Ivan

Member
Всё верно, кроме -
  • Flash (RTMP) плеер - воспроизведение может зависнуть через 30 секунд. Звук хороший.
Не зависает, и не через 30 секунд, а начинает очень тормозить и видео получается в виде слайд-шоу, как в видео из http://forum.flashphoner.com/threads/Проблемы-с-wss-потоком.10815/#post-11842, по прошествию какого-то давольно долгого времени, я заметил через минут 20-30.

Трансляцию на ваш сервер попробуем.
 

Max

Administrator
Staff member
Хорошо, попробуем настроить стриминг с YouTube в качестве источника и посмотрим что получится.
 

Max

Administrator
Staff member
Проблему удалось воспроизвести. Попытаемся исправить.
На текущий момент получается обойти и добиться плавного воспроизведения, если
1) На ffmpeg использовать библиотеку libx264 для пережатия видео, полученного с YouTube
2) На Flash Player выставить NetStream.bufferTime=5 секунд для воспроизведения.
Пример в каком месте меняем bufferTime:
https://github.com/flashphoner/flas...dependencies/rtmp_player/src/player.mxml#L119
Если получится исправить и получить плавное воспроизведение без этих изменения, я сообщу дополнительно.
 

Max

Administrator
Staff member
Добрый день.
Мы оттестировали видео с захватом с YouTube. Играет плавно продолжительное время без сбоев.
Тестировали воспроизведение на Flash и на WebRTC потоков 720p
1. Использовали последние билды.
И настройку
Code:
rtmp_in_buffer_enabled=true
в flashphoner.properties
Эта настройка включает буффер, который выравнивает входящий RTMP поток с ffmpeg.
2. Для стриминга используем такой скрипт:
Code:
#!/usr/bin/python
import subprocess
import sys
def show_help():
    print 'Usage: '
    print './streamer.py url streamName destination'
    print './streamer.py https://www.youtube.com/watch?v=aNpaAIBVAKA streamName rtmp://192.168.1.1:1935/live'
    return
def streamer() :
    url = sys.argv[1]
    if not url :
    print 'Error: url is empty'
    return
    stream_id = sys.argv[2]
    if not stream_id:
    print 'Error: stream name is empty'
    return
    destination = sys.argv[3]
    if not destination:
    print 'Error: destination is empty'
    return
    _youtube_process = subprocess.Popen(('youtube-dl','-f','','--prefer-ffmpeg', '--no-color', '--no-cache-dir', '--no-progress','-o', '-', '-f', '22', url, '--reject-title', stream_id),stdout=subprocess.PIPE)
    _ffmpeg_process = subprocess.Popen(('ffmpeg','-re','-i', '-','-preset', 'ultrafast','-vcodec', 'libx264', '-acodec', 'copy','-threads','1', '-f', 'flv',destination + "/" + stream_id), stdin=_youtube_process.stdout)
    return
if len(sys.argv) < 4:
    show_help()
else:
    streamer()
При захвате видео c YouTube, мы обнаружили, что видео идет в профиле H.264, который использует B-фреймы.
WCS не поддерживает такие профили, а именно профиль H.264 Main с использованием B-фреймов, и поэтому не может нормально обработать и конвертировать такой поток. B - фреймы будут потеряны.

WCS поддерживает профиль H.264 Baseline, без использования B-фреймов. Поэтому поток, захваченный с YouTube, нужно подготовить и конвертировать в Baseline, как это сделано в примере кода:
Code:
_ffmpeg_process = subprocess.Popen(('ffmpeg','-re','-i', '-','-preset', 'ultrafast','-vcodec', 'libx264', '-acodec', 'copy','-threads','1', '-f', 'flv',destination + "/" + stream_id), stdin=_youtube_process.stdout)
В результате ffmpeg транскодирует поток, полученный с YouTube и выдает RTMP без B-фреймов.

Тестировали несколько 720p роликов с битрейтами 5-10 Mbps. Все отыгрывают нормально, если конечно хватает полосы на download:
 

Ivan

Member
Наконец-то сделали тестовый флешь плеер с которого можно вещать на ваш сервер.
https://vichatter.com/flashplayer/
Попробуйте просматривать WSS поток, чтоб была какая-то речь. Звук ужасный - ничего не понятно.
 

Ivan

Member
Надо в Stream название нового стрима вписать, которого ещё нет на сервере. И После нажати на ADD начнётся вещание на сервер в поле HOST
У меня работает, тоже Chrome 57
 

Max

Administrator
Staff member
Спасибо. Теперь плохой звук воспроизводится.
Если этот стример построен на коде, приведенном выше, попробуйте отключить VAD.
В логах сервера видно сообщения, возможно VAD что-то ломает в звуке.
Code:
RTMP-pool-3-thread-1 received not used message: [2 METADATA_AMF0 c8 #1 t75013 (158) s21] name: setVolume data: [2.0] for 123
Кроме этого, WCS ожидает Speex 16 Khz, поэтому 22 нужно заменить на 16.
Code:
public static const DEFAULT_AUDIO_USE_ECHO_SUPPRESSION:Boolean = true;
public static const DEFAULT_AUDIO_AUTOGAIN:Boolean = false;
public static const DEFAULT_AUDIO_QUALITY:Number = 6;
public static const DEFAULT_AUDIO_CODEC:String = SoundCodec.SPEEX;
public static const DEFAULT_AUDIO_VAD:Boolean = false;
public static const DEFAULT_AUDIO_RATE:Number = 16;
Попробуйте с этими настройками. Мы попробуем проверить с вашими.
Если эти настройки уже не актуальны, пришлите те, что используются в коде стримера swf.
 

Max

Administrator
Staff member
Наш пример работает со звуком нормально
https://wcs5-eu.flashphoner.com/demo2/flash-streaming
Код примера:
https://github.com/flashphoner/flas...flash_client/streaming/src/streaming.mxml#L90
Код настройки микрофона:
Code:
private function initMic():void{
                var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
                options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
                options.echoPath = 128;
                options.nonLinearProcessing = true;
                mic.codec = SoundCodec.SPEEX;
                mic.encodeQuality = 5;
                mic.framesPerPacket=1;
                mic.gain=50;
                mic.setSilenceLevel(0,2000);
                mic.enhancedOptions = options;
                Logger.info("Mic initialized");
            }
 

Max

Administrator
Staff member
Добрый день.
Code:
private function initMic():void{
var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
mic.codec = SoundCodec.SPEEX;
mic.framesPerPacket=1;
mic.setUseEchoSuppression(true);
mic.encodeQuality = 8;
mic.enableVAD = true;
mic.rate = 22;
mic.setSilenceLevel(0,1000);
options.autoGain = true;
mic.enhancedOptions = options;
Logger.info("Mic initialized");
}
Проверили у себя эти настройки микрофона.
На качество аудио так не повлияло. Сообщений "received not used message" в логе нет.
Пришлите пожалуйста полный код вашего плеера https://vichatter.com/flashplayer/ на logs@flashphoner.com чтобы мы могли его собрать и протестировать или применить ваши настройки.
 
Top