直播 背景 技術體系 樂視雲直播Demo


背景

最近工作需要做一款直播APP,恩是的,從 RTMP協議的實現開始到處理服務器高並發、負載均衡、客戶端播放器實現等等等.....
估計全部寫完我也到而立之年了吧......
BOSS們估計也是發現了我的困惑,所以打算 集成第三方sdk開發,現在大部分的直播產品都會借助第三方的直播技術,這樣也可以保證直播的質量。
最后着重測試的還是 阿里雲和樂視雲的第三方sdk,阿里雲的直播產品剛出不久,感覺文檔以及調試過程還不是很清晰,現在一直沒弄明白為啥推流推出去了但是另外一邊拉流拉不了,也不知道是播放器的問題還是咋的,用 戰旗的直播間測試就可以拉到流,希望有大牛可以在評論區告知一二。
本文講的是 樂視雲直播Demo的使用過程,感覺樂視在文檔邏輯上比阿里雲還是強很多的至少,條理清晰邏輯嚴謹,能讓新手很快找到方向。
那么本文的目的呢,是給出一個最簡單清晰的Demo整理路線,讓各位做到真正的1分鍾看懂實現集成樂視sdk的直播Demo實現過程。

樂視雲直播測試案例

  • 登陸注冊,進入后在頂部產品項里選擇移動直播文檔在這里
  • 進入移動直播頁面后,點擊免費開通(免費使用5G流量)
  • 進入移動直播"應用管理"界面,點擊創建應用,只需輸入名字、類型、平台就可以了,之后我們會看到幾個很重要的參數:推流域名、播放域名、發布點名稱(live)以及簽名密鑰有了這幾個東西,我們就可以開始直播測試了。
     
     
     
             
  1. 應用名稱:包晴天直播
  2. 推流域名:17546.mpush.live.lecloud.com
  3. 播放域名:17546.mpull.live.lecloud.com
  4. 發布點名稱:live
  5. 簽名密鑰:V86NL7KWKW1SL530F1KN

  6. 直播推流與播放地址規則:rtmp://{推流域名}/發布點名稱/{直播流名稱}
  7. 直播流名稱可自定義使用,可允許數字或字母的任意字符,但不超過50位。
  • 我們可以進行清晰度選擇、錄制、安全等設置
      
      
      
              
  1. 轉碼后,播放流名稱的生成規則:流名稱+清晰度標識
  2. 清晰度標識說明,流暢:"_10",標清:"_13",高清:"_16",原畫:""。
  3. 例如:播放地址:rtmp://{域名}/發布點/{直播流名稱}
  4. 轉成高清碼率后,高清碼率的播放地址為:rtmp://{域名}/發布點/{直播流名稱_16}
  • 推流端配置。打開手機的推流端應用,依次輸入推流域名,簽名密鑰,以及流名稱然后點擊開始直播,就可以直播推流了。
  • 播放端配置。只需設置播放地址即可,rtmp://17546.mpush.live.lecloud.com/live/bqt
  • 直播過程中,可對所有"直播流"進行控制
以上就是樂視雲Demo的全部步驟辣,剩下的開發過程都很簡單,從代碼中探索即可。

樂視推流端部分代碼(設置自己的參數)

/**
 * 無皮膚版和有皮膚版的區別
 * 無皮膚:SDK不去猜測你的業務邏輯。只是提供最基本的接口,比如開始推流、切換濾鏡、切換攝像頭等。
 * 有皮膚:SDK提供一種業務邏輯的使用辦法。比如DEMO中展示的,你點擊按鈕就可以開始推流,點擊下方各個圖標就能實現功能切換等
 *
 *
 * 1、所有推流SDK功能和最簡單的DEMO,可以直接查看RecorderTestActivity
 * 其中:如果移動直播查看CameraView,雲直播查看LeCameraView
 *
 *     2、在AndroidManifest.xml 中,我們默認設置MainActivity的啟動方式,MainAcivity提供了漂亮的UI界面。
 *     如果你需要看看 RecorderTestActivity 的運行效果,需要自己在AndroidManifest.xml中進行設置,使用RecorderTestActivity直接啟動就行了
 *
 *     3、對於我們提供的UI層,理論不建議修改,但是如果你們確實需要,也可以自己修改,但是出現任何BUG需要自己調試。
 */
