iOS 快速整合ijkplayerApsaraVideo for Live與錄播架構

來源:互聯網
上載者:User

標籤:架構   rip   過程   pre   疑問   之一   弊端   object   沒有   

最近由於需求的變動,項目內把最初最簡單的原生直播架構變成了B站開源的ijkplayer架構,下面把具體的過程總結一下整個過程都比較簡單,重要的是理解的過程,整合完畢之後,視頻的使用者體驗比蘋果原生好了很多。最後會貼出demo的git地址,只需要簡單的操作就能快速的在項目中加入該架構

先把B站開源ijkplayer的github地址貼出來 https://github.com/Bilibili/ijkplayer
未使用過的同學,請去自取有助於理解整個視頻架構的原理。

** 為何要改變原來項目內的ApsaraVideo for Live,錄播架構?**

首先我先說一下為何我們項目內會修改原來原生的直播與視頻架構,這個過程能體現出來ijkplayer對比iOS原生的各種優點。

1.我們最初使用的原聲直播是使用MPMoviePlayerController,該類蘋果官方有提示讓使用AVPlayerViewController來替代,雖然MPMoviePlayerController就目前來看還可以正常使用,但是可能在未來不久的時間就會出現問題。
2.對比直播:直播的第一指標是延遲問題,蘋果原生的直播協議僅支援hls協議,而ijkplayer不僅支援hls,也支援rtmp協議,hsl協議的弊端就是讓人頭疼的延遲問題,該協議會把視頻切成一段一段的m3u8的視頻片段,延遲一般來說會到10秒左右,而rtmp協議延遲非常小,從修改完之後的情況來說,視頻的流暢度提高了非常多。這條原因,是修改直播架構的根本原因之一。
3.對比錄播流:如果同時播放雲端儲存的視頻流,它存在著一些不可迴避的問題,那就是支援的視頻編碼格式很有限:H.264、MPEG-4,副檔名(壓縮格式):.mp4、.mov、.m4v、.m2v、.3gp、.3g2等。這種支援對於運營的操作要求很高,支援的格式比較少。而ijkplayer不僅包括了原生可以支援的所有格式,主流的視頻格式基本可以全部支援。
4.對比使用者互動:MPMoviePlayerController自訂樣式和使用者互動的一些手勢操作非常有限,而ijkplayer你幾乎可以定製一切你可以想到的互動,主流的直播app都在使用。

對比以上幾條原因,我們在項目中進行了進一步的升級,使用ijkplayer的需求非常迫切。

** 主要代碼相關**

具體demo會在下方貼出連結,這裡僅示範最重要的幾步要求。

1.下載完畢demo後,由於ijk的framework包比較大所以沒有跟著項目一起上傳,需要先將github地址詳情內的ijk的framework的zip包下載下來,匯入項目,並且將路徑配置好。

其實打出來ijk的framework包的這個過程是一個非常好的理解過程,由於有很多打包流程,這裡貼出來一個比較詳細的供大家參考
點這裡,這個過程比較詳細

2.匯入中的幾個檔案


 Paste_Image.png

3.項目內初始化關鍵代碼,寫入即可運行

    // 建立盛放視頻播放器的父視圖 用於改變全屏和縮小    _headPlayerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,  [UIScreen mainScreen].bounds.size.width,  [UIScreen mainScreen].bounds.size.width*videoTempProgress)];    [self.view addSubview:_headPlayerView];   //測試地址   //rtmp 直播 香港電視台測試地址 rtmp://live.hkstv.hk.lxdns.com/live/hks   //錄播 播放流http://hc.yinyuetai.com/uploads/videos/common/E49E014999C93F5A88EA01B2B48161CE.flv?sc=fc5276d37b6cd89c&br=775&vid=2178416&aid=2650&area=Other&vst=3      //該模型可以隨意設定  來傳入你想自訂的內容  XYVideoModel *model = [[XYVideoModel alloc]init];    model.url = [NSURL URLWithString:@"http://hc.yinyuetai.com/uploads/videos/common/E49E014999C93F5A88EA01B2B48161CE.flv?sc=fc5276d37b6cd89c&br=775&vid=2178416&aid=2650&area=Other&vst=3"];    model.name = @"測試標題測試標題測試標題";    model.coverimg = @"coverimg.jpeg";        // 建立視頻播放控制項    self.playerView = [[LMVideoPlayerView alloc]initWithModel:model];    //遵循LMVideoPlayerViewDelegate 來實現退出全屏 和 放大的代理    self.playerView.delegate = self;    [_headPlayerView addSubview:self.playerView];
#pragma mark XYVideoPlayerViewDelegate//全屏按鈕代理方法- (void)fullScreenWithPlayerView:(LMVideoPlayerView *)videoPlayerView{//點擊放大旋轉和返回縮小的方法    if (self.playerView.isRotate) {        [UIView animateWithDuration:0.3 animations:^{            _headPlayerView.transform = CGAffineTransformRotate(_headPlayerView.transform, M_PI_2);            _headPlayerView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);            self.playerView.frame = _headPlayerView.bounds;                    }];            }else{                [UIView animateWithDuration:0.3 animations:^{            _headPlayerView.transform = CGAffineTransformIdentity;            _headPlayerView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width*videoTempProgress);            self.playerView.frame = _headPlayerView.bounds;        }];            }}//返回按鈕代理方法- (void)backToBeforeVC{        if (!self.playerView.isRotate) {                [self.navigationController popViewControllerAnimated:YES];    }}

** github demo地址**

demo地址,歡迎star

如果有任何疑問和對ijk的理解問題,可以隨時留言或者私信溝通



死涵Leesim
連結:https://www.jianshu.com/p/3c109b2c5ba9
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

iOS 快速整合ijkplayerApsaraVideo for Live與錄播架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.