1.基本概念
視頻的圖像數(shù)據(jù)之間具有極強(qiáng)的相關(guān)性,即相鄰的幀之間很相似碍拆,或者根本就幾乎一模一樣,也就是說有大量的冗余信息慨蓝,為了視頻能夠減小體積感混,便于傳輸和保存,就有了視頻壓縮技術(shù)礼烈,具體的視頻壓縮技術(shù)有幀內(nèi)圖像數(shù)據(jù)壓縮技術(shù)弧满、幀間圖像數(shù)據(jù)壓縮技術(shù)、熵編碼壓縮技術(shù)等等此熬。
通俗地說庭呜,就是視頻中每一幀的圖像數(shù)據(jù)都有相同的地方滑进,在壓縮時只保留與前一幀不同的地方及將數(shù)據(jù)中某些感覺不出的地方去除或者屏蔽掉,即冗余壓縮募谎。
2.硬編碼和軟編碼
硬編碼:
通過調(diào)用Android系統(tǒng)自帶的Camera來錄制視頻扶关,實際上調(diào)用了底層的高清編碼硬件模塊,也即顯卡,具體就是采用Android自身提供的MediaCodec近哟,不使用CPU驮审。
軟編碼:
通過CPU計算能力來進(jìn)行編碼鲫寄,如常見的C/C++代碼吉执,速度相對較慢。例如使用Android NDK編譯H264生成so庫地来,編寫jni接口戳玫,在使用Java調(diào)用so庫。
3.一般視頻文件涉及到的三個參數(shù)
a.幀率
每秒的圖片數(shù)未斑。影響視頻圖面的流暢度咕宿,與流暢度成正比,幀率越大蜡秽,視頻越流暢府阀;幀率越小,視頻越有跳動感芽突。由于人類眼睛的特殊生理結(jié)構(gòu)试浙,如果所看畫面之幀率高于24的時候,就會認(rèn)為是連貫的寞蚌,此現(xiàn)象稱之為視覺暫留田巴。這也就是為什么電影膠片是一格一格拍攝出來,然后快速播放的挟秤。當(dāng)幀率達(dá)到一定值以后壹哺,再高的話,人類就不會察覺出有明顯變化艘刚。
這個大家玩過游戲的差不多都知道這個概念哈管宵。
b.分辨率
也就是幀圖片數(shù)據(jù)的分辨率,圖片的長度和寬度攀甚。
c.碼率
把每秒顯示的圖片進(jìn)行壓縮后的體積啄糙,也就是視頻數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),一般單位是kbps即千位每秒云稚。顧名思義它影響體積隧饼,碼率越大,體積越大静陈。
碼率 ? 時間 = 體積
幀率 ? 分辨率 = 壓縮前每秒數(shù)據(jù)量
壓縮比 = 壓縮前的每秒數(shù)據(jù)量?碼率
一般我們對于視頻是否清晰的概念燕雁,都是源于我們?nèi)搜塾^察得出的主觀體驗诞丽,大概可以概括為“沒有馬賽克”(哈哈)。簡單地說拐格,在碼率一定的情況下僧免,分辨率在一定范圍內(nèi)取值都是清晰的;同樣地捏浊,在分辨率一定的情況下懂衩,碼率在一定范圍內(nèi)的取值,都將是清晰的金踪。
4.CDN
CDN的全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)浊洞。其基本思路就是極可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使得數(shù)據(jù)傳輸更加的快速胡岔、穩(wěn)定法希。通過在網(wǎng)絡(luò)各處放置節(jié)點(diǎn)服務(wù)器所構(gòu)成的在現(xiàn)在的互聯(lián)網(wǎng)基礎(chǔ)之上的智能虛擬網(wǎng)絡(luò)。CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點(diǎn)的連接靶瘸、負(fù)載狀況以及和用戶的距離苫亦、響應(yīng)時間等綜合信息將用戶的請求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點(diǎn)上。其目的是使用戶可就近取得所需內(nèi)容怨咪,解決 Internet網(wǎng)絡(luò)擁擠的狀況屋剑,提高用戶訪問網(wǎng)站的響應(yīng)速度。
5.RTMP協(xié)議
RTMP是Real Time Messaging Protocol(實時消息傳輸協(xié)議)的首字母縮寫诗眨。該協(xié)議基于TCP唉匾,是一個協(xié)議簇,包括RTMP基本協(xié)議及RTMPT/RTMPS/RTMPE等多種變種辽话。RTMP是一種設(shè)計用來進(jìn)行實時數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議肄鸽,主要用來在Flash/AIR平臺和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。
RTMP協(xié)議是Adobe公司推出的實時傳輸協(xié)議油啤,主要用于基于flv格式的音視頻流的實時傳輸典徘。得到編碼后的視音頻數(shù)據(jù)后,先要進(jìn)行FLV包裝益咬,然后封包成rtmp格式逮诲,然后進(jìn)行傳輸。
使用RTMP格式進(jìn)行傳輸幽告,需要先連接服務(wù)器梅鹦,然后創(chuàng)建流,然后發(fā)布流冗锁,然后傳輸相應(yīng)的視音頻數(shù)據(jù)齐唆。整個發(fā)送是用消息來定義的,rtmp定義了各種形式的消息冻河,而為了消息能夠很好地發(fā)送箍邮,又對消息進(jìn)行了分塊處理茉帅,整個協(xié)議較為復(fù)雜。
文/風(fēng)從影(簡書作者)
原文鏈接:http://www.reibang.com/p/7ebbcc0c5df7
著作權(quán)歸作者所有锭弊,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)堪澎,并標(biāo)注“簡書作者”。
以上是我對直播基本概念的粗淺整理味滞,以加深自己對這部分的理解和記憶樱蛤,也為了讓自己養(yǎng)成寫文章、勤整理的習(xí)慣剑鞍,也是本人在簡書上發(fā)布的第一篇文章昨凡,參考了一些網(wǎng)站的視頻教程,以及大神的文章攒暇。在此表達(dá)一下感謝土匀。
參考文章:Android手機(jī)直播(一)總覽