本文為您介紹使用阿里云播放器SDK過程中可能遇到的各端播放器具有的共性常見問題及解決方案。
標準直播播放選擇RTMP還是HTTP-FLV
建議選擇HTTP-FLV,理由如下:
在阿里云視頻直播控制臺生成地址時,會同時生成RTMP與HTTP-FLV的地址,這兩個協議里包含的數據內容是一致的,只是網絡協議通道不一樣。
HTTP協議是互聯網主要協議,CDN、運營商、中間網絡設備等鏈路中都對HTTP有很長時間的網絡優化,HTTP的默認80/443端口號也是常見白名單端口,不容易被禁用,而RTMP協議比較老,其默認端口號是1935有可能被防火墻等設備禁用,導致異常。因此在綜合網絡環境下,HTTP-FLV的穩定性、性能(卡頓、延時)會比RTMP更好。
播放失敗相關問題
視頻點播的視頻無法播放,如何排查?
視頻播放失敗需要根據播放器的報錯信息和網絡請求來定位問題,流本身的編碼問題、網絡終端或CDN問題、格式問題、Bucket問題都可能導致播放失敗,以下為常見問題解決措施:
欠費問題:請先檢查您的賬戶余額,如果賬戶欠費則無法播放視頻。
網絡終端問題:視頻無法播放并提示
4400
,錯誤碼4400
指示由于服務器或網絡原因不能加載資源。請確認是否配置了SSL證書、HTTPS證書是否過期或失效。格式問題:視頻格式播放器不兼容,視頻點播支持的播放格式請參見播放器SDK功能詳情。
說明帶鑒權播放m3u8格式的文件需要使用自有域名,綁定域名請參見添加加速域名。
Bucket問題:設置的Bucket無效,或私有Bucket鑒權過期導致無法播放。關閉Bucket鑒權,同時將Bucket設置為公共讀,即可正常播放。
跨域問題:請先檢查您加速域名的地域與視頻播放地域是否一致,如果不一致將導致無法播放。如不一致,您可以創建新的加速域名或修改原加速域名地域。
視頻點播在站內可以正常播放,站外無法分享播放
可以通過以下步驟排查:
查看這個視頻在點播是否還存在。
查看是否添加加速域名。
未添加加速域名:查看存儲Bucket的權限,存儲Bucket是不是私有的。如果是私有的就一定是攜帶鑒權的,關閉鑒權,同時將Bucket設置為公共讀,就可以直接播放了(將Bucket設置公共讀,有安全風險)。
已添加加速域名:查看是否有鑒權,如果有鑒權的話,可以加大鑒權有效的時間,或者關閉鑒權(有安全風險)。
上傳到視頻點播中的視頻,在其他端都能正常播放,但是在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,視頻點播提供了毫秒級的起播方案,可以大大提升視頻的起播速度,具體操作,請參見使用阿里云播放器實現全屏秒播。
播放加密視頻相關問題
視頻經過DRM加密后,無法在瀏覽器上正常播放
使用Web播放器播放DRM加密后的視頻時,對瀏覽器有限制,支持的瀏覽器請參見H5功能適配說明。
播放HLS標準加密視頻時,需要傳入的用戶令牌(MtsHlsUriToken)參數是什么?如何獲取?
MtsHlsUriToken參數是用戶自定義參數,常規的HLS標準加密下,加密串寫到HLS流里后,會在m3u8索引文件中加入一個解密服務器的地址,當有需求需要只允許部分用戶訪問時,這個解密地址就需要一個驗證身份的功能,MtsHlsUriToken參數就是在您的解密服務器上加一層驗證邏輯,然后根據這層驗證邏輯生成一個特殊的參數加入解密驗證。
您需要在配置加密時,搭建令牌頒發服務生成MtsHlsUriToken,詳細內容請參見HLS標準加密-步驟4。
播放跨域相關問題
OSS為英國倫敦節點,上傳至OSS的視頻在中國內地打開很慢
在中國內地訪問英國倫敦節點屬于跨區域訪問,建議添加加速域名后,使用全球加速。
視頻點播海外使用視頻訪問慢、頻繁卡頓問題如何解決?
在播放過程中,引起卡頓情況,一般來說是由于網絡不穩定。如果卡頓時間過長引起播放器報錯,那么大概率和CDN動蕩有關。如果經常發生卡頓,則需要看一下網絡請求,可能是網速和該視頻的碼率不匹配,需要提高網速或者降低碼率。
OSS視頻播放相關問題
播放存儲在OSS中的某些視頻時,發出大量請求,應該如何處理?
請確認源視頻是否存在問題(例如播放器在解碼源視頻時,是否發出了大量的重復請求),建議使用視頻點播的轉碼模板對視頻進行轉碼后播放,相關操作請參見音視頻轉碼。
上傳到視頻點播中的圖片資源,如何通過圖片鏈接訪問時,直接預覽,而非下載?
存儲在視頻點播中的圖片需要使用自有域名才能夠打開預覽,使用默認的域名進行訪問時會強制下載。您可以將自有域名添加到視頻點播中,相關操作請參見添加加速域名。
SSL證書相關問題
視頻在部分電腦上無法正常播放,并報錯誤碼4400
錯誤碼4400
指示由于服務器或網絡原因不能加載資源,或者格式不支持。請確認是否配置了SSL證書。
播放地址相關問題
存儲在視頻點播中的視頻,如何生成短鏈接形式的視頻播放地址?
若存儲視頻的存儲地址權限為私有,其播放地址會攜帶一串鑒權信息,體現為長鏈接形式;若存儲視頻的存儲地址權限為公共讀或公共讀寫,則對應的播放地址不會攜帶后面一串鑒權信息,體現為短鏈接形式。存儲地址的權限說明及修改請參見管理存儲Bucket。
存儲地址權限為公共讀或公共讀寫時,存在被盜鏈、非法下載的風險,不建議設置。
設置了轉碼格式為HLS之后,為何無法播放不轉碼的視頻?
使用阿里云播放器通過VID+Playauth方式只能播放轉碼后的視頻。不轉碼的視頻,只能通過URL方式播放,可通過GetMezzanineInfo - 獲取源文件信息接口獲取原視頻地址或登錄視頻點播控制臺查看視頻地址。
視頻點播中存儲的視頻,其播放地址是不固定的嗎?
當存儲視頻的存儲地址權限為私有時,其對應的播放地址具有時效性,播放地址中auth_key
所攜帶的鑒權字符串會根據設置的過期時間有所差異。
如需獲取到固定不變的播放地址,則需修改存儲視頻的存儲地址的權限為公共讀或公共讀寫,對應生成的播放地址,只取?
之前的內容,則可以得到一個固定地址,可以一直使用這個地址進行播放。存儲地址的權限說明及修改請參見管理存儲Bucket。
存儲地址權限為公共讀或公共讀寫時,存在被盜鏈、非法下載的風險,不建議設置。
視頻上傳到視頻點播后,將播放地址發送到淘寶等平臺播放時,為什么要跳轉到瀏覽器才能播放?
視頻的播放取決于瀏覽器和本地設備的解碼能力,所以通常都是要跳轉到瀏覽器播放。
視頻刷新上傳后,為什么播放視頻時并未出現新的視頻?
視頻更新后,您需要執行刷新URL的操作獲取最新數據。通過視頻點播控制臺刷新,請參見刷新預熱。通過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播放器:暫不支持獲取。
上傳到視頻點播中的AVI格式視頻,為何無法通過API或SDK方式獲取到播放地址?
GetPlayInfo - 獲取音視頻播放地址接口暫不支持獲取AVI格式的視頻流,因此基于此接口實現獲取播放地址的SDK也無法獲取到AVI格式的視頻流。
您可以通過視頻點播控制臺查看AVI視頻的播放地址,詳細內容請參見查詢音/視頻。
播放卡頓相關問題
有哪些措施可以改善視頻播放卡頓,提升命中率?
可從如下方面提升命中率:配置URL鑒權、刷新預熱、緩存配置、過濾參數。
拖動視頻的進度條到視頻中間播放時,播放卡頓
當視頻本身的關鍵幀太少時,導致拖動時需要大量加載前后的關鍵幀才能計算出來對應的畫面,也就出現了卡頓現象。這種情況下,建議對視頻進行轉碼處理,可以達到增加關鍵幀的效果,從而緩解卡頓。轉碼操作請參見音視頻轉碼。
視頻封面相關問題
視頻點播獲取視頻封面失敗
視頻點播控制臺默認為HTTPS協議,只有支持HTTPS協議才可以直接預覽并且顯示截圖。也可以打開瀏覽器開發者工具查看具體報錯。
視頻審核相關問題
視頻點播人工審核無法播放視頻
視頻點播有兩種審核模式,審核模式如果設置為先審后發,則需要審核完成后才能播放視頻。兩種審核模式區別如下:
先發后審:視頻轉碼成功后默認標記為正常狀態,可直接播放,后續需要在視頻審核中進行人工審核確認,通過屏蔽操作后視頻將不能播放。
先審后發:視頻轉碼成功后默認進入審核流程,標記為審核中狀態,只有審核通過(人工審核通過)后才可以播放。
參數解析問題
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獲取視頻播放地址時驗證身份,播放鑒權是視頻點播在阿里云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),向視頻點播服務獲取播放憑證。
完成視頻播放:播放器SDK根據視頻ID和播放憑證向視頻點播服務獲取視頻的播放地址,從而加載視頻流并解碼完成播放。
播放憑證時效為100秒,只能用于獲取指定視頻的播放地址,不能混用或重復使用。如果憑證過期則無法獲取播放地址,請重新獲取憑證。
播放器SDK根據播放憑證會自動獲取播放地址進行解碼播放,播放地址的時效為30分鐘,若播放憑證失效請重新獲取播放憑證,并回傳給播放器SDK用于刷新播放地址。
為保障主賬號安全,建議使用子賬號的AccessKey,尤其在Web播放場景下。