云實時音頻視頻SDK可與市場上的各種智能硬件設(shè)備(尤其是各種類型和不同版本的手機)配合使用,以確保SDK的穩(wěn)定性。但是,與智能手機適應(yīng)不同,智能硬件的適應(yīng)存在多種茄子差異。
1.許多智能硬件的硬件配置(如主內(nèi)存和CPU性能)通常低于手機性能。
2.一些供應(yīng)商在智能硬件的相機安裝方向、數(shù)量、類型和手機方面存在很大差異。
因此,在適應(yīng)問題上,智能硬件需要單獨的驗證討論,以下是針對所有人的詳細(xì)分析。
視頻捕獲適應(yīng)
采集方式合適
云實時音頻視頻SDK相機收集數(shù)據(jù)同時提供Texture和YUV(NV21),您可以設(shè)置多種收集方法來獲取Texture ID或byte遠(yuǎn)視視頻流數(shù)據(jù)。紋理ID用于表示圖像照片或一系列數(shù)據(jù),使用紋理可以更詳細(xì)地表示對象,YUV是從相機中收集的NV21格式數(shù)據(jù)。
YUV是一種顏色編碼格式,可以解釋為主要用于視頻、圖形處理線(pipeline)的遠(yuǎn)視視頻流數(shù)據(jù)。與RGB色彩空間相比,YUV旨在編碼、傳輸、減少帶寬使用量和減少信息錯誤。
forning live音頻視頻SDK默認(rèn)情況下以Texture方式收集,在本地使用時,編碼器默認(rèn)情況下為Android .media . mediacodecinfo . codec capabilities . color _ format surfo。如果縱斷面不支持色彩空間,則可能會出現(xiàn)屏幕解碼或解碼失敗的問題,開發(fā)人員可以在加入房間之前調(diào)用rongrtcconfig . builderenablevideotexture方法來設(shè)置是否以texture方式收集色彩空間。
擬合相機
智能硬件攝像頭安裝方向、數(shù)量和類型導(dǎo)致視頻收集問題時,云實時音頻視頻SDK的RongRTCConfig。Builder類設(shè)置方法可以通過setCameraDisplayOrientation和setCustomizedCameraParameter進(jìn)行設(shè)置,用于修改攝影機收集角度和Android . hardware . cameraset parameters(parameters
Rongyun實時音頻視頻SDK通過AndroID . hardware . camera . getnumberofcameras()方法獲取可用的攝像頭id。默認(rèn)情況下,前照相機處于打開狀態(tài)。需要打開魚眼鏡或多個攝影機硬件設(shè)備場景時,可以使用
Rongrtccapture.getinstance()。打開startcameracapture,切換;
Rongrtccapture.getinstance()。switchcamera指定ID的攝影機。
如果智能硬件具有USB攝像頭或USB麥克風(fēng),Android系統(tǒng)無法識別外部設(shè)備,調(diào)用上述方法將無法打開硬件設(shè)備(本地視頻無法端對端查看)。對于牙齒,建議使用云實時音頻視頻SDK發(fā)布自定義視頻流功能。
二、視頻編解碼器適應(yīng)
融合音頻視頻SDK是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態(tài)圖像專家組(MPEG)牙齒共同組成的聯(lián)合視頻,作為MPEG-4的第10部分,它支持H.264編解碼器,以支持高壓縮、高質(zhì)量、多種網(wǎng)絡(luò)的流媒體傳輸著稱
使用云音頻視頻SDK時,您可以設(shè)置配置信息(例如編碼器色彩空間、編碼級別、編碼幀速率、編碼關(guān)鍵幀間隔時間、編碼器速度控制模式等),以解決設(shè)備編解碼器引起的問題。
色彩空間編碼
在熔深RTCLib SDK中,相機收集數(shù)據(jù)的顏色格式為NV21,為YUV420格式,如果智能硬件供應(yīng)商自定義了顏色空間,則熔深SDK內(nèi)部處理顏色空間邏輯和設(shè)備支持的顏色空間不匹配。編碼錯誤報告、端到端解碼失敗、端到端市政廳屏幕等。如果遇到牙齒問題,開發(fā)人員可以使用rongrtcconfig . buildersethardwareencodecolor方法修改編碼色彩空間以解決此問題。
編碼等級。
編碼視頻后,顯示的數(shù)據(jù)質(zhì)量較低,因此要調(diào)整質(zhì)量,必須設(shè)置編碼級別級別級別,配置文件。熔深SDK默認(rèn)使用Android . media . mediacodecinfo . codecprofilelevel . avcprofilebaseline。開發(fā)人員也可以通過rongrtcconfig . builderenablehardwareencodehighprofile方法將其設(shè)置為and roid . media . mediacodecinfo . codecprofilelevel .與AVCProfileHigh相對應(yīng)的編碼
Android 6.0源代碼(Android/6 . 0 . 1 _ r16/xref/frameworks/av/media/libstagefright/acodec . CPP)
Android 7.0源代碼(Android/7 . 0 . 0 _ r31/xref/frameworks/av/media/libstagefright/acodec . CPP)
編碼速度控制模式
對于需要傳輸高質(zhì)量視頻流的場景,除了通過設(shè)置分辨率、幀速率和比特率來提高視頻質(zhì)量外,還可以控制編碼速率。云SDK默認(rèn)使用CBR,開發(fā)人員可以使用音頻視頻SDK的rongrtcconfig . buildersethardwareencodebitratemode,牙齒屬性Android 5.0開始支持參數(shù)設(shè)置。以下是三種茄子模式的介紹。
關(guān)鍵幀間隔時間編碼
H.264標(biāo)準(zhǔn)包括Instantaneous Decoding Refresh(IDR、即時解碼刷新、以下I幀)。H.264圖像由序列組成。一個序列是圖像編碼數(shù)據(jù)流,從I幀開始,到下一個I幀結(jié)束。兩個I幀之間是多個p幀(Predictive-frame)或b幀(Bi-directional predicted frames)牙齒,編碼關(guān)鍵幀間隔時間是IDR間隔時間。
I幀:GOP(圖片組)的第一幀,通常是MPEG使用的視頻壓縮技術(shù)。I幀圖像使用幀內(nèi)編碼方案。也就是說,它僅利用單幀圖像內(nèi)的空間從屬關(guān)系,而不是時間從屬關(guān)系。I幀使用幀內(nèi)壓縮,而不使用運動補償。I幀是隨機訪問的入口點,是解碼的基準(zhǔn)幀,因為它不依賴于其他幀。I幀主要用于解碼器初始化以及節(jié)目切換和插入。I幀圖像的壓縮倍數(shù)相對較低。I幀圖像定期顯示在圖像序列中。發(fā)生頻率可以在編碼器中選擇,I幀壓縮可以消除視頻的空間重復(fù),B、P用于消除時間重復(fù)。
P幀:向前參考幀(僅第一幀后的幀,與前一幀有差異,因此可以提高壓縮效率和圖像質(zhì)量)、壓縮時僅參考前一幀、幀間編碼方法(即同時利用空間和時間依賴性)、P幀圖像可以包含幀內(nèi)編碼部分。也就是說,P幀中的每個宏塊可以是向前預(yù)測的,參考之前的B幀或I幀解碼整個圖像。
b幀:雙向參考幀,壓縮參考前一幀和下一幀,幀之間的壓縮技術(shù)。壓縮比高,網(wǎng)絡(luò)不好,實時要求高等,實時交互式直播一般不使用。請記住,由于b幀圖像使用未來幀作為參考,因此MPEG-2編碼代碼流中的圖像幀傳輸順序和顯示順序不同。
H.264使用多幀預(yù)測,因此I幀后的p幀可以參考I幀前的幀,因此隨機訪問時無法將I幀作為參考條件找到。即使找到I幀,I幀后面的數(shù)據(jù)也可能無法解釋數(shù)據(jù),IDR幀是特殊的I幀。因為牙齒幀后面的所有參考幀僅參考和未參考IDR,所以解碼器收到IDR幀時,將立即清除參考幀緩沖區(qū),并將IDR幀用作參考幀。
熔深SDK的關(guān)鍵幀間隔時間默認(rèn)為100秒,開發(fā)人員可以通過rongrtcconfig . buildersethardwareencodekeyframeinterval方法修改間隔時間。將牙齒值設(shè)置得太小會增加網(wǎng)絡(luò)流量和編解碼器壓力。太大的話,如果網(wǎng)路有變動,影像品質(zhì)就會下降。這是實時音頻視頻SDK豐富了智能硬件視頻適應(yīng)的經(jīng)驗,希望能幫助開發(fā)者朋友理解智能硬件的適應(yīng)。