本文為您介紹使用阿里雲播放器SDK過程中可能遇到的各端播放器具有的共性常見問題及解決方案。
標準直播播放選擇RTMP還是HTTP-FLV
建議選擇HTTP-FLV,理由如下:
在阿里雲ApsaraVideo for Live控制台產生地址時,會同時產生RTMP與HTTP-FLV的地址,這兩個協議裡包含的資料內容是一致的,只是網路通訊協定通道不一樣。
HTTP協議是互連網主要協議,CDN、電訊廠商、中間網路裝置等鏈路中都對HTTP有很長時間的網路最佳化,HTTP的預設80/443連接埠號碼也是常見白名單連接埠,不容易被禁用,而RTMP協議比較老,其預設連接埠號碼是1935有可能被防火牆等裝置禁用,導致異常。因此在綜合網路環境下,HTTP-FLV的穩定性、效能(卡頓、延時)會比RTMP更好。
播放器 SDK 有哪些常用 API 使用注意事項
iOS 端擷取播放位置:應使用
onCurrentPositionUpdate回調的position參數。seek 後需監聽AVPEventSeekEnd事件再擷取位置。getPlayTime() 傳回值:返回整數秒數,統計真實播放時間長度(不含暫停和拖拽時間),倍速播放按物理時間計算。
切換清晰度異常:若
selectTrack異常,可臨時使用setQuality+setStartTime+prepare替代。replayByVidAndPlayAuth 切換視訊:需顯式傳入
swScriptURL(HTTPS 絕對位址)以支援 iOS 低版本私人加密。設定起播時間:不影響使用者手動拖拽進度條。
緩衝區清理:目前不支援運行時動態清理緩衝區的 API。
播放失敗相關問題
ApsaraVideo for VOD的視頻無法播放,如何排查
視頻播放失敗需要根據播放器的報錯資訊和網路請求來定位問題,流本身的編碼問題、網路終端或CDN問題、格式問題、Bucket問題都可能導致播放失敗,以下為常見問題解決措施:
欠費問題:請先檢查您的賬戶餘額,如果賬戶欠費則無法播放視頻。
網路終端問題:視頻無法播放並提示
4400,錯誤碼4400指示由於伺服器或網路原因不能載入資源。請確認是否配置了SSL認證、HTTPS認證是否到期或失效。格式問題:視頻格式播放器不相容,ApsaraVideo for VOD支援的播放格式請參見播放器SDK功能詳情。
說明帶鑒權播放m3u8格式的檔案需要使用自有網域名稱,綁定網域名稱請參見添加加速網域名稱。
Bucket問題:設定的Bucket無效,或私人Bucket鑒權到期導致無法播放。關閉Bucket鑒權,同時將Bucket設定為公用讀取,即可正常播放。
跨域問題:請先檢查您加速網域名稱的地區與視頻播放地區是否一致,如果不一致將導致無法播放。如不一致,您可以建立新的加速網域名稱或修改原加速網域名稱地區。
調用GetPlayInfo報錯提示視頻狀態非法或審核中
視頻必須同時滿足主狀態(Status)為 Normal 且審核狀態(AuditStatus)為 Normal,才能成功擷取播放資訊。若視頻狀態為 UploadSucc(上傳成功但轉碼未完成)或 AuditStatus 為 Init(審核中),需要等待轉碼完成及審核通過後再擷取播放資訊。建議通過 GetVideoInfo 介面查詢視頻最新狀態,並檢查全域審核設定是否影響審核進度。
在先審後發模式下,人工審核通過僅表示內容審核完成,並不代表視頻已可播放;視頻仍需等待轉碼完成、主狀態(Status)變為 Normal 後才能擷取播放地址。若審核已通過而視頻長時間停留在 UploadSucc 狀態,說明轉碼未觸發或未完成,請檢查是否已配置並設定預設轉碼模板組,或在控制台手動發起轉碼。
播放本地M3U8格式視頻報錯
對於m3u8檔案,它包含多個ts分區,這些分區必須在本地存在,並且m3u8檔案中的路徑需準確指向這些ts檔案的位置,否則將無法載入。如果您的分區以連結形式存在,同樣不支援播放。
M3U8 索引檔案與其對應的 .ts 分區檔案(如 000000.ts、000001.ts 等)需放置在同一目錄下。
本地M3U8檔案需保持上述目錄結構格式。
ApsaraVideo for VOD在站內可以正常播放,站外無法分享播放
可以通過以下步驟排查:
查看這個視頻在點播是否還存在。
查看是否添加加速網域名稱。
未添加加速網域名稱:查看儲存Bucket的許可權,儲存Bucket是不是私人的。如果是私人的就一定是攜帶鑒權的,關閉鑒權,同時將Bucket設定為公用讀取,就可以直接播放了(將Bucket設定公用讀取,有安全風險)。
已添加加速網域名稱:查看是否有鑒權,如果有鑒權的話,可以加大鑒權有效時間,或者關閉鑒權(有安全風險)。
播放異常相關問題
使用播放器播放視頻時出現無聲音現象
阿里雲音視頻播放器主要針對阿里雲相關產品進行最佳化。如果您使用其他播放源地址,可能會導致播放時無聲的現象。如遇無聲問題,請首先檢查您播放器所採用的播放源。
Web 播放器樣式與組件異常如何處理
表徵圖缺失:本地部署時若表徵圖缺失,需完整下載
/skins/default/目錄,或修改 CSS 中表徵圖路徑的相對路徑為 CDN 地址。QualityComponent 切換清晰度報錯:出現
t.getQuality is not a function時,需在配置中添加args回呼函數,並升級aliplayercomponents至 1.1.2+。封面圖覆蓋進度條:vid + playAuth 模式下封面圖覆蓋進度條,可通過 CSS 隱藏
.prism-cover或啟用autoplay+muted繞過。微信內建瀏覽器安全色性:微信內建瀏覽器 HLS 相容性問題,配置
useHlsNative: false強制使用 fMP4 方案。
視頻起播速度慢相關問題
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 之前(即已完成 faststart 最佳化),樣本輸出如下。
異常情況下,moov在mdat之後。
針對阿里雲Android播放器SDK和iOS播放器SDK,ApsaraVideo for VOD提供了毫秒級的起播方案,可以大大提升視頻的起播速度,具體操作,請參見使用阿里雲播放器實現全屏秒播。
播放加密視頻相關問題
視頻經過DRM加密後,無法在瀏覽器上正常播放
使用Web播放器播放DRM加密後的視頻時,對瀏覽器有限制,支援的瀏覽器請參見功能適配說明。
播放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方式播放,可通過擷取源檔案資訊介面擷取原視頻地址或登入ApsaraVideo for VOD控制台查看視頻地址。
ApsaraVideo for VOD中儲存的視頻,其播放地址是不固定的嗎?
當儲存視頻的儲存地址許可權為私人時,其對應的播放地址具有時效性,播放地址中auth_key所攜帶的鑒權字串會根據設定的到期時間有所差異。
如需擷取到固定不變的播放地址,則需修改儲存視頻的儲存地址的許可權為公用讀取或公用讀寫,對應產生的播放地址,只取?之前的內容,則可以得到一個固定地址,可以一直使用這個地址進行播放。儲存地址的許可權說明及修改請參見管理儲存Bucket。
儲存地址許可權為公用讀取或公用讀寫時,存在被盜鏈、非法下載的風險,不建議設定。
視頻上傳到ApsaraVideo for VOD後,將播放地址發送到淘寶等平台播放時,為什麼要跳轉到瀏覽器才能播放?
視頻的播放取決於瀏覽器和本地裝置的解碼能力,所以通常都是要跳轉到瀏覽器播放。
視頻重新整理上傳後,為什麼播放視頻時並未出現新的視頻?
視頻更新後,您需要執行重新整理URL的操作擷取最新資料。通過ApsaraVideo for VOD控制台重新整理,請參見重新整理預熱。通過API或SDK重新整理,請參見預熱緩衝或提交音視頻重新整理或預熱任務。
播放器中如何擷取到視頻裡每一幀的像素?
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方式擷取到播放地址?
擷取音視頻播放地址介面暫不支援擷取AVI格式的視頻流,因此基於此介面實現擷取播放地址的SDK也無法擷取到AVI格式的視頻流。
您可以通過ApsaraVideo for VOD控制台查看AVI視頻的播放地址,詳細內容請參見查詢音/視頻。
GetPlayInfo介面擷取視頻播放地址報錯The video has no stream to play for the request parameter
可以通過以下步驟排查:
確認媒資儲存類型是否為標準儲存。
GetPlayInfo介面預設僅返回標準儲存媒資的播放流。如需擷取非標準儲存音視頻播放流,可設定介面參數
PlayConfig的StorageClass為All。StorageClass的其他可選取值包括Standard(標準)、IA(媒資低頻)、Archive(媒資歸檔)、ColdArchive(媒資冷歸檔)、SourceIA(源檔案低頻)、SourceArchive(源檔案歸檔)、SourceColdArchive(源檔案冷歸檔)、Changing(媒資變更中)及SourceChanging(源檔案變更中),空值表示不篩選。確認媒資是否存在轉碼流。
擷取轉碼流需先進行音視頻轉碼再調用GetPlayInfo介面;如需源流地址,請參考
GetMezzanineInfo。
播放卡頓相關問題
有哪些措施可以改善視頻播放卡頓,提升命中率?
可從如下方面提升命中率:配置URL鑒權、重新整理預熱、緩衝配置、過濾參數。
拖動視頻的進度條到視頻中間播放時,播放卡頓
當視頻本身的主要畫面格太少時,導致拖動時需要大量載入前後的主要畫面格才能計算出來對應的畫面,也就出現了卡頓現象。這種情況下,建議對視頻進行轉碼處理,可以達到增加主要畫面格的效果,從而緩解卡頓。轉碼操作請參見音視頻轉碼。
H.266解碼外掛程式相關問題
出現0x200600001 MEDIA_PLAYER_ERROR_CODEC_VIDEO_NOT_SUPPORT報錯
當message為vvc plugin not enabled時,表示業務層沒有啟用外掛程式,需調用AliPlayerGlobalSettings.enableCodecPlugin介面啟用外掛程式功能;
當message為vvc plugin not loaded,表示外掛程式未成功整合,請檢查外掛程式庫是否成功地引入到專案中,或顯式引入loadlibrary確保載入成功。
出現0x50020002 MEDIA_PLAYER_ERROR_CODEC_PREMIUM_INVALID報錯
表明未擷取專業版License授權,H.266解碼外掛程式為播放器專業版功能,請參考管理License擷取專業版授權。
視頻封面相關問題
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播放情境下。
多音軌切換、倍速控制及小程式播放限制說明
Chrome 瀏覽器為什麼無法切換 MP4 音軌?
Chrome 瀏覽器不支援 HTMLMediaElement.audioTracks API,因此無法切換 MP4 檔案中的音軌。建議改用 HLS(m3u8)格式播放:阿里雲 Web 播放器 SDK 基於 hls.js 實現 HLS 多音軌切換;也可以通過多音軌打包轉碼產生 m3u8 檔案後播放。
Flutter 播放器切換音軌後畫面為什麼會卡住?
Flutter 播放器切換音軌時會清空緩衝區,避免切換後音畫不同步。切換期間畫面短暫卡住屬於預期行為,建議在業務 UI 中增加 loading 提示,明確告知使用者正在切換音軌。
如何限制使用者修改播放倍速?
僅隱藏倍速按鈕只能限制使用者通過播放器 UI 修改倍速,無法阻止使用者以其他方式修改播放速率。需要使用 JavaScript 監聽 ratechange 事件,並通過 setInterval 定時檢測 playbackRate 屬性;檢測到播放速率發生變化時,將 playbackRate 強制重設為 1。
小程式播放 Web 視頻和加密視頻有哪些限制?
微信小程式不支援阿里雲 Web 播放器 SDK,也不支援 DRM 加密視頻播放。播放標準加密視頻時,需要使用微信小程式原生 Video 組件,並配合自建解密服務。TikTok 等其他小程式可以使用小程式內建的播放器,也可以通過 WebView 整合阿里雲 Web 播放器 SDK。
Android 原生 video 標籤為什麼無法播放 m3u8?
大部分 Android 裝置原生不支援 HLS,因此使用原生 video 標籤播放 m3u8 檔案可能失敗。建議將視頻轉為 MP4 格式,或通過 WebView 整合阿里雲 Web 播放器 SDK 播放 HLS 視頻。