之前用webRTC都正常,就在iOS15升級後突然回報有問題
然後檢查一下發現,封包和訊號都在,但就是無法正常顯示畫面。
後來找了一下,網路上有一些iOS15對畫面的影響
https://developer.apple.com/forums/thread/689293
只要將safari上的測試性功能中,
VP9 decoder關閉
GPU Process: Media關閉
基本上在safari就能正常運作webRTC了,但問題來了
Google Chrome和webkit為底的app還是無法正常使用,只有在safari上運作是沒有意思的
所以經過了這幾天的交叉測試依然無法解決,正準備要放棄等apple更新時
在https://appr.tc/上發生了奇妙的事情
我無法正常顯示的畫面,在強制使用h264時,畫面正常了,能收到雙方的畫面。
於是我開啟了debug在ios的裝置上查了一下
這是ios 15的裝置 webRTC sdp的資料

這是webRTC 這是iOS15關閉VP9的結果(和iOS15前的差別就是98變96,其它沒什麼差)

發現了什麼了嗎?沒錯webRTC在iOS15後增加了VP9的協議,但A12(iPhoneX後的都有,X沒有,但XR及XS有)
所以推測應該是VP9影響了我要接收H264的狀況(safari也是關掉VP9之後才正常)
那我們就關掉VP9吧
首先我們先來看一下文件
//iOS的裝置會多這個編碼,導致我指派它H264時依然會被套用到VP9,原因不明
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fa:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fa:96 nack pli
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fa:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
所以問題在於VP9該如何取消掉呢
此時我們到RTCMultiConnection.js的文件中3062的位置
因為iOS的H264是125,但這文件判斷H264是用102來判斷,所以會進到default(如果是安卓或電腦的話,則會走H264 102
所以可以很簡單的在default中加入程式碼
sdp = sdp.replace('a=rtpmap:98 VP9/90000', 'a=rtpmap:98 VP8/90000');
sdp = sdp.replace('a=fmtp:97 apt=96', 'a=fmtp:97 apt=98');一般來說加了第一行就行了,但為什麼還要再把第二行也補上呢
因為當你把98設定成VP8的時候,96這條線路會被關掉,導致97要轉向96時會找不到
因此,要把97也轉向98,避免轉向失敗而停止
之後一切就正常了
只能說無言阿。