iOS 視訊直播與錄播拉流框架2.0

weixin_33912246發表於2018-06-04

效果圖

1197929-bdc7ea869c0c4541.gif
ijkplayerDemoGif.gif

效果圖因為錄屏工具的原因有很嚴重的卡頓,Demo內效果非常流暢

Demo GitHub地址,歡迎Star

由於ijk的framework比較大就沒有放入專案內上傳,請自行點選下方連結自取,解壓縮後放入專案內即可
IJKPlayer 的Framework在iOS11.0以上有顯示bug,下面的包已經對該bug進行了適配
點選這裡你可以下載已經打好framework的ijk

該專案基於b站的開源專案ijkplayer 在此基礎上增加了一些基礎功能

1.左側螢幕上下滑動調整亮度
2.右側螢幕上下滑動調整音量
3.橫向左右拖動改變播放進度
4.橫豎屏切換
5.支援視訊播放介面自定義(可以在Demo程式碼內部進行修改控制元件的UI)

支援播放格式

1.支援rtmp,hls直播拉流
2.視訊雲端地址播放

使用方法:

1.引入自定義視訊播放類

#import "LMIJKVideoPlayerView.h"

2.初始化播放控制元件

/** 視訊播放檢視 */
@property (nonatomic, strong) LMIJKVideoPlayerView *playerView;

-(LMIJKVideoPlayerView *)playerView{
    if (!_playerView) {
        _playerView = [[LMIJKVideoPlayerView alloc]initWithFrame:self.view.frame];
    }
    return _playerView;
}

3.傳遞播放視訊播放地址或者直播流地址

#pragma mark - life cycle
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.playerView];
    //測試地址
    //rtmp 直播 香港電視臺測試地址 rtmp://live.hkstv.hk.lxdns.com/live/hks
    //錄播 播放流
    //http://qimage.owhat.cn/test/master/media/1510731201386.mp4
    self.playerView.videoUrl = @"http://qimage.owhat.cn/test/master/media/1510731201386.mp4";
}

4.在控制器銷燬的時候,一定要記住呼叫視訊播放器的銷燬方法

- (void)dealloc{
    [self.playerView deallocPlayer];
}

使用場景

1.非複用場景
目前Demo內的使用場景針對於非複用場景,就是針對於非列表頁面,只初始化一次,沒有多個視訊地址切換的場景,可以使用在某些詳情頁面等不需要切換地址的場景直接使用。
2.複用場景
針對於UITableView UICollectionView等列表頁面,或者同一介面需要複用播放器但是要切換播放地址的場景。我在我們自己的專案內也是使用Demo內的播放控制元件兒,但是針對不同的場景進行了細節的優化。
這裡提供一下複用場景的我個人的想法:
主要問題就是:針對於切換播放源的同時,不可以重新初始化播放器的控制元件,這個重新初始化過程非常的消耗資源。我最初我嘗試了該種方法,確實是卡頓嚴重,特別影響使用者體驗。
解決該問題的思路:IJKPlayer 雖然功能上整體比AVPlayer強大,支援的格式也比AVPlayer多,但是有一點兒IJK是比不了AVPlayer的。IJK不具備切換播放地址的原生API,也就是說預設的框架是不支援切換地址的,只能進行重新初始化。但是僅僅只能初始化播放類本身,不要整個初始化自定義播放控制元件。

self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:videoUrl] withOptions:options];

單獨針對IJKFFMoviePlayerController進行重新根據VideoURL進行初始化。注意要在初始化之前,銷燬原來的監聽。
具體的程式碼你需要根據你複用的業務來進行。所以就在這裡提供一個思路。可以自行處理後面的邏輯。我在根據上面思路修改完之後,視訊播放起來非常流暢,而且使用者體驗也特別好。本質上就是無論是切換多少個地址和在列表上怎麼滾動,播放視訊的始終是一個播放器控制元件,只不過是根據滾動的位置進行展示和隱藏,播放和暫停。

相關文章