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

Discussion in 'Web Call Server 5' started by Ivan, Mar 15, 2017.

  1. Ivan

    Ivan New Member

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

    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

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

    Ivan New Member

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

    Ivan New 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.
    Кстати в случае с Ютуб роликами (видео которе выше), звук хороший.
  5. Max

    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");
                }
  6. Max

    Max Administrator Staff Member

    Теперь совсем не понятно где звук хороший, а где плохой. Опишите пожалуйста по шагам, что нужно сделать, чтобы воспроизвести проблему.
    Застримить любое видео с Youtube на WCS, используя ваши команды?
  7. Ivan

    Ivan New Member

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

    Ivan New Member

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

    Ivan New 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);
  10. Max

    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 настройки звука похожие. Работает ровно.
  11. Ivan

    Ivan New Member

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

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

    Max Administrator Staff Member

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

    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
    Если получится исправить и получить плавное воспроизведение без этих изменения, я сообщу дополнительно.
  14. Max

    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:


  15. Ivan

    Ivan New Member

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

    Max Administrator Staff Member

    У меня swf почему-то не подгружается в этот плеер.
    container.jpg
    Покажите пожалуйста пример, как им пользоваться.
    Тестирую в Chrome 57.

    Attached Files:

Share This Page