Проблемы с отображением стрима в мобильном приложении

Ivan Balychev

New Member
В iOS sdk, столкнулись с проблемой, что когда стрим публикуется из браузера Safari (на десктопе), то обновление кадров в iOS приложении происходит раз в 3-4 секунды (то есть видео-поток не воспроизводится по сути вообще, а видео-фрейм обновляется раз в несколько секунд). Данное поведение воспроизводится только в iOS SDK и только при условии что стрим идет из браузера Safari. (в андроид сдк такой проблемы нет).
Проверено на последней версии сдк (пример twowaystreamingswift/twowaystreaming) (предыдущие версии такое же поведение).
Ниже предоставляю лог (возможно поможет), из приложения при проигрывании стрима.

@Max если нужна будет какая-то дополнительная информация - сообщите.

Code:
2021-03-12 12:25:19.428012+0200 TwoWayStreamingSwift[431:21788] [FPWCSApi2Session] No such callback method getVersion with data (
    "5.2.782-2658bf7f65bbed44509d1c50b78c96ab843d1a85"
)
2021-03-12 12:25:22.013246+0200 TwoWayStreamingSwift[431:21788] [FPWCSApi2MediaConnection] Media connection create offer
2021-03-12 12:25:22.018766+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] PeerConnectionState change 1
2021-03-12 12:25:22.022600+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2Stream] Created sdp v=0

o=- 1310696300973162801 2 IN IP4 127.0.0.1

s=-

t=0 0

a=group:BUNDLE audio video

a=msid-semantic: WMS

m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:08rQ

a=ice-pwd:/SQTLsMZnOn0sQsV6ESmwaPe

a=ice-options:trickle renomination

a=fingerprint:sha-256 37:C6:0D:FD:4D:8F:C3:E8:53:AA:BB:75:80:1F:BA:F9:7C:BD:DF:D3:8E:E0:03:C0:13:81:6E:2A:CD:38:8D:C0

a=setup:actpass

a=mid:audio

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

a=recvonly

a=rtcp-mux

a=rtpmap:111 opus/48000/2

a=rtcp-fb:111 transport-cc

a=fmtp:111 minptime=10;useinbandfec=1

a=rtpmap:103 ISAC/16000

a=rtpmap:104 ISAC/32000

a=rtpmap:9 G722/8000

a=rtpmap:102 ILBC/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:106 CN/32000

a=rtpmap:105 CN/16000

a=rtpmap:13 CN/8000

a=rtpmap:110 telephone-event/48000

a=rtpmap:112 telephone-event/32000

a=rtpmap:113 telephone-event/16000

a=rtpmap:126 telephone-event/8000

m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 124 125

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:08rQ

a=ice-pwd:/SQTLsMZnOn0sQsV6ESmwaPe

a=ice-options:trickle renomination

a=fingerprint:sha-256 37:C6:0D:FD:4D:8F:C3:E8:53:AA:BB:75:80:1F:BA:F9:7C:BD:DF:D3:8E:E0:03:C0:13:81:6E:2A:CD:38:8D:C0

a=setup:actpass

a=mid:video

a=extmap:14 urn:ietf:params:rtp-hdrext:toffset

a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=extmap:13 urn:3gpp:video-orientation

a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay

a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type

a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing

a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space

a=recvonly

a=rtcp-mux

a=rtcp-rsize

a=rtpmap:96 H264/90000

a=rtcp-fb:96 goog-remb

a=rtcp-fb:96 transport-cc

a=rtcp-fb:96 ccm fir

a=rtcp-fb:96 nack

a=rtcp-fb:96 nack pli

a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640c2a

a=rtpmap:97 rtx/90000

a=fmtp:97 apt=96

a=rtpmap:98 H264/90000

a=rtcp-fb:98 goog-remb

a=rtcp-fb:98 transport-cc

a=rtcp-fb:98 ccm fir

a=rtcp-fb:98 nack

a=rtcp-fb:98 nack pli

a=fmtp:98 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e02a

a=rtpmap:99 rtx/90000

a=fmtp:99 apt=98

a=rtpmap:100 VP8/90000

a=rtcp-fb:100 goog-remb

a=rtcp-fb:100 transport-cc

a=rtcp-fb:100 ccm fir

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=rtpmap:101 rtx/90000

