音視頻科普&視頻在七牛存儲播放失敗解決方法
文章目錄
前言
本文的視頻對象主要針對存儲在七牛的用戶。當然,觸目旁通,也可以面向所有視頻在瀏覽器不能播放的用戶。
一、瞭解音視頻
什麼是視頻?
從感性角度,視頻是無數有趣畫面的集合,是一部的具有衝擊力表現豐富的短片或者電影。
從技術角度,一個畫面可以有如下解析。
用思維導圖描述如下:
任何視頻文件,從結構上講都可以分爲有什麼內容元素、使用了哪種編碼格式,最後由何種容器封裝。
而目前主流的編碼格式是 H.264 + AAC 方案。
瀏覽器之video標籤
瀏覽器播放視頻都是通過H5的video標籤,這個標籤的功能就是讓多媒體文件可以很方便的在網頁中播放,示例如下:
<video src="視頻鏈接" controls="controls" width="500" height="300"></video>
但是,儘管HTML5提供了播放視頻的方式,HTML5卻沒有規定,瀏覽器到底應該播放哪一種格式的視頻。瀏覽器廠商可以自行選擇支持的格式。
當然,有以下通用的格式大部分瀏覽器都是兼容的:
MP4 = MPEG 4文件使用 H264 視頻編解碼器和AAC音頻編解碼器
WebM = WebM 文件使用 VP8 視頻編解碼器和 Vorbis 音頻編解碼器
Ogg = Ogg 文件使用 Theora 視頻編解碼器和 Vorbis音頻編解碼器
而至於具體的編碼格式兼容性,需要進一步測試。
二、點播視頻存儲七牛不能播放原因解析
1、編碼原因
七牛雲對於存儲在七牛對象存儲的視頻有個非常便捷的查詢元信息的方法(每個視頻都帶元信息,除非自己刪除了),即通過以下格式訪問視頻:
http(s)://domain/key?avinfo
注1:http(s)😕/domain/key爲視頻鏈接,鏈接後加?avinfo獲取元信息。
元信息接口文檔:https://developer.qiniu.com/dora/manual/1247/audio-and-video-metadata-information-avinfo
注2:也可以ffmpeg獲取元信息,參數如下:
ffmpeg -i 視頻文件地址
如前文所說,其實絕大部分視頻不能播放都是編碼原因,具體視頻編碼可以通過元信息接口得到。
如果發現視頻的codec_name(編碼器名稱)值是MPEG-4,主流播放器都是不支持這種格式的,所以可以將視頻編碼轉成H.264,轉碼方式見第三章。
注: 截圖編碼已經是H.264
2、編碼方式的profile
如果編碼方式正確,是各大瀏覽器都兼容的H.264 + AAC方案,但是你發現,視頻在有些平臺可以播放,有些平臺則不可以播放。
這個時候,你一定很糾結,爲什麼視頻就是不可以播放呢?
這個其實和視頻的編碼規格有關,根本原因,就是瀏覽器的兼容性。
AVC(H.264)規格分爲三等,從低到高分別爲:Baseline、Main、High
AAC規格也有三種:LC-AAC(最基本的)、HE-AAC、 HE-AAC v2
三者的關係如下:
通俗易懂的解釋就是低碼率下,HE-AAC比LC-AAC要好。
但是,Low Complexity (LC AAC)配置最被廣泛用於商業市場,即被各大瀏覽器的兼容,但是HE-AAC經過實測,IE支持、safri需要重複刷新也支持,但是谷歌目前不支持。
所以,當音頻是HE-AAC時,需要轉碼,轉碼看第三章。
注:H.264編碼視頻目前所測三種規格瀏覽器都支持
3、碼率原因
所謂碼率,即數據傳輸時單位時間傳送的數據位數,通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件。
基本的算法是:【碼率】(kbps)=【文件大小】(KB) * 8 / 【時間】(秒)
大白話就是,碼率高,就需要更好的網絡帶寬。所以,當視頻播放一直在轉時,這個時候就要考慮是否碼率過高的原因了。
碼率推薦表:
注1:圖一位寬屏,圖二爲非寬屏。
三、解決方案
轉碼方式解析: