各端播放器公共常見(jiàn)問(wèn)題
本文介紹阿里云播放器SDK在使用過(guò)程中的公共常見(jiàn)問(wèn)題及解決方案。
標(biāo)準(zhǔn)直播播放選擇RTMP還是HTTP-FLV
建議選擇HTTP-FLV,理由如下:
在阿里云點(diǎn)播控制臺(tái)生成地址時(shí),會(huì)同時(shí)生成RTMP與HTTP-FLV的地址,這兩個(gè)協(xié)議里包含的數(shù)據(jù)內(nèi)容是一致的,只是網(wǎng)絡(luò)協(xié)議通道不一樣。
HTTP協(xié)議是互聯(lián)網(wǎng)主要協(xié)議,CDN、運(yùn)營(yíng)商、中間網(wǎng)絡(luò)設(shè)備等鏈路中都對(duì)HTTP有很長(zhǎng)時(shí)間的網(wǎng)絡(luò)優(yōu)化,HTTP的默認(rèn)80/443端口號(hào)也是常見(jiàn)白名單端口,不容易被禁用,而RTMP協(xié)議比較老,其默認(rèn)端口號(hào)是1935有可能被防火墻等設(shè)備禁用,導(dǎo)致異常。因此在綜合網(wǎng)絡(luò)環(huán)境下,HTTP-FLV的穩(wěn)定性、性能(卡頓、延時(shí))會(huì)比RTMP更好。
播放失敗相關(guān)問(wèn)題
視頻點(diǎn)播的視頻無(wú)法播放,如何排查?
視頻播放失敗需要根據(jù)播放器的報(bào)錯(cuò)信息和網(wǎng)絡(luò)請(qǐng)求來(lái)定位問(wèn)題,流本身的編碼問(wèn)題、網(wǎng)絡(luò)終端或CDN問(wèn)題、格式問(wèn)題、Bucket問(wèn)題都可能導(dǎo)致播放失敗,以下為常見(jiàn)問(wèn)題解決措施:
欠費(fèi)問(wèn)題:請(qǐng)先檢查您的賬戶余額,如果賬戶欠費(fèi)則無(wú)法播放視頻。
網(wǎng)絡(luò)終端問(wèn)題:視頻無(wú)法播放并提示
4400
,錯(cuò)誤碼4400
指示由于服務(wù)器或網(wǎng)絡(luò)原因不能加載資源。請(qǐng)確認(rèn)是否配置了SSL證書(shū)、HTTPS證書(shū)是否過(guò)期或失效。格式問(wèn)題:視頻格式播放器不兼容,視頻點(diǎn)播支持的播放格式請(qǐng)參見(jiàn)播放器SDK功能詳情。
說(shuō)明帶鑒權(quán)播放m3u8格式的文件需要使用自有域名,綁定域名請(qǐng)參見(jiàn)添加加速域名。
Bucket問(wèn)題:設(shè)置的Bucket無(wú)效,或私有Bucket鑒權(quán)過(guò)期導(dǎo)致無(wú)法播放。關(guān)閉Bucket鑒權(quán),同時(shí)將Bucket設(shè)置為公共讀,即可正常播放。
跨域問(wèn)題:請(qǐng)先檢查您加速域名的地域與視頻播放地域是否一致,如果不一致將導(dǎo)致無(wú)法播放。如不一致,您可以創(chuàng)建新的加速域名或修改原加速域名地域。
視頻點(diǎn)播在站內(nèi)可以正常播放,站外無(wú)法分享播放
可以通過(guò)以下步驟排查:
查看這個(gè)視頻在點(diǎn)播是否還存在。
查看是否添加加速域名。
未添加加速域名:查看存儲(chǔ)Bucket的權(quán)限,存儲(chǔ)Bucket是不是私有的。如果是私有的就一定是攜帶鑒權(quán)的,關(guān)閉鑒權(quán),同時(shí)將Bucket設(shè)置為公共讀,就可以直接播放了(將Bucket設(shè)置公共讀,有安全風(fēng)險(xiǎn))。
已添加加速域名:查看是否有鑒權(quán),如果有鑒權(quán)的話,可以加大鑒權(quán)有效的時(shí)間,或者關(guān)閉鑒權(quán)(有安全風(fēng)險(xiǎn))。
上傳到視頻點(diǎn)播中的視頻,在其他端都能正常播放,但是在iOS端不能播放
可能原因:iOS端的Safari瀏覽器兼容性不夠,當(dāng)視頻壓縮比例太高,或視頻的編碼級(jí)別為high時(shí),都可能導(dǎo)致Safari瀏覽器無(wú)法解碼播放。
解決方法:建議對(duì)視頻進(jìn)行轉(zhuǎn)碼處理后再播放,詳細(xì)操作請(qǐng)參見(jiàn)音視頻轉(zhuǎn)碼。
視頻起播速度慢相關(guān)問(wèn)題
MP4格式的視頻起播速度慢時(shí),可能由于源視頻的moov(音視頻數(shù)據(jù)索引)在mdat(音視頻數(shù)據(jù))之后造成,您可以通過(guò)轉(zhuǎn)碼處理將視頻的moov移到mdat之前以加快播放解析。
視頻轉(zhuǎn)碼請(qǐng)參見(jiàn)轉(zhuǎn)碼推薦。
檢測(cè)視頻的moov位置,請(qǐng)參考如下命令:
# 源視頻地址可以是本地文件地址也可以是在線URL,例如:http://pla****.alicdn.com/video/aliyunmedia.mp4 ffmpeg -v trace -i "源視頻地址" 2>&1 | grep -e type:\'mdat\' -e type:\'moov\'
正常情況下,moov在mdat之前,如下圖所示。
異常情況下,moov在mdat之后,如下圖所示。
針對(duì)阿里云Android播放器SDK和iOS播放器SDK,視頻點(diǎn)播提供了毫秒級(jí)的起播方案,可以大大提升視頻的起播速度,具體操作,請(qǐng)參見(jiàn)使用阿里云播放器實(shí)現(xiàn)全屏秒播。
播放加密視頻相關(guān)問(wèn)題
視頻經(jīng)過(guò)DRM加密后,無(wú)法在瀏覽器上正常播放
使用Web播放器播放DRM加密后的視頻時(shí),對(duì)瀏覽器有限制,支持的瀏覽器請(qǐng)參見(jiàn)H5功能適配說(shuō)明。
播放HLS標(biāo)準(zhǔn)加密視頻時(shí),需要傳入的用戶令牌(MtsHlsUriToken)參數(shù)是什么?如何獲取?
MtsHlsUriToken參數(shù)是用戶自定義參數(shù),常規(guī)的HLS標(biāo)準(zhǔn)加密下,加密串寫到HLS流里后,會(huì)在m3u8索引文件中加入一個(gè)解密服務(wù)器的地址,當(dāng)有需求需要只允許部分用戶訪問(wèn)時(shí),這個(gè)解密地址就需要一個(gè)驗(yàn)證身份的功能,MtsHlsUriToken參數(shù)就是在您的解密服務(wù)器上加一層驗(yàn)證邏輯,然后根據(jù)這層驗(yàn)證邏輯生成一個(gè)特殊的參數(shù)加入解密驗(yàn)證。
您需要在配置加密時(shí),搭建令牌頒發(fā)服務(wù)生成MtsHlsUriToken,詳細(xì)內(nèi)容請(qǐng)參見(jiàn)HLS標(biāo)準(zhǔn)加密-步驟4。
播放跨域相關(guān)問(wèn)題
OSS為英國(guó)倫敦節(jié)點(diǎn),上傳至OSS的視頻在中國(guó)內(nèi)地打開(kāi)很慢
在中國(guó)內(nèi)地訪問(wèn)英國(guó)倫敦節(jié)點(diǎn)屬于跨區(qū)域訪問(wèn),建議添加加速域名后,使用全球加速。
視頻點(diǎn)播海外使用視頻訪問(wèn)慢、頻繁卡頓問(wèn)題如何解決?
在播放過(guò)程中,引起卡頓情況,一般來(lái)說(shuō)是由于網(wǎng)絡(luò)不穩(wěn)定。如果卡頓時(shí)間過(guò)長(zhǎng)引起播放器報(bào)錯(cuò),那么大概率和CDN動(dòng)蕩有關(guān)。如果經(jīng)常發(fā)生卡頓,則需要看一下網(wǎng)絡(luò)請(qǐng)求,可能是網(wǎng)速和該視頻的碼率不匹配,需要提高網(wǎng)速或者降低碼率。
OSS視頻播放相關(guān)問(wèn)題
播放存儲(chǔ)在OSS中的某些視頻時(shí),發(fā)出大量請(qǐng)求,應(yīng)該如何處理?
請(qǐng)確認(rèn)源視頻是否存在問(wèn)題(例如播放器在解碼源視頻時(shí),是否發(fā)出了大量的重復(fù)請(qǐng)求),建議使用視頻點(diǎn)播的轉(zhuǎn)碼模板對(duì)視頻進(jìn)行轉(zhuǎn)碼后播放,相關(guān)操作請(qǐng)參見(jiàn)音視頻轉(zhuǎn)碼。
上傳到視頻點(diǎn)播中的圖片資源,如何通過(guò)圖片鏈接訪問(wèn)時(shí),直接預(yù)覽,而非下載?
存儲(chǔ)在視頻點(diǎn)播中的圖片需要使用自有域名才能夠打開(kāi)預(yù)覽,使用默認(rèn)的域名進(jìn)行訪問(wèn)時(shí)會(huì)強(qiáng)制下載。您可以將自有域名添加到視頻點(diǎn)播中,相關(guān)操作請(qǐng)參見(jiàn)添加加速域名。
SSL證書(shū)相關(guān)問(wèn)題
視頻在部分電腦上無(wú)法正常播放,并報(bào)錯(cuò)誤碼4400
錯(cuò)誤碼4400
指示由于服務(wù)器或網(wǎng)絡(luò)原因不能加載資源,或者格式不支持。請(qǐng)確認(rèn)是否配置了SSL證書(shū)。
播放地址相關(guān)問(wèn)題
存儲(chǔ)在視頻點(diǎn)播中的視頻,如何生成短鏈接形式的視頻播放地址?
若存儲(chǔ)視頻的存儲(chǔ)地址權(quán)限為私有,其播放地址會(huì)攜帶一串鑒權(quán)信息,體現(xiàn)為長(zhǎng)鏈接形式;若存儲(chǔ)視頻的存儲(chǔ)地址權(quán)限為公共讀或公共讀寫,則對(duì)應(yīng)的播放地址不會(huì)攜帶后面一串鑒權(quán)信息,體現(xiàn)為短鏈接形式。存儲(chǔ)地址的權(quán)限說(shuō)明及修改請(qǐng)參見(jiàn)管理存儲(chǔ)Bucket。
存儲(chǔ)地址權(quán)限為公共讀或公共讀寫時(shí),存在被盜鏈、非法下載的風(fēng)險(xiǎn),不建議設(shè)置。
設(shè)置了轉(zhuǎn)碼格式為HLS之后,為何無(wú)法播放不轉(zhuǎn)碼的視頻?
使用阿里云播放器通過(guò)VID+Playauth方式只能播放轉(zhuǎn)碼后的視頻。不轉(zhuǎn)碼的視頻,只能通過(guò)URL方式播放,可通過(guò)GetMezzanineInfo - 獲取源文件信息接口獲取原視頻地址或登錄視頻點(diǎn)播控制臺(tái)查看視頻地址。
視頻點(diǎn)播中存儲(chǔ)的視頻,其播放地址是不固定的嗎?
當(dāng)存儲(chǔ)視頻的存儲(chǔ)地址權(quán)限為私有時(shí),其對(duì)應(yīng)的播放地址具有時(shí)效性,播放地址中auth_key
所攜帶的鑒權(quán)字符串會(huì)根據(jù)設(shè)置的過(guò)期時(shí)間有所差異。
如需獲取到固定不變的播放地址,則需修改存儲(chǔ)視頻的存儲(chǔ)地址的權(quán)限為公共讀或公共讀寫,對(duì)應(yīng)生成的播放地址,只取?
之前的內(nèi)容,則可以得到一個(gè)固定地址,可以一直使用這個(gè)地址進(jìn)行播放。存儲(chǔ)地址的權(quán)限說(shuō)明及修改請(qǐng)參見(jiàn)管理存儲(chǔ)Bucket。
存儲(chǔ)地址權(quán)限為公共讀或公共讀寫時(shí),存在被盜鏈、非法下載的風(fēng)險(xiǎn),不建議設(shè)置。
視頻上傳到視頻點(diǎn)播后,將播放地址發(fā)送到淘寶等平臺(tái)播放時(shí),為什么要跳轉(zhuǎn)到瀏覽器才能播放?
視頻的播放取決于瀏覽器和本地設(shè)備的解碼能力,所以通常都是要跳轉(zhuǎn)到瀏覽器播放。
視頻刷新上傳后,為什么播放視頻時(shí)并未出現(xiàn)新的視頻?
視頻更新后,您需要執(zhí)行刷新URL的操作獲取最新數(shù)據(jù)。通過(guò)視頻點(diǎn)播控制臺(tái)刷新,請(qǐng)參見(jiàn)刷新預(yù)熱。通過(guò)API或SDK刷新,請(qǐng)參見(jiàn)PreloadVodObjectCaches - 預(yù)熱緩存或RefreshMediaPlayUrls - 提交音視頻刷新或預(yù)熱任務(wù)。
播放器中如何獲取到視頻里每一幀的像素?
Android播放器:可通過(guò)監(jiān)聽(tīng)
OnRenderFrameCallback
回調(diào)獲取。iOS播放器:可通過(guò)監(jiān)聽(tīng)
onRenderingFrame
回調(diào)獲取。player.renderingDelegate = self; #pragma mark CicadaRenderingDelegate - (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{ if(frameInfo.frameType==Cicada_FrameType_Video){ // 視頻 NSLog(@"receive HW frame:%p pts:%ld foramt %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer)); } else if (frameInfo.frameType==Cicada_FrameType_Audio){ // 音頻 } return NO; }
Web播放器:暫不支持獲取。
上傳到視頻點(diǎn)播中的AVI格式視頻,為何無(wú)法通過(guò)API或SDK方式獲取到播放地址?
GetPlayInfo - 獲取音視頻播放地址接口暫不支持獲取AVI格式的視頻流,因此基于此接口實(shí)現(xiàn)獲取播放地址的SDK也無(wú)法獲取到AVI格式的視頻流。
您可以通過(guò)視頻點(diǎn)播控制臺(tái)查看AVI視頻的播放地址,詳細(xì)內(nèi)容請(qǐng)參見(jiàn)查詢音/視頻。
播放卡頓相關(guān)問(wèn)題
有哪些措施可以改善視頻播放卡頓,提升命中率?
可從如下方面提升命中率:配置URL鑒權(quán)、刷新預(yù)熱、緩存配置、過(guò)濾參數(shù)。
拖動(dòng)視頻的進(jìn)度條到視頻中間播放時(shí),播放卡頓
當(dāng)視頻本身的關(guān)鍵幀太少時(shí),導(dǎo)致拖動(dòng)時(shí)需要大量加載前后的關(guān)鍵幀才能計(jì)算出來(lái)對(duì)應(yīng)的畫面,也就出現(xiàn)了卡頓現(xiàn)象。這種情況下,建議對(duì)視頻進(jìn)行轉(zhuǎn)碼處理,可以達(dá)到增加關(guān)鍵幀的效果,從而緩解卡頓。轉(zhuǎn)碼操作請(qǐng)參見(jiàn)音視頻轉(zhuǎn)碼。
視頻封面相關(guān)問(wèn)題
視頻點(diǎn)播獲取視頻封面失敗
視頻點(diǎn)播控制臺(tái)默認(rèn)為HTTPS協(xié)議,只有支持HTTPS協(xié)議才可以直接預(yù)覽并且顯示截圖。也可以打開(kāi)瀏覽器開(kāi)發(fā)者工具查看具體報(bào)錯(cuò)。
視頻審核相關(guān)問(wèn)題
視頻點(diǎn)播人工審核無(wú)法播放視頻
視頻點(diǎn)播有兩種審核模式,審核模式如果設(shè)置為先審后發(fā),則需要審核完成后才能播放視頻。兩種審核模式區(qū)別如下:
先發(fā)后審:視頻轉(zhuǎn)碼成功后默認(rèn)標(biāo)記為正常狀態(tài),可直接播放,后續(xù)需要在視頻審核中進(jìn)行人工審核確認(rèn),通過(guò)屏蔽操作后視頻將不能播放。
先審后發(fā):視頻轉(zhuǎn)碼成功后默認(rèn)進(jìn)入審核流程,標(biāo)記為審核中狀態(tài),只有審核通過(guò)(人工審核通過(guò))后才可以播放。
參數(shù)解析問(wèn)題
videoID是什么?為什么需要videoID?如何獲取?
出于安全性考慮,用戶使用點(diǎn)播上傳媒體文件,將獲得該文件的視頻ID(videoID),而非URL地址。用戶也可以通過(guò)點(diǎn)播OpenAPI獲取,更多內(nèi)容,請(qǐng)參見(jiàn):獲取音視頻播放地址。
使用點(diǎn)播上傳完成之后,會(huì)獲取到一個(gè)videoID。
videoID也可以在阿里云點(diǎn)播控制臺(tái)獲取,操作流程如下所示:
在點(diǎn)播控制臺(tái)左側(cè)導(dǎo)航欄的媒資庫(kù)區(qū)域,單擊音/視頻。
在視頻列表內(nèi)獲取videoID(視頻ID)。
可以通過(guò)控制臺(tái)獲取的videoID來(lái)做下載和播放的測(cè)試。如何實(shí)現(xiàn)點(diǎn)播上傳見(jiàn):上傳SDK概述。
AccessKey Id和AccessKey Secret是什么?如何獲取?
阿里云AccessKey Id和AccessKey Secret是您訪問(wèn)阿里云API的唯一憑證。AccessKey Id是類似身份的標(biāo)識(shí),而AccessKey Secret的作用是簽名您的訪問(wèn)參數(shù),以防被篡改。AccessKey Secret類似您的登錄密碼,不要向任何人泄露。
獲取操作:
將鼠標(biāo)懸浮在上方菜單欄的用戶區(qū)域,在彈出的快捷菜單中單擊AccessKey管理。
在AccessKey管理頁(yè)面,創(chuàng)建AccessKey,或者查看已有AccessKey Id的AccessKey Secret。
playKey是什么?如何獲取?
playkey(apikey):播放密鑰,用于播放器SDK獲取視頻播放地址時(shí)驗(yàn)證身份,播放鑒權(quán)是視頻點(diǎn)播在阿里云AK安全認(rèn)證基礎(chǔ)上的二次鑒權(quán)機(jī)制,可有效防止盜鏈。根據(jù)用戶播放時(shí)可能使用的平臺(tái),默認(rèn)提供Flash、H5、iOS、Android四個(gè)平臺(tái)的播放密鑰。
為保證密鑰安全,查看播放密鑰時(shí)需要輸入手機(jī)號(hào)驗(yàn)證碼確認(rèn)身份。
獲取操作:
在點(diǎn)播控制臺(tái)左側(cè)導(dǎo)航欄的配置管理區(qū)域,選擇
。開(kāi)啟安全下載模式。在獲取密鑰中,填寫APP唯一標(biāo)識(shí)和離線解密私鑰。
單擊生成密鑰并下載。
playauth是什么?如何獲取?
目前播放器播放視頻分為三種模式,對(duì)應(yīng)三種不同的使用場(chǎng)景。使用playauth的方式最安全,建議使用setAuthInfo的播放模式來(lái)實(shí)現(xiàn)。
playauth可以理解為點(diǎn)播服務(wù)將所有的信息(videoID、AccessKey Id、AccessKey Secret)都進(jìn)行混合再做加密操作,用戶拿到的就是一串包含多個(gè)信息的數(shù)據(jù),播放器就可以播放。
播放模式 | 適用場(chǎng)景 | 優(yōu)劣 | 是否建議使用 |
setDataSource | 適用于測(cè)試 | 有泄露風(fēng)險(xiǎn),需要將自己的AccessKey Id和AccessKey Secret直接寫入客戶端代碼中,客戶端如果被破解將有泄露風(fēng)險(xiǎn)。 | 不建議商用時(shí)上線使用 |
setAuthInfo | 適用于正式商用 | 安全,所有的視頻地址和鏈接都不暴露。 | 建議商用使用 |
播放本地和網(wǎng)絡(luò)URL | 可以播放本地視頻且能夠播放視頻URL | 簡(jiǎn)單,可以播放其他平臺(tái)的視頻。 | 在有播放本地視頻需求和播放網(wǎng)絡(luò)視頻需求時(shí)使用 |
流程:
。獲取播放憑證:用戶在服務(wù)器側(cè)通過(guò)調(diào)用播放鑒權(quán)SDK(Server端的SDK),向視頻點(diǎn)播服務(wù)獲取播放憑證。
完成視頻播放:播放器SDK根據(jù)視頻ID和播放憑證向視頻點(diǎn)播服務(wù)獲取視頻的播放地址,從而加載視頻流并解碼完成播放。
播放憑證時(shí)效為100秒,只能用于獲取指定視頻的播放地址,不能混用或重復(fù)使用。如果憑證過(guò)期則無(wú)法獲取播放地址,請(qǐng)重新獲取憑證。
播放器SDK根據(jù)播放憑證會(huì)自動(dòng)獲取播放地址進(jìn)行解碼播放,播放地址的時(shí)效為30分鐘,若播放憑證失效請(qǐng)重新獲取播放憑證,并回傳給播放器SDK用于刷新播放地址。
為保障主賬號(hào)安全,建議使用子賬號(hào)的AccessKey,尤其在Web播放場(chǎng)景下。