public class MainActivity extends Activity {
    // 移動直播【推流域名】,在官網移動直播創建應用后可拿到
    private static final String DEFAULT_DOMAINNAME = "17546.mpush.live.lecloud.com";//216.mpush.live.lecloud.com
    // 移動直播【推流簽名密鑰】,在官網移動直播創建應用后可拿到
    private static final String DEFAULT_APPKEY = "V86NL7KWKW1SL530F1KN";//KIVK8X67PSPU9518B1WA
    // 移動直播【推流地址】, 當用戶知道自己需要推流的地址后可以使用
    private static final String DEFAULT_PUSHSTREAM = "rtmp://17546.mpush.live.lecloud.com/live/bqt";//rtmp://216.mpush.live.lecloud.com/live/demo
    // 樂視雲直播推流【用戶ID】,用戶可以在官網用戶中心拿到。另外,我的UUID為yt1jdrioib
    private static final String DEFAULT_LETV_USERID = "835278";//800053
    //樂視雲直播推流【用戶私鑰】,用戶可以在官網用戶中心拿到
    private static final String DEFAULT_LETV_APPKEY = "14659a5bf736682623ca3f2f69129a16";//60ca65970dc1a15ad421d46f524b99b7
    //樂視【雲直播推流ID】,用戶開通雲直播功能,可以在創建活動后拿到
    private static final String DEFAULT_LETV_STREAMID = "A2016120500000gx";
    //默認流名稱使用的是設備的IMEI號
    private String default_streamid = "IMEI";

技術實現層面

技術相對都比較成熟,設備也都支持硬編碼
github上有現成的開源實現, 推流、美顏、水印、彈幕、點贊動畫、濾鏡、播放都有。技術其實不是很難,而且現在很多雲廠商都提供SDK, 七牛雲、金山雲、樂視雲、騰訊雲、百度雲、斗魚直播伴侶推流端,功能幾乎都是一樣的,沒啥亮點,不同的是整個直播平台服務差異和接入的簡易性。后端現在 RTMP/HTTP-FLV 清一色,App掛個源站直接接入雲廠商或CDN就OK。

直播優化層面

其實最難的難點是 提高首播時間、服務質量Qos(Quality of Service),如何在丟包率20%的情況下還能保障穩定、流暢的直播體驗,需要考慮以下方案:
  • 1.為加快首播時間,收流服務器主動推送 GOP :(Group of Pictures:策略影響編碼質量)。所謂GOP,意思是畫面組,一個GOP就是一組連續的畫面至邊緣節點,邊緣節點緩存 GOP,播放端則可以快速加載,減少回源延遲
  • 2.GOP丟幀,為解決延時,為什么會有延時,網絡抖動、網絡擁塞導致的數據發送不出去,丟完之后所有的時間戳都要修改,切記。要不客戶端就會卡一個 GOP的時間,是由於 PTS(Presentation Time Stamp,PTS主要用於度量解碼后的視頻幀什么時候被顯示出來) 和 DTS 的原因,或者播放器修正 DTS 和 PTS 也行(推流端丟GOD更復雜,丟 p 幀之前的 i 幀會花屏)
  • 3.純音頻丟幀,要解決音視頻不同步的問題,要讓視頻的delta增量到你丟掉音頻的delta之后,再發音頻,要不就會音視頻不同步
  • 4.源站主備切換和斷線重連
  • 5.根據TCP擁塞窗口做智能調度,當擁塞窗口過大說明節點服務質量不佳,需要切換節點和故障排查
  • 6.增加上行、下行帶寬探測接口,當帶寬不滿足時降低視頻質量,即降低碼率
  • 7.定時獲取最優的推流、拉流鏈路IP,盡可能保證提供最好的服務
  • 8.監控必須要,監控各個節點的Qos狀態,來做整個平台的資源配置優化和調度
  • 9.如果產品從推流端、CDN、播放器都是自家的,保障 Qos 優勢非常大
  • 10.當直播量非常大時,要加入集群管理和調度,保障 Qos
  • 11.播放端通過增加延時來減少網絡抖動,通過快播來減少延時。

運營成本和客戶體驗

根據網上的數據,斗魚 TV 為 3 億人民幣,戰旗 TV 為 1.5 億人民幣,龍珠為 1.2 億人民幣,虎牙為 3000 萬 + 人民幣。
運營和推廣:這個就比較燒錢了,一些做移動直播、游戲直播、秀場直播的A輪至少得上千萬。
用戶體驗: 流暢、不卡頓、不花屏、斷線重連、丟包策略、首畫加載速度、豐富的禮物系統,為了提高用戶體驗,可以在后台加載其他頁面數據,但要在用戶體驗和內存優化方面找到平衡點。

流媒體傳輸

  • TCP:TCP為點對點的協議,雖然能保證了數據傳輸的可靠性,但是對服務器資源耗費較大,在數據流大的場合難以保證數據流傳輸的實時性
  • UDP:UDP為不可靠傳輸協議,不需要維護連接狀態,也不認為每個數據包都必須到達接受端,因此網絡負荷比TCP小,傳輸速度也要比TCP快;但在網絡越擁擠時,越有更多的數據包丟失
  • RTMP:RTMP一個專門為高效傳輸視頻、音頻和數據而設計的協議,它通過建立一個二進制TCP連接或者連接HTTP隧道實現實時的視頻和聲音傳輸。
  • FFmpeg:FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。
 

備用服務器

給沒架設服務器的朋友來一套福利:備用服務器地址(親測可用):

rtmp://live.hkstv.hk.lxdns.com:1935/live/stream123

rtmp://live.hkstv.hk.lxdns.com:1935/live/hks
(將hks名稱改成其他的,比如aaa)

rtmp://202.69.69.180:443/live/aaa
(rtmp://202.69.69.180:443/webcast/bshdlive-pc)

rtmp://v1.one-tv.com:1935/live/aaa(rtmp://v1.one-tv.com:1935/live/mpegts.stream)

rtmp://203.207.99.19:1935/live/aaa(rtmp://203.207.99.19:1935/live/CCTV1)

rtmp://202.117.80.19:1935/live/aaa
(rtmp://202.117.80.19:1935/live/live4)

rtmp://ams.studytv.cn/live/aaa
(rtmp://ams.studytv.cn/livepkgr/264)

rtmp://60.174.36.89:1935/live/aaa
(rtmp://60.174.36.89:1935/live/vod3)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM