Отсутствие звука в трансляции

Alex Po

Member
Уже не первый раз сталкиваемся с проблемой - отсутствие звука при просмотре трансляций, при этом видео воспроизводится.
Смена устройства решает проблему.
Сегодня удалось получить информацию от одного из клиентов с этой проблемой:
Использовалось устройство Самсунг J3, Клиент использует стандартный браузер (иконка Интернет - насколько я понимаю - это samsung internet browser)
Попробовать воспроизвести проблему не на чем.
По остальным подобным проблемам внятный фидбэк от клиентов получить не удалось.
Мы используем FlashphonerWebCallServer-5.0.2414
Что можете посоветовать?
 

Alex Po

Member
Вот инфо о клиенте в REST API:
Code:
"clientVersion":"0.5.12","clientOSVersion":"5.0 (Linux; Android 5.1.1; SAMSUNG SM-J320F Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.5 Chrome/38.0.2125.102 Mobile Safari/537.36","clientBrowserVersion":"Mozilla/5.0 (Linux; Android 5.1.1; SAMSUNG SM-J320F Buil
d/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.5 Chrome/38.0.2125.102 Mobile Safari/537.36"
при воспроизведении использовался "mediaProviders":["WebRTC","WSPlayer"]
лог с клиента у нас отключен
 

Max

Administrator
Staff member
Нужно понять что там используется WebRTC или WSPlayer.

В логе flashphoner.log должно быть видно по SDP.
WebRTC присылает длинное SDP с кодеками VP8, H.264.
WSPlayer присылает только один видео кодек MPEG.

Если используется WebRTC, можно на клиенте для этого браузера и устройства попробовать поменять приоритет на :["WSPlayer","WebRTC"].

Воспроизвести проблему можно попробовать с тестовыми девайсами через:
pcloudy.com или testobject.com
Там можно поискать именно этот девайс Samsung J3 и протестировать на нем.
 

Alex Po

Member
к сожалению на pcloudy.com или testobject.com нет устройства Samsung J3.
И с выводом звука там есть трудности, даже с youtube у меня звука не было в этих эмуляторах на тех устройствах, на которых удалось протестировать в демо-режиме.

в Samsung Iinternet Browser Beta, поставленном через Play market на не samsung устройство звук в трансляциях через flashphoner по webRTC работает.
Возможно в этом браузере в какой-то специфической версии была проблема с webRTC, а юзеры как обычно не устанавливают обновления....

насчет переключения на ["WSPlayer","WebRTC"]
Я правильно понимаю, что мне надо это отдать в ответе в restAPI. То есть мне приходит в запросе от flashphoner ["WebRTC","WSPlayer"], а я в ответе меняю приоритет на ["WSPlayer","WebRTC"]. так?
 

Max

Administrator
Staff member
Я правильно понимаю, что мне надо это отдать в ответе в restAPI. То есть мне приходит в запросе от flashphoner ["WebRTC","WSPlayer"], а я в ответе меняю приоритет на ["WSPlayer","WebRTC"]. так?
Лучше проставить явно на клиенте, при инициализации:
Code:
Flashphoner.init({
flashMediaProviderSwfLocation: '../../../../media-provider.swf',
receiverLocation: '../../dependencies/websocket-player/WSReceiver2.js',
decoderLocation: '../../dependencies/websocket-player/video-worker2.js',
preferredMediaProvider: "WSPlayer"
});
И только для того проблемного браузера, если есть возможность его распознать.
 

Alex Po

Member
Code:
OBJECT:
{
  "nodeId" : "sqtBKfLSOieGn8HRrdtq44BQzd6H3kEd@89.223.41.197",
  "appKey" : "defaultApp",
  "sessionId" : "/178.70.17.219:53262/89.223.41.197:8443",
  "mediaSessionId" : "42922480-a093-11e7-b74c-296299935d7f",
  "name" : "59c66e658d145",
  "published" : false,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "PENDING",
  "sdp" : "v=0\r\no=- 1988962254 1988962254 IN IP4 0.0.0.0\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=sdplang:en\r\nm=video 0 RTP/AVP 32\r\na=rtpmap:32 MPV/90000\r\na=recvonly\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 PCMU/8000\r\na=recvonly\r\n",
  "record" : false,
  "width" : 640,
  "height" : 480,
  "bitrate" : 0,
  "quality" : 0,
  "mediaProvider" : "WSPlayer",
  "history" : false,
  "publishing" : false,
  "playing" : false,
  "custom" : {
    "tokenview" : "f8a0cff1249d353da17bfd36cd15d621ff769dfa",
    "translationpassword" : ""
  },
  "constraints" : {
    "audio" : true,
    "video" : {
      "width" : 1280
    }
  }
}
 