a=fmtp:101 apt=100

a=rtpmap:127 red/90000

a=rtpmap:124 rtx/90000

a=fmtp:124 apt=127

a=rtpmap:125 ulpfec/90000
2021-03-12 12:25:22.027685+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] didChangeIceGatheringState change 1
2021-03-12 12:25:22.027803+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.027856+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.027903+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.027955+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.136419+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.137371+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.137519+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.138622+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] New ice candidate
2021-03-12 12:25:22.138691+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] didChangeIceGatheringState change 2
2021-03-12 12:25:22.138754+0200 TwoWayStreamingSwift[431:21788] [FPWCSApi2Session] No such callback method notifyAudioCodec with data (
    "F1751831-04CF-4810-832E-0CD7A5828857",
        {
        name = opus;
    }
)
2021-03-12 12:25:22.174395+0200 TwoWayStreamingSwift[431:21788] [FPWCSApi2MediaConnection] Set remote sdp: RTC_OBJC_TYPE(RTCSessionDescription):
answer
v=0

o=Flashphoner 0 1615544722050 IN IP4 23.109.86.141

s=Flashphoner/1.0

c=IN IP4 23.109.86.141

t=0 0

a=group:BUNDLE audio video

m=audio 18076 RTP/SAVPF 111 8 9

c=IN IP4 23.109.86.141

a=mid:audio

a=rtpmap:111 opus/48000/2

a=rtpmap:8 PCMA/8000

a=rtpmap:9 G722/8000

a=ptime:20

a=ice-pwd:7rnqfh4d0cg4ovpugbh3lld7ge

a=ice-ufrag:F1751831/04CF/4810/832E/0CD7A58288578glgl1f0ivg8k1

a=fingerprint:SHA-256 1A:EC:30:D3:48:9E:5C:EB:09:13:11:17:8F:A7:7F:0C:A4:7A:69:B0:DD:FA:99:A4:8B:7E:8A:96:27:A9:6D:9C

a=candidate:1 1 tcp 2130706431 23.109.86.141 18076 typ host tcptype passive

a=candidate:1 2 tcp 2130706431 23.109.86.141 18076 typ host tcptype passive

a=end-of-candidates

a=rtcp-mux

a=rtcp:18076 IN IP4 23.109.86.141

a=sendonly

a=ssrc:855036526 cname:rtp/audio/F1751831-04CF-4810-832E-0CD7A5828857

m=video 18078 RTP/SAVPF 98 100

c=IN IP4 23.109.86.141

a=mid:video

a=rtpmap:98 H264/90000

a=fmtp:98 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e02a

a=rtpmap:100 VP8/90000

a=rtcp-fb:* ccm fir

a=rtcp-fb:* nack

a=rtcp-fb:* nack pli

a=rtcp-fb:* goog-remb

a=extmap:13 urn:3gpp:video-orientation

a=ice-pwd:7rnqfh4d0cg4ovpugbh3lld7ge

a=ice-ufrag:F1751831/04CF/4810/832E/0CD7A58288578glgl1f0ivg8k1

a=fingerprint:SHA-256 1A:EC:30:D3:48:9E:5C:EB:09:13:11:17:8F:A7:7F:0C:A4:7A:69:B0:DD:FA:99:A4:8B:7E:8A:96:27:A9:6D:9C

a=candidate:1 1 tcp 2130706431 23.109.86.141 18076 typ host tcptype passive

a=candidate:1 2 tcp 2130706431 23.109.86.141 18076 typ host tcptype passive

a=end-of-candidates

a=rtcp-mux

a=rtcp:18078 IN IP4 23.109.86.141

a=sendonly

a=ssrc:252394895 cname:rtp/video/F1751831-04CF-4810-832E-0CD7A5828857
2021-03-12 12:25:22.182647+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] PeerConnectionState change 0
2021-03-12 12:25:22.467186+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] didChangeIceConnectionState 1
2021-03-12 12:25:22.631335+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] didChangeIceConnectionState 2
2021-03-12 12:25:22.631385+0200 TwoWayStreamingSwift[431:21079] [FPWCSApi2MediaConnection] didChangeIceConnectionState 3
2021-03-12 12:25:22.761829+0200 TwoWayStreamingSwift[431:21892] [FPWCSApi2Session] No such callback method notifyVideoFormat with data (
        {
        mediaSessionId = "F1751831-04CF-4810-832E-0CD7A5828857";
        status = RESIZE;
        streamerVideoHeight = 480;
        streamerVideoWidth = 854;
    }
)
2021-03-12 12:25:22.798787+0200 TwoWayStreamingSwift[431:21892] [FPWCSApi2Stream] Update stream state 3, media session id is F1751831-04CF-4810-832E-0CD7A5828857
 

