1.基本概念
視頻的圖像數據之間具有極強的相關性,即相鄰的幀之間很相似,或者根本就幾乎一模一樣,也就是說有大量的冗余信息,為了視頻能夠減小體積,便于傳輸和保存,就有了視頻壓縮技術,具體的視頻壓縮技術有幀內圖像數據壓縮技術、幀間圖像數據壓縮技術、熵編碼壓縮技術等等。
通俗地說,就是視頻中每一幀的圖像數據都有相同的地方,在壓縮時只保留與前一幀不同的地方及將數據中某些感覺不出的地方去除或者屏蔽掉,即冗余壓縮。
2.硬編碼和軟編碼
硬編碼:
通過調用Android系統自帶的Camera來錄制視頻,實際上調用了底層的高清編碼硬件模塊,也即顯卡,具體就是采用Android自身提供的MediaCodec,不使用CPU。
軟編碼:
通過CPU計算能力來進行編碼,如常見的C/C++代碼,速度相對較慢。例如使用Android NDK編譯H264生成so庫,編寫jni接口,在使用Java調用so庫。
3.一般視頻文件涉及到的三個參數
a.幀率
每秒的圖片數。影響視頻圖面的流暢度,與流暢度成正比,幀率越大,視頻越流暢;幀率越小,視頻越有跳動感。由于人類眼睛的特殊生理結構,如果所看畫面之幀率高于24的時候,就會認為是連貫的,此現象稱之為視覺暫留。這也就是為什么電影膠片是一格一格拍攝出來,然后快速播放的。當幀率達到一定值以后,再高的話,人類就不會察覺出有明顯變化。
這個大家玩過游戲的差不多都知道這個概念哈。
b.分辨率
也就是幀圖片數據的分辨率,圖片的長度和寬度。
c.碼率
把每秒顯示的圖片進行壓縮后的體積,也就是視頻數據傳輸時單位時間傳送的數據位數,一般單位是kbps即千位每秒。顧名思義它影響體積,碼率越大,體積越大。
碼率 ? 時間 = 體積
幀率 ? 分辨率 = 壓縮前每秒數據量
壓縮比 = 壓縮前的每秒數據量?碼率
一般我們對于視頻是否清晰的概念,都是源于我們人眼觀察得出的主觀體驗,大概可以概括為“沒有馬賽克”(哈哈)。簡單地說,在碼率一定的情況下,分辨率在一定范圍內取值都是清晰的;同樣地,在分辨率一定的情況下,碼率在一定范圍內的取值,都將是清晰的。
4.CDN
CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路就是極可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使得數據傳輸更加的快速、穩定。通過在網絡各處放置節點服務器所構成的在現在的互聯網基礎之上的智能虛擬網絡。CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及和用戶的距離、響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。
5.RTMP協議
RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基于TCP,是一個協議簇,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。
RTMP協議是Adobe公司推出的實時傳輸協議,主要用于基于flv格式的音視頻流的實時傳輸。得到編碼后的視音頻數據后,先要進行FLV包裝,然后封包成rtmp格式,然后進行傳輸。
使用RTMP格式進行傳輸,需要先連接服務器,然后創建流,然后發布流,然后傳輸相應的視音頻數據。整個發送是用消息來定義的,rtmp定義了各種形式的消息,而為了消息能夠很好地發送,又對消息進行了分塊處理,整個協議較為復雜。
文/風從影(簡書作者)
原文鏈接:http://www.lxweimin.com/p/7ebbcc0c5df7
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。
以上是我對直播基本概念的粗淺整理,以加深自己對這部分的理解和記憶,也為了讓自己養成寫文章、勤整理的習慣,也是本人在簡書上發布的第一篇文章,參考了一些網站的視頻教程,以及大神的文章。在此表達一下感謝。
參考文章:Android手機直播(一)總覽