天天看點

直播技術學習筆記(一) 播放器相關技術:直播的相關技術 5、CDN内容分發網絡 6、RTMP實時消息傳輸協定 7、RTC實時通訊

播放器相關技術:

1、開源項目 jjdxm_ijkplayer是基于 ijkplayer簡單的UI界面; ijkplayer是一個基于 FFmpeg n2.6 的開源 Android/iOS 視訊播放器;

2、虛拟按鍵的隐藏方法:

rootView = getLayoutInflater().from(this).inflate(R.layout.activity_calrity, null);              setContentView(rootView);              /**虛拟按鍵的隐藏方法*/              rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {              @Override              public void onGlobalLayout() {              //比較Activity根布局與目前布局的大小              int heightDiff = rootView.getRootView().getHeight() - rootView.getHeight();              if (heightDiff > 100) {              //大小超過100時,一般為顯示虛拟鍵盤事件              rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);              } else {              //大小小于100時,為不顯示虛拟鍵盤或虛拟鍵盤隐藏              rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);              }              }              });           

3、設定螢幕常亮:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);              PowerManager.WakeLock akeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "liveTAG");              wakeLock.acquire();//激活裝置常亮狀态              wakeLock.release();//恢複裝置亮度狀态           

直播的相關技術

1、直播概念: ①由手機一端作為視訊 采集端,采集視訊資訊,通過網絡實時傳遞到伺服器,再由伺服器推送到視訊播放端的過程 ② 流媒體:采用流式傳輸的方式在Internet播放的媒體格式; 這種播放形式不同于以往的播放形式,采集端以資料包的形式發送到伺服器,伺服器将資料包 推送給播放端; 這樣播放端不需要擷取到完整的視訊檔案,就可以實作對采集端資料的播放任務。 ③直播中采用的檔案傳輸方式就是 流媒體檔案傳輸方式 2、 視訊編碼的基本原理: ①視訊圖像資料有極強的相關性也就是說有大量的 備援資訊,壓縮技術就是将資料中的備援資訊去掉(去除資料之間的相關性) ②壓縮技術包含 幀内圖像資料壓縮技術、 幀間圖像資料壓縮技術和 熵編碼壓縮技術 ③視訊壓縮中的每一幀畫面都有相似的地方,在壓縮時隻保留與前一幀不同的地方即将信号中部分感覺不出的分量壓縮掉或“掩蔽掉”即 祛除備援壓縮. 3、 寫死和軟編碼:

①寫死:通過調用Android系統自帶的Camera錄制視訊,實際上是調用了底層的高清編碼 硬體子產品也即顯示卡不使用CPU;速度快 ②軟編碼:使用CPU進行編碼如常見C/C++代碼,一般編譯生成的 都是 二進制資料,速度相對較慢。例如使用Android NDK編譯H264生成so庫,編寫jni接口,再使用java調用so庫。 ③視訊檔案一般涉及到三個參數: 幀率、 分辨率和 碼率。 #幀率: 每秒顯示的圖檔數。影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。由于人類眼睛的特殊生理結構,如果所看畫面之幀率高于16的時候,就會認為是連貫的,此現象稱之為視覺暫留。并且當幀速達到一定數值後,再增長的話,人眼也不容易察覺到有明顯的流暢度提升了。

#分辨率: (矩形)圖檔的長度和寬度,即圖檔的尺寸; #碼率: 把每秒顯示的圖檔進行壓縮後的資料量。影響體積,與體積成正比:碼率越大,體積越大;碼率越小,體積越小。  體積=碼率×時間 幀率 × 分辨率=壓縮前的每秒資料量(機關應該是若幹個位元組) 壓縮比=壓縮前的每秒資料量/碼率(對于同一個視訊源并采用同一種視訊編碼算法,則:壓縮比越高,畫面品質越差。) 4、所謂“清晰”,是指畫面十分細膩,沒有馬賽克。并不是分辨率越高圖像就越清晰。 簡單說:在碼率一定的情況下,分辨率與清晰度成反比關系:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰。 在分辨率一定的情況下,碼率與清晰度成正比關系,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。

5、CDN内容分發網絡

CDN的全稱是Content Delivery Network,即内容分發網絡:

①其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩定。 ②通過在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡,CDN系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。 ③其目的是使使用者可就近取得所需内容,解決 Internet網絡擁擠的狀況,提高使用者通路網站的響應速度

6、RTMP實時消息傳輸協定

RTMP是Real Time Messaging Protocol,即實時消息傳輸協定

①該協定基于TCP,是一個協定族,包括RTMP基本協定及RTMPT/RTMPS/RTMPE等多種變種。 ②RTMP是一種設計用來進行實時資料通信的網絡協定,主要用來在Flash/AIR平台和支援RTMP協定的流媒體/互動伺服器之間進行音視訊和資料通信。支 ③持該協定的軟體包括Adobe Media Server/Ultrant Media Server/red5等

④在RTMP協定中 信令和 媒體資料都稱之為 Message,在網絡中傳輸這些Message,為了區分它們肯定是要加一個Message head;是以RTMP協定也有一個Message head; ⑤還有一個問題因為 RTMP協定是基于TCP的,由于TCP的包長度是有限制的(一般來說不超過1500個位元組)而RTMP的Message長度是有可能很大的,像一個視訊幀的包可能會有幾十甚至幾千K,這個問題就必然有一個分片的問題,在RTMP協定中對應的說法就是 chunk, 每一個Message + head都是由一個和多個chunk組成的。

7、RTC實時通訊

RTC實時通訊 即 Real-time communications