一、前言

  • 隨著時(shí)代的改變,人們對(duì)于內(nèi)容的需求也不斷提高,從文字到圖片到音頻、視頻,可能到以后的 VR

  • 直播是一個(gè)非常燒錢(qián)的項(xiàng)目,需要足夠多的帶寬,足夠好的服務(wù)器,比如負(fù)載均衡,這里還會(huì)扯到云等等,保證大數(shù)據(jù)并發(fā),百萬(wàn)人同時(shí)訪(fǎng)問(wèn)等等

  • 涉及到一些專(zhuān)業(yè)的視頻相關(guān)的知識(shí),也需要很長(zhǎng)時(shí)間的學(xué)習(xí),如解碼(硬解、軟解)、編碼、轉(zhuǎn)碼,還有底層的 ffmpeg(錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案)

  • 涉及到 即時(shí)通訊 和 美顏處理,其中美顏涉及到 OpenGL ,以及基于 OpenGL 的圖像/視頻處理框架 GPUImage

  • 涉及到 CDN:(Content Delivery Network),即內(nèi)容分發(fā)網(wǎng)絡(luò),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶(hù)的網(wǎng)絡(luò)”邊緣”,使用戶(hù)可以就近取得所需的內(nèi)容,解決 Internet 網(wǎng)絡(luò)擁擠的狀況,提高用戶(hù)訪(fǎng)問(wèn)網(wǎng)站的響應(yīng)速度.

  • 一個(gè)簡(jiǎn)單的模型:主播-->直播流媒體服務(wù)器--> 多個(gè)用戶(hù)同時(shí)觀(guān)看

  • 簡(jiǎn)單的流程:采集(流)-->編碼-->傳輸-->解碼-->播放

  • 移動(dòng)端主要協(xié)議

    • RTMP 協(xié)議 Macromedia(Adobe) 公司協(xié)議

    • HTTP Live Streaming(HLS) Apple 公司協(xié)議

    • HLS流和RTMP對(duì)比:
      HLS 主要是延時(shí)比較大 ,基于 HTTP
      RTMP 主要優(yōu)勢(shì)在于延時(shí)低,基于 TCP

二、階段

  • 1、客戶(hù)端拿到服務(wù)器分配好的 URL 直接解碼播放直播視頻。直接客戶(hù)端拉流

  • 2、自己搭建服務(wù)器,播放的流自己控制。服務(wù)器推流,客戶(hù)端拉流

  • 3、調(diào)用客戶(hù)端攝像頭等進(jìn)行錄制,客戶(hù)端推流,服務(wù)器接受流

三、各階段簡(jiǎn)要說(shuō)明

1、拿到 URL 進(jìn)行解碼播放直播的視頻

  • 使用 ijkplayer ,可從網(wǎng)上找別人打包好的靜態(tài)庫(kù),直接拖到工程中使用

  • 直接用 IJKFFMoviePlayerController 創(chuàng)建 player,設(shè)置 player 中屬性 view 的尺寸,加入到控制器的 view 上

  • 界面不播放,最好要記得結(jié)束播放

@interface ViewController ()@property (nonatomic, strong) id<IJKMediaPlayback> player;@end@implementation ViewController- (void)viewDidLoad {
    [super viewDidLoad];    self.player = [[IJKFFMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:@"rtmp://live.hkstv.hk.lxdns.com/live/hks"] withOptions:nil];    // 設(shè)置 player 中 view 屬性的frame,且加入到控制器的 view 中
    self.player.view.frame = self.view.bounds;
    [self.view addSubview:self.player.view
        
		

網(wǎng)友評(píng)論