Last edited:

Alex Po

Member
в данный момент у нас стоит: codecs=opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,vp8,h264,flv,mpv
 

Max

Administrator
Staff member
Лог, который приведен выше, показывает, что коннект пришел с WSPlayer.
С ним работает или также нет звука?
 

Alex Po

Member
звука нет.
Это подключение с iphone 6s - этот смартфон попал мне в руки с такой же проблемой.
 

Alex Po

Member
при этом если я ставлю preferredMediaProvider: "WSPlayer" и подключаюсь с другого устройства, то звук есть
{"nodeId":"sqtBKfLSOieGn8HRrdtq44BQzd6H3kEd@89.223.41.197","appKey":"defaultApp","sessionId":"/91.215.252.67:55116/89.223.41.197:8443","mediaSessionId":"fa8abf80-a1e1-11e7-9e14-7d1a41cb47e3","name":"59c8d0e4bd619","published":false,"hasVideo":true,"hasAudio":true,"status":"PENDING","sdp":"v=0\r\no=- 1988962254 1988962254 IN IP4 0.0.0.0\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=sdplang:en\r\nm=video 0 RTP/AVP 32\r\na=rtpmap:32 MPV/90000\r\na=recvonly\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 PCMU/8000\r\na=recvonly\r\n","record":false,"width":640,"height":480,"bitrate":0,"quality":0,"parentMediaSessionId":"f6e5ac50-a1e1-11e7-90f7-8f50516333be","mediaProvider":"WSPlayer","history":false,"publishing":false,"playing":false,"custom":{"tokenview":"d873814c4ef47ed3b3f9a3f907fa27d59386f2ce","translationpassword":""},"constraints":{"audio":true,"video":{"width":1280}}}
, но с iphone 6s звука нет
{"nodeId":"sqtBKfLSOieGn8HRrdtq44BQzd6H3kEd@89.223.41.197","appKey":"defaultApp","sessionId":"/91.215.252.67:65030/89.223.41.197:8443","mediaSessionId":"59ef3820-a1e2-11e7-b372-3f289f75ca7c","name":"59c8d0e4bd619","published":false,"hasVideo":true,"hasAudio":true,"status":"PENDING","sdp":"v=0\r\no=- 1988962254 1988962254 IN IP4 0.0.0.0\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=sdplang:en\r\nm=video 0 RTP/AVP 32\r\na=rtpmap:32 MPV/90000\r\na=recvonly\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 PCMU/8000\r\na=recvonly\r\n","record":false,"width":640,"height":480,"bitrate":0,"quality":0,"parentMediaSessionId":"51021021-a1e2-11e7-90f7-8f50516333be","mediaProvider":"WSPlayer","history":false,"publishing":false,"playing":false,"custom":{"tokenview":"","translationpassword":""},"constraints":{"audio":true,"video":{"width":1280}}}
 

Max

Administrator
Staff member
с iphone 6s звука нет
Проверьте переключатель mute на телефоне.
Звука не будет, если он переключен в положение mute.
mute.jpg
 

Attachments

Max

Administrator
Staff member
И еще, на многих браузерах мобильных устройств, в том числе iOS, Android, есть требование безопасности по воспроизведению звука.
Перед тем как проиграть звук, пользователь должен кликнуть по UI-элементу (по любой кнопке или ссылке) на экране браузера и проиграть любой кусок звука.
Важно, чтобы этот клик был отработан в основном потоке JavaScript.
Выглядит так. Вызывается воспроизведение куска звука с помощью вызова Flashphoner.playFirstSound(); в основном потоке.
https://github.com/flashphoner/flas.../examples/demo/streaming/player/player.js#L86
Code:
function start() {
    if (Flashphoner.getMediaProviders()[0] === "WSPlayer") {
        Flashphoner.playFirstSound();
    } else if ((Browser.isSafariWebRTC() && Flashphoner.getMediaProviders()[0] === "WebRTC") || Flashphoner.getMediaProviders()[0] === "MSE") {
        Flashphoner.playFirstVideo(remoteVideo);
    }
..
}
 