Max

Administrator
Staff member
Добрый день.
На стороне сервера включите запрос ключевых фреймов от браузера в flashphoner.properties
Code:
periodic_fir_request=true
periodic_fir_request_interval=2000
 

Ivan Balychev

New Member
На сервере включены fir и pli

Code:
periodic_fir_request                    = true
periodic_fir_request_interval           = 2000
rtcp_pli_request_interval               = 2000
Но это влияет только на ключевые кадры и они отрисовываются, а кадры между ними не отрисовываются.
При том что в вэб версии поток просматривается нормально. @Max
 
Last edited:

Max

Administrator
Staff member
К сожалению, проблема не воспроизводится на сервере demo.flashphoner.com (сборка WCS 5.2.898, Web SDK 2.0.165 ) при публикации в примере Two Way Streaming из Safari 14.0.2 (16610.3.7.1.9), MacOS 11.1 и проигрывании потока в примерах Two Way Streaming, Player, собранных c версией iOS SDK 2.6.28. Также проблема не воспроизводится на текущей сборке WCS 5.2.912 (Web SDK 2.0.166)
Пожалуйста, обновите сервер до последней сборки WCS, также обновите Web SDK. Если проблема после этого продолжает воспроизводиться, предоставьте доступ к серверу с возможностью публикации и проигрывания при помощи этой формы. Также укажите сборку Mac OS и Safari, с которыми Вы тестируете.
 

Ivan Balychev

New Member
Спасибо, проверим сначала обновление сервера, если не поможет - будем добавлять ссылки.
 

Ivan Balychev

New Member
@Max А вы проводили тестирование на симуляторе или на устройстве (iOS)
Потому что судя по наблюдениям при использовании RTCEAGLVideoView (в симуляторе) проблема не воспроизводится - стрим идет нормально, однако при использовании RTCMTLVideoView (на устройстве) - проблема воспроизводится
 

Max

Administrator
Staff member
Мы тестировали на физическом устройстве (iPhone 7, iOS 14.3, примеры Two Way Streaming, Player, RTCMTLVideoView). Проблема не воспроизводилась.
 

Ivan Balychev

New Member
Добрый день. @Max
Не удалось установить причину (обновили сервер, но проблема с отображением стрима в iOS приложении, когда стрим приходит из браузера (Safari) остается прежней.
Проблема вопроизводится на устройстве (iOS 13-14, любое устройство) при использовании RTCMTLVideoView.
Используется Mac Os Big Sur 11.2.3
Safari Version 14.0.3 (16610.4.3.1.7)
Добавил доступ к с помощью формы
 
Last edited:

Max

Administrator
Staff member
Добрый день.
Мы провели тесты по описываемому сценарию с Вашим сервером. К сожалению, проблема не воспроизводится: в серии из нескольких тестов поток, публикуемый из примера Two Way Streaming в Safari Version 14.0.3 (16610.4.3.1.7) (MacBook Pro Retina 13 early 2015, MacOS Big Sur 11.2.3), при воспроизведении в примере TwoWayStreaming на iPhone 7 (iOS 14.4.2) с использованием RTCMTLVideoView играет плавно, без фризов.
По-видимому, проблема появляется только в Вашем окружении. Поэтому просим собрать отчет с сервера, как описано здесь, включая дебаговые клиентские логи и дамп трафика. Дамп трафика необходимо начать снимать до начала публикации. Имея дебаговые логи и дамп, мы сможем увидеть, как заходит поток на сервер, а также проиграть его из дампа, это даст возможность воспроизводить проблему в нашем окружении. Отчет и файл дампа отправьте через эту форму.
На похожие симптомы жаловались клиенты из англоязычного сегмента, но они использовали Web SDK для проигрывания. Проблема была решена отключением аппаратного ускорения на стороне браузера. Возможно, Вам это также поможет.
 
Top