本文介紹阿里雲播放器SDK在使用過程中的公用常見問題及解決方案。
標準直播播放選擇RTMP還是HTTP-FLV
建議選擇HTTP-FLV,理由如下:
在阿里雲點播控制台產生地址時,會同時產生RTMP與HTTP-FLV的地址,這兩個協議裡包含的資料內容是一致的,只是網路通訊協定通道不一樣。
HTTP協議是互連網主要協議,CDN、電訊廠商、中間網路裝置等鏈路中都對HTTP有很長時間的網路最佳化,HTTP的預設80/443連接埠號碼也是常見白名單連接埠,不容易被禁用,而RTMP協議比較老,其預設連接埠號碼是1935有可能被防火牆等裝置禁用,導致異常。因此在綜合網路環境下,HTTP-FLV的穩定性、效能(卡頓、延時)會比RTMP更好。
播放失敗相關問題
ApsaraVideo for VOD的視頻無法播放,如何排查?
視頻播放失敗需要根據播放器的報錯資訊和網路請求來定位問題,流本身的編碼問題、網路終端或CDN問題、格式問題、Bucket問題都可能導致播放失敗,以下為常見問題解決措施:
欠費問題:請先檢查您的賬戶餘額,如果賬戶欠費則無法播放視頻。
網路終端問題:視頻無法播放並提示
4400
,錯誤碼4400
指示由於伺服器或網路原因不能載入資源。請確認是否配置了SSL認證、HTTPS認證是否到期或失效。格式問題:視頻格式播放器不相容,ApsaraVideo for VOD支援的播放格式請參見播放器SDK功能詳情。
說明帶鑒權播放m3u8格式的檔案需要使用自有網域名稱,綁定網域名稱請參見添加加速網域名稱。
Bucket問題:設定的Bucket無效,或私人Bucket鑒權到期導致無法播放。關閉Bucket鑒權,同時將Bucket設定為公用讀取,即可正常播放。
跨域問題:請先檢查您加速網域名稱的地區與視頻播放地區是否一致,如果不一致將導致無法播放。如不一致,您可以建立新的加速網域名稱或修改原加速網域名稱地區。
ApsaraVideo for VOD在站內可以正常播放,站外無法分享播放
可以通過以下步驟排查:
查看這個視頻在點播是否還存在。
查看是否添加加速網域名稱。
未添加加速網域名稱:查看儲存Bucket的許可權,儲存Bucket是不是私人的。如果是私人的就一定是攜帶鑒權的,關閉鑒權,同時將Bucket設定為公用讀取,就可以直接播放了(將Bucket設定公用讀取,有安全風險)。
已添加加速網域名稱:查看是否有鑒權,如果有鑒權的話,可以加大鑒權有效時間,或者關閉鑒權(有安全風險)。
上傳到ApsaraVideo for VOD中的視頻,在其他端都能正常播放,但是在iOS端不能播放
可能原因:iOS端的Safari瀏覽器安全色性不夠,當視頻壓縮比例太高,或視頻的編碼層級為high時,都可能導致Safari瀏覽器無法解碼播放。
解決方案:建議對視頻進行轉碼處理後再播放,詳細操作請參見音視頻轉碼。
視頻起播速度慢相關問題
MP4格式的視頻起播速度慢時,可能由於源視頻的moov(音視頻資料索引)在mdat(音視頻資料)之後造成,您可以通過轉碼處理將視頻的moov移到mdat之前以加快播放解析。
視頻轉碼請參見轉碼推薦。
檢測視頻的moov位置,請參考如下命令:
# 源視頻地址可以是本地檔案地址也可以是線上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之後,如下圖所示。
針對阿里雲Android播放器SDK和iOS播放器SDK,ApsaraVideo for VOD提供了毫秒級的起播方案,可以大大提升視頻的起播速度,具體操作,請參見使用阿里雲播放器實現全屏秒播。
播放加密視頻相關問題
視頻經過DRM加密後,無法在瀏覽器上正常播放
使用Web播放器播放DRM加密後的視頻時,對瀏覽器有限制,支援的瀏覽器請參見H5功能適配說明。
播放HLS標準加密視頻時,需要傳入的使用者令牌(MtsHlsUriToken)參數是什嗎?如何擷取?
MtsHlsUriToken參數是使用者自訂參數,常規的HLS標準加密下,加密串寫到HLS流裡後,會在m3u8索引檔案中加入一個解密伺服器的地址,當有需求需要只允許部分使用者訪問時,這個解密地址就需要一個驗證身份的功能,MtsHlsUriToken參數就是在您的解密伺服器上加一層驗證邏輯,然後根據這層驗證邏輯產生一個特殊的參數加入解密驗證。
您需要在配置加密時,搭建令牌頒發服務產生MtsHlsUriToken,詳細內容請參見HLS標準加密-步驟4。
播放跨域相關問題
OSS為英國倫敦節點,上傳至OSS的視頻在中國內地開啟很慢
在中國內地訪問英國倫敦節點屬於跨地區訪問,建議添加加速網域名稱後,使用Global Acceleration。
ApsaraVideo for VOD海外使用視頻訪問慢、頻繁卡頓問題如何解決?
在播放過程中,引起卡頓情況,一般來說是由於網路不穩定。如果卡頓時間過長引起播放器報錯,那麼大機率和CDN動蕩有關。如果經常發生卡頓,則需要看一下網路請求,可能是網速和該視頻的碼率不匹配,需要提高網速或者降低碼率。
OSS視頻播放相關問題
播放儲存在OSS中的某些視頻時,發出大量請求,應該如何處理?
請確認源視頻是否存在問題(例如播放器在解碼源視頻時,是否發出了大量的重複請求),建議使用ApsaraVideo for VOD的轉碼模板對視頻進行轉碼後播放,相關操作請參見音視頻轉碼。
上傳到ApsaraVideo for VOD中的圖片資源,如何通過圖片連結訪問時,直接預覽,而非下載?
儲存在ApsaraVideo for VOD中的圖片需要使用自有網域名稱才能夠開啟預覽,使用預設的網域名稱進行訪問時會強制下載。您可以將自有網域名稱添加到ApsaraVideo for VOD中,相關操作請參見添加加速網域名稱。
SSL認證相關問題
視頻在部分電腦上無法正常播放,並報錯誤碼4400
錯誤碼4400
指示由於伺服器或網路原因不能載入資源,或者格式不支援。請確認是否配置了SSL認證。
播放地址相關問題
儲存在ApsaraVideo for VOD中的視頻,如何產生短連結形式的視頻播放地址?
若儲存視頻的儲存地址許可權為私人,其播放地址會攜帶一串鑒權資訊,體現為長連結形式;若儲存視頻的儲存地址許可權為公用讀取或公用讀寫,則對應的播放地址不會攜帶後面一串鑒權資訊,體現為短連結形式。儲存地址的許可權說明及修改請參見管理儲存Bucket。
儲存地址許可權為公用讀取或公用讀寫時,存在被盜鏈、非法下載的風險,不建議設定。
設定了轉碼格式為HLS之後,為何無法播放不轉碼的視頻?
使用阿里雲播放器通過VID+Playauth方式只能播放轉碼後的視頻。不轉碼的視頻,只能通過URL方式播放,可通過GetMezzanineInfo - 擷取源檔案資訊介面擷取原視頻地址或登入ApsaraVideo for VOD控制台查看視頻地址。
ApsaraVideo for VOD中儲存的視頻,其播放地址是不固定的嗎?
當儲存視頻的儲存地址許可權為私人時,其對應的播放地址具有時效性,播放地址中auth_key
所攜帶的鑒權字串會根據設定的到期時間有所差異。
如需擷取到固定不變的播放地址,則需修改儲存視頻的儲存地址的許可權為公用讀取或公用讀寫,對應產生的播放地址,只取?
之前的內容,則可以得到一個固定地址,可以一直使用這個地址進行播放。儲存地址的許可權說明及修改請參見管理儲存Bucket。
儲存地址許可權為公用讀取或公用讀寫時,存在被盜鏈、非法下載的風險,不建議設定。
視頻上傳到ApsaraVideo for VOD後,將播放地址發送到淘寶等平台播放時,為什麼要跳轉到瀏覽器才能播放?
視頻的播放取決於瀏覽器和本地裝置的解碼能力,所以通常都是要跳轉到瀏覽器播放。
視頻重新整理上傳後,為什麼播放視頻時並未出現新的視頻?
視頻更新後,您需要執行重新整理URL的操作擷取最新資料。通過ApsaraVideo for VOD控制台重新整理,請參見重新整理預熱。通過API或SDK重新整理,請參見PreloadVodObjectCaches - 預熱緩衝或RefreshMediaPlayUrls - 提交音視頻重新整理或預熱任務。
播放器中如何擷取到視頻裡每一幀的像素?
Android播放器:可通過監聽
OnRenderFrameCallback
回調擷取。iOS播放器:可通過監聽
onRenderingFrame
回調擷取。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播放器:暫不支援擷取。
上傳到ApsaraVideo for VOD中的AVI格式視頻,為何無法通過API或SDK方式擷取到播放地址?
GetPlayInfo - 擷取音視頻播放地址介面暫不支援擷取AVI格式的視頻流,因此基於此介面實現擷取播放地址的SDK也無法擷取到AVI格式的視頻流。
您可以通過ApsaraVideo for VOD控制台查看AVI視頻的播放地址,詳細內容請參見查詢音/視頻。
播放卡頓相關問題
有哪些措施可以改善視頻播放卡頓,提升命中率?
可從如下方面提升命中率:配置URL鑒權、重新整理預熱、緩衝配置、過濾參數。
拖動視頻的進度條到視頻中間播放時,播放卡頓
當視頻本身的主要畫面格太少時,導致拖動時需要大量載入前後的主要畫面格才能計算出來對應的畫面,也就出現了卡頓現象。這種情況下,建議對視頻進行轉碼處理,可以達到增加主要畫面格的效果,從而緩解卡頓。轉碼操作請參見音視頻轉碼。
視頻封面相關問題
ApsaraVideo for VOD擷取視頻封面失敗
ApsaraVideo for VOD控制台預設為HTTPS協議,只有支援HTTPS協議才可以直接預覽並且顯示截圖。也可以開啟瀏覽器開發人員工具查看具體報錯。
視頻審核相關問題
ApsaraVideo for VOD人工審核無法播放視頻
ApsaraVideo for VOD有兩種稽核模式,稽核模式如果設定為先審後發,則需要審核完成後才能播放視頻。兩種稽核模式區別如下:
先發後審:視頻轉碼成功後預設標記為正常狀態,可直接播放,後續需要在視頻審核中進行人工審核確認,通過屏蔽操作後視頻將不能播放。
先審後發:視頻轉碼成功後預設進入審核流程,標記為審核中狀態,只有審核通過(人工審核通過)後才可以播放。
參數解析問題
videoID是什嗎?為什麼需要videoID?如何擷取?
出於安全性考慮,使用者使用點播上傳媒體檔案,將獲得該檔案的視頻ID(videoID),而非URL地址。使用者也可以通過點播OpenAPI擷取,更多內容,請參見:擷取音視頻播放地址。
使用點播上傳完成之後,會擷取到一個videoID。
videoID也可以在阿里雲點播控制台擷取,操作流程如下所示:
在點播控制台左側導覽列的媒資庫地區,單擊音/視頻。
在視頻列表內擷取videoID(視頻ID)。
可以通過控制台擷取的videoID來做下載和播放的測試。如何?點播上傳見:上傳SDK概述。
AccessKey Id和AccessKey Secret是什嗎?如何擷取?
阿里雲AccessKey Id和AccessKey Secret是您訪問阿里雲API的唯一憑證。AccessKey Id是類似身份的標識,而AccessKey Secret的作用是簽名您的訪問參數,以防被篡改。AccessKey Secret類似您的登入密碼,不要向任何人泄露。
擷取操作:
將滑鼠懸浮在上方功能表列的使用者地區,在彈出的捷徑功能表中單擊AccessKey管理。
在AccessKey管理頁面,建立AccessKey,或者查看已有AccessKey Id的AccessKey Secret。
playKey是什嗎?如何擷取?
playkey(apikey):播放密鑰,用於播放器SDK擷取視頻播放地址時驗證身份,播放鑒權是ApsaraVideo for VOD在阿里雲AK安全認證基礎上的二次鑒權機制,可有效防止盜鏈。根據使用者播放時可能使用的平台,預設提供Flash、H5、iOS、Android四個平台的播放密鑰。
為保證密鑰安全,查看播放密鑰時需要輸入手機號驗證碼確認身份。
擷取操作:
在點播控制台左側導覽列的組態管理地區,選擇
。開啟安全下載模式。在擷取密鑰中,填寫APP唯一標識和離線解密私密金鑰。
單擊產生密鑰並下載。
playauth是什嗎?如何擷取?
目前播放器播放視頻分為三種模式,對應三種不同的使用情境。使用playauth的方式最安全,建議使用setAuthInfo的播放模式來實現。
playauth可以理解為點播服務將所有的資訊(videoID、AccessKey Id、AccessKey Secret)都進行混合再做加密操作,使用者拿到的就是一串包含多個資訊的資料,播放器就可以播放。
播放模式 | 適用情境 | 優劣 | 是否建議使用 |
setDataSource | 適用於測試 | 有泄露風險,需要將自己的AccessKey Id和AccessKey Secret直接寫入用戶端代碼中,用戶端如果被破解將有泄露風險。 | 不建議商用時上線使用 |
setAuthInfo | 適用於正式商用 | 安全,所有的視頻地址和連結都不暴露。 | 建議商用使用 |
播放本地和網路URL | 可以播放本地視頻且能夠播放視頻URL | 簡單,可以播放其他平台的視頻。 | 在有播放本地視頻需求和播放網路視頻需求時使用 |
流程:
。擷取播放憑證:使用者在伺服器側通過調用播放鑒權SDK(Server端的SDK),向ApsaraVideo for VOD服務擷取播放憑證。
完成視頻播放:播放器SDK根據視頻ID和播放憑證向ApsaraVideo for VOD服務擷取視頻的播放地址,從而載入視頻流並解碼完成播放。
播放憑證時效為100秒,只能用於擷取指定視頻的播放地址,不能混用或重複使用。如果憑證到期則無法擷取播放地址,請重新擷取憑證。
播放器SDK根據播放憑證會自動擷取播放地址進行解碼播放,播放地址的時效為30分鐘,若播放憑證失效請重新擷取播放憑證,並回傳給播放器SDK用於重新整理播放地址。
為保障主帳號安全,建議使用子帳號的AccessKey,尤其在Web播放情境下。