Alex Po

Member
Эта инициализация звучит как звук "цок"?
Да, все верно! как только я коснулся экрана звук пошел...
а где можно поподробнее узнать на вашу реализацию Flashphoner.playFirstSound() с описанием...
просто такое ощущение что у меня не всегда проходит его инициализация! Причем на некоторых браузерах она работает корректно, а на некоторых нет.
 

Max

Administrator
Staff member
Эта инициализация звучит как звук "цок"?
Да, это он и есть.
Реализация здесь:
https://github.com/flashphoner/flas..._api-2.0/src/websocket-media-provider.js#L144
Code:
var playFirstSound = function() {
    var audioBuffer = audioContext.createBuffer(1, 441, 44100);
    var output = audioBuffer.getChannelData(0);
    for (var i = 0; i < output.length; i++) {
        output[i] = Math.random() * 2 - 1;
    }
    var src = audioContext.createBufferSource();
    src.buffer = audioBuffer;
    src.connect(audioContext.destination);
    src.start(0);
};
Если на iPhone переключатель в mute, этот метод не срабатывает.
На других браузерах может быть проблема с реализацией Web Audio API.
WSPlayer активно использует Web Audio API (audioContext), и был оптимизирован для iOS Safari.
Поэтому в других браузерах, при расхождении в Web Audio API могут возникать подобные проблемы.
 

Alex Po

Member
У меня такое ощущение, что на iphone этот метод и сейчас не всегда срабатывает...
завтра продолжу тестирование..
А есть какой-то минимальный/максимальный таймаут от инициализации до включения звука?
 

Max

Administrator
Staff member
На iPhone 6 он не всегда срабатывает, если включен mute.
По крайней мере в наших тестах было так.
>А есть какой-то минимальный/максимальный таймаут от инициализации до включения звука?
Таймаута нет, но на странице создается ресурс Web API audioContext и его инициализация может занять некоторое время, зависит от браузера и устройства.
 

Alex Po

Member
Сейчас у меня основная проблема в том, что пока не не выполню тап по элементу на странице, звук "цок" не появляется.
а мне необходима функция autoplay
 

Max

Administrator
Staff member
autoplay на iPhone работать не будет.
Это сделано специально для того, чтобы открывшийся вебсайт не мог начать играть звук без прямого разрешения пользователя (клика по экрану).
В последних версиях iOS 11 Safari тоже самое с видео. Видео не начнет играть, пока пользователь не кликнет.

На десктопных браузерах таких ограничений нет.

Т.е. исправить / поменять данное поведение может только сам производитель устройств, в данном случае Apple.
 

Alex Po

Member
Но у меня это получилось сделать.
У меня идет инициализация flashphoner при загрузке страницы - Flashphoner.init, далее при тапе по кнопке на странице идет срабатывание function openroom(), где я сразу же вызываю Flashphoner.playFirstSound() после чего я делаю рад задач на js для получения streamName, поле чего вызываю function start() так же, как в вашем примере.
И звук включается.
Насколько я понял главное сделать Flashphoner.playFirstSound() при обработке тапа. Я еще понаблюдаю, но на ipone 6s и на iphone 4 проблем сегодня не было замечено.
 

Max

Administrator
Staff member
Но у меня это получилось сделать.
У меня идет инициализация flashphoner при загрузке страницы - Flashphoner.init, далее при тапе по кнопке на странице идет срабатывание function openroom(), где я сразу же вызываю Flashphoner.playFirstSound() после чего я делаю рад задач на js для получения streamName, поле чего вызываю function start() так же, как в вашем примере.
И звук включается.
Насколько я понял главное сделать Flashphoner.playFirstSound() при обработке тапа. Я еще понаблюдаю, но на ipone 6s и на iphone 4 проблем сегодня не было замечено.
Да, так должно работать.
Но выше вы писали:
а мне необходима функция autoplay
Мы под autoplay подразумеваем автоматическое воспроизведение после загрузки страницы, без кликов / тапов по экрану.
Если требуется клик, то это уже не autoplay.
 
Top