播放器適配經(jīng)驗總結(jié)——IOS-創(chuàng)新互聯(lián)

IOS平臺統(tǒng)一使用HLS協(xié)議,包括M3U8文件和分段TS文件

成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元涪陵做網(wǎng)站,已為上家服務(wù),為涪陵各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

1、抖屏

現(xiàn)象:播放中畫面動作抖動,好像畫面的順序錯亂

范圍:Mp4文件轉(zhuǎn)成TS,沒有問題,ASF轉(zhuǎn)成TS文件,有該現(xiàn)象

原因:ASF沒有cts_delta字段,TS(PES)中的PTS直接使用DTS,H.264中幀的順序是DTS順序,與顯示順序是不同的,B幀會出現(xiàn)在P幀前面,但是在后面顯示

方案:自己根據(jù)幀率和幀的順序,計算PTS,或者恢復(fù)出cts_delta值

幀率可以通過SPS中獲?。?/p>

frame_rate=sps.vui_parameters.num_units_in_tick.time_scale/sps.vui_parameters.num_units_in_tick

當(dāng)然前提是sps.vui_parameters_present_flag&&sps.vui_parameters.timing_info_present_flag&&sps.vui_parameters.fixed_frame_rate_flag

前提不滿足的時候,可以用前后兩個幀的dts差來計算:

frame_rate=time_scale/dts_diff

幀的順序在每個幀內(nèi)部有字段表示,根據(jù)sps.pic_order_cnt_type有不同算法,現(xiàn)在只考慮sps.pic_order_cnt_type==0的情況,這時候slice.slice_header.pic_order_cnt_lsb表示順序

cts=(dtsofidr)+slice.slice_header.pic_order_cnt_lsb/2*time_scale/frame_rate

或者直接使用num_units_in_tick:

cts=(dtsofidr)+slice.slice_header.pic_order_cnt_lsb/2*sps.vui_parameters.num_units_in_tick

2、爆音

現(xiàn)象:播放過程中聲音異常,夾雜著輕微爆炸的聲音

范圍:Mp4文件轉(zhuǎn)成TS,沒有問題,ASF、FLV轉(zhuǎn)成TS文件,有該現(xiàn)象

原因:ASF、FLV時間戳是毫秒級精度,TS文件是90000分之一秒,相差90倍,直接乘以90轉(zhuǎn)換,精度不夠。IOS播放TS的時候,完全依賴TS時間戳。

比如采樣率22050的音頻,1024的采樣點一個Sample,那么前三個Sample的時間戳情況是:

Sample號精確時間戳(秒)ASF時間戳誤差TS時間戳誤差
0000
11024/22050-0.00043990.000004535
22048/220500.0001202-0.000002041

方案:自己根據(jù)采樣率計算TS的時間戳,問題完整解決。

音頻samplen的TS(PES)時間戳為n*90000*1024/采樣率

備注:一開始沒有找到這個原因,采用合并音頻幀的方法,幾十個音頻幀合并起來,基本能解決問題,其中原因是合并之后誤差減少,用上面的原因分析也是說得通的。

3、綠屏

現(xiàn)象:播放剛開始,會出現(xiàn)瞬間綠色畫面

范圍:播放某幾個文件時;有時正常從頭播放沒有綠屏,但是從中間繼續(xù)播放會有綠屏。

原因:問題焦點集中在SEI的位置,Mp4只有第一個幀有SEI(只在第一個分段Mp4中有SEI),該幀的格式是:SEI+ISlice(IDRNalu),是同步幀。老版本bento4生成PES結(jié)果是AUD+SEI+SPS+PPS+ISlice(IDR);新版本版本bento4生成PES結(jié)果是AUD+SPS+PPS+SEI+ISlice(IDR)。雖然新版本有改動,也不能解決綠屏問題,還需要進一步分析。

方案:

4、播放器crash

現(xiàn)象:播放器直接crash掉

范圍:MacOs平臺,播放某幾個文件時,在一個特定時間點。iphone、ipad并沒有問題,但是同一影片同一時間點,會有播放丟幀現(xiàn)象

原因:問題本質(zhì)上在于媒資壓片(用Mp4Box生成Mp4文件)生成了不合常規(guī)的幀格式,在一個幀中出現(xiàn)了兩個slice:PSlice+ISlice(IDRNalu),該幀不在Mp4同步幀索引中,因此不算是同步幀。老版本的bento4生成PES的策略是在每個幀前面加上AUD,在IDR前面增加SPS、PPS,所以轉(zhuǎn)換結(jié)果是AUD+PSlice+SPS+PPS+ISlice(IDR);新版本的bento4生成PES的策略是在每個幀前面加上AUD,在同步幀增加SPS、PPS(在AUD后面),所以轉(zhuǎn)換結(jié)果是AUD+PSlice+ISlice(IDR)。Mac是QuickTime播放器在解析PES時,不知道什么算法,會在第一種情形Crash,第二種情況丟失一個ISlice,出現(xiàn)圖像失常。請注意,如果Mp4的幀格式符合常規(guī),那么新老bento4生成的結(jié)果是一樣的。

最后確認(rèn)是老版本MP4Box的bug,它在生成的MP4文件時將I和P幀打在了一個Sample中。具體原因是這個版本的MP4Box是以0x00000001為起始碼尋找NAL包,碰到以0x000001開頭時(比如出問題的IDR幀)就會跳過去,而264標(biāo)準(zhǔn)中起始碼0x000001或0x00000001都應(yīng)支持的。

方案:更新Mp4Box

5、無圖像

現(xiàn)象:播放有聲音、無圖像

范圍:ipad、iphone,一個特定的頻道

原因:在FLV文件轉(zhuǎn)成TS文件時,F(xiàn)LV文件在沒有同步幀上有SPS,PPS,轉(zhuǎn)換邏輯據(jù)此判斷H.264ES流中存在AUD(AccessUnitDelimiter),但是實際上不存在AUD,導(dǎo)致生成的TS文件中沒有AUD,ios平臺的播放器需要AUD,沒有就不能播放視頻。

方案:修正轉(zhuǎn)換邏輯,直接判斷有沒有AUD,并補充AUD。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:播放器適配經(jīng)驗總結(jié)——IOS-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://muchs.cn/article48/heehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、外貿(mào)建站外貿(mào)網(wǎng)站建設(shè)、虛擬主機、網(wǎng)站改版、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)