iOS端集成ijkplayer實現直播#拉流#播放

前言
  ijkplayer框架是專門用來做 視頻直播 的開源框架,基于ffmpeg恩沽,同時支持 AndroidiOS 平臺冷溶。
  對于 App 中的直播功能舔示,如果我們成功集成ijkplayer ,那么就算完成一半的工程了过吻。接下來进泼,只要獲取到 拉流 URL,就能實現視頻直播功能了纤虽。
  但是初次集成這個框架乳绕,對于新手還是有一定難度的。
  本篇主要介紹如何快速集成 ijkplayer 框架逼纸。

最終效果.gif

一洋措、下載 ijkplayer

1、下載 ijkplayer 框架源碼

ijkplayer下載地址


2杰刽、打開終端菠发,通過 git clone 進行下載

在終端中通過 git clone 下載.png

第一步: cd 進入指定的下載路徑王滤。

cd /Users/XDLee/Desktop/Live

**第二步: **通過 git clone 命令進行下載。

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

下載過程比較耗時滓鸠,耐心等待~~~


二雁乡、編譯 ffmpeg

1、下載完成糜俗,運行Demo踱稍,看看效果。

ijkplayer框架的目錄結構如下:

ijkplayer 框架的目錄結構.png


2悠抹、打開 IJKMediaDemo珠月,并編譯

提示: 'libavformat/avformat.h' file not found

編譯 IJKMediaDemo 報錯.png

原因: libavformatffmpeg 框架中的庫,而 ijkplayer 又是基于 ffmpeg 框架的楔敌,因此需要導入 ffmpeg桥温。
解決辦法: 查看 ijkplayer 的 README.md。


3梁丘、按照 README 中的說明下載并編譯編譯 ffmpeg

以下是 iOS 環(huán)境下下載并編譯 ffmpeg 的步驟

README 中的說明.png

第一步: 實際上就是下載 iOS 版的 ijkplayer侵浸,我們已經下載過了。
第二步: 切換到 ijkplayer-ios 目錄氛谜。

cd ijkplayer-ios

第三步: 表示創(chuàng)建并切換到 latest 分支掏觉。

git checkout -B latest k0.7.9

執(zhí)行第三步之前,項目分支為 master

執(zhí)行第三步之前值漫,項目在 master 主干.png

執(zhí)行完第三步澳腹,項目分支為latest

執(zhí)行終端命令png

執(zhí)行第三步之后,項目在 latest 分支.png

注意:第三步創(chuàng)建分支的操作不是必須要做的杨何,但是學習開源框架建立分支是一個好習慣酱塔。

第四步:下載 ffmpeg 源碼

./init-ios.sh
  • init-ios.sh 表示一個 shell 腳本文件,它的作用就是 下載 ffmpeg 源碼
  • ./ 表示在當前文件
  • ./init-ios.sh 表示在當前文件夾執(zhí)行腳本文件危虱,下載 ffmpeg 框架
    執(zhí)行腳本文件羊娃,下載 ffmpeg 框架.png

這個過程比較耗時,耐心等待~~~
N min后0u巍H镧琛!
下載完成弥雹,就會發(fā)現 ijkplayer 中有 ffmpeg 了垃帅。

ijkplayer 中有 ffmpeg 了.png

下載好 ffmpeg,再次編譯 Demo

  • 發(fā)現: 還是報錯'libavformat/avformat.h' file not found
  • 原因: 執(zhí)行 init-ios.sh剪勿,僅僅是下載源碼贸诚,但是源碼并沒有參與編譯,需要把源碼編譯成 .a 文件。`
  • 另外: IJKMediaDemo 依賴 IJKMediaPlayer酱固,如圖
    IJKMediaDemo依賴IJKMediaPlayer.png

第五步: 打開 IJKMediaPlayer二鳄,查看源碼
IJKMediaPlayer 位置

IJKMediaPlayer的位置.png

發(fā)現找不到對應的 .a 庫

找不到對應的.a庫.png

發(fā)現: ffmpeg 中的庫都是紅的,表示不存在媒怯,需要進行編譯订讼。
解決: 繼續(xù)查看 ijkplayer 的 README

編譯 ffmpeg 的命令.png


第六步: 編譯 ffmpeg 庫,分為三小步
步驟一: 進入腳本文件的目錄下

進入腳本文件所在目錄.png

步驟二: 執(zhí)行 ./compile-ffmpeg.sh clean

執(zhí)行腳本文件.png

./compile-ffmpeg.sh clean的作用:
  刪除一些文件和文件夾扇苞,為編譯 ffmpeg.sh 做準備欺殿,在編譯ffmpeg.sh的時候,會自動創(chuàng)建剛才刪除的那些文件鳖敷,為避免文件名沖突脖苏,因此在編譯ffmpeg.sh之前,先刪除等一會會自動創(chuàng)建的文件及文件夾定踱。

步驟三: 執(zhí)行./compile-ffmpeg.sh all棍潘,真正地編譯各個平臺的 ffmpeg 庫,并生成所有平臺的通用庫
執(zhí)行 ./compile-ffmpeg.sh all 之前

執(zhí)行腳本之前

**執(zhí)行 ./compile-ffmpeg.sh all **
執(zhí)行腳本崖媚,編譯 ffmpeg亦歉,編譯需要一段時間,耐心等待

執(zhí)行腳本之后.png

看到下面的界面畅哑,表示編譯完成


編譯完成.png

編譯完成之后

編譯完成之后肴楷,ijkplayer目錄結構.png

第七步: 再次運行 IJKMediaDemo
首先: 打開 IJKMediaPlayer,查看 ffmpeg 的庫文件是否生成

ffmpeg庫文件已經生成.png

可以看到: ffmpeg 的 .a庫都已經生成了荠呐。
然后: 打開 IJKMediaDemo赛蔫,并運行
運行成功,但是顯示如下:

Demo運行成功.png

原因: IJKMediaDemo 工程配置中泥张,只支持橫屏

屏幕方向沒有支持豎屏.png

那么呵恢,到此,整個 ffmpeg 的編譯工作就全部做完了媚创。


三渗钉、打包 IJKMediaFrame.framework

要想將ijkplayer集成到項目中,有兩種方法:
第一種方法:
README 中的做法
這種方法其實就是跟 IJKMediaDemo工程那樣筝野,直接導入IJKMediaPlayer.xcodeproj晌姚,就不再介紹粤剧。
這個方法比較麻煩歇竟,不推薦

README方法.png

建議自己打包靜態(tài)庫。
第二種方法: 打包 IJKMediaFrame.framework框架
就是把 ijkplayer 打包成 framework導入工程中使用抵恋。下面開始介紹如何打包IJKMediaPlayer.framework焕议,按照下面步驟一步一步做:

1、首先弧关,打開工程 IJKMediaPlayer.xcodeproj盅安,位置如下:

IJKMediaPlayer工程的位置.png

打開后唤锉,如下圖:


IJKMediaPlayer工程.png

2、設置工程的 scheme

第一步: 選擇 Edit Scheme

選擇 Edit Scheme.png

第二步: 選擇是制作調試用的framework還是發(fā)布用的framework

選擇Debug或者Release.png

第三步: 設置好 scheme 后别瞭,分別選擇真機模式和模擬器進行編譯窿祥,編譯完成后,進入 Finder蝙寨,如下圖

進入Finder.png

進入 Finder 后晒衩,可以看到,有真機和模擬器兩個版本的編譯結果墙歪,如下圖:


編譯結果.png

3听系、合并真機和模擬器版本的framework

注意: 不要合錯了,要合并的是這個文件虹菲,如下圖:

要合并的文件.png

打開終端恩商,進行合并赐劣,命令行的格式如下:

lipo -create "真機版本路徑" "模擬器版本路徑" -output "合并后的文件路徑"

合并后,如下圖:


合并后的framework文件.png

4、用合并生成的 IJKMediaFramework 替換掉原來的IJKMediaFramework

如圖:


操作示意圖.png

上圖中的1撒犀、2兩步完成后,藍色框中的那個IJKMediaFramework.framework文件就是我們所需要的框架了坐慰,可以復制出來馁蒂,稍后我們需要導入項目中使用。
那么瘩欺,到此必盖,用于 調試(Debug)的 IJKMediaFramework.framework就制作完成了。
用于發(fā)布(Release)的 IJKMediaFramework.framework 制作過程是類似的俱饿,就不再介紹歌粥。
已經將兩種模式下的 IJKMediaFramework.framework 上傳至網盤,
網盤分享鏈接: https://page13.ctfile.com/dir/14174113-21635467-cd9f24/


四拍埠、使用打包好的 IJKMediaFramework.framework 將 ijkplayer 集成到項目中

1失驶、 新建工程,導入合并后的 IJKMediaFramework.framework

調試的話枣购,拖入調試版的 ijkplayer 庫
發(fā)布的話嬉探,拖入發(fā)布版的 ijkplayer 庫


導入 IJKMediaFramework.framework.png

2、查看 ijkplayer 的 README棉圈,導入依賴庫

依賴庫.png

如圖涩堤,導入依賴庫完成


導入依賴庫完成.png

3、測試一下是否集成成功

ViewController.m中進行測試分瘾,首先導入IJKMediaFramework.h頭文件胎围,編譯一下,看有沒有報錯,如果沒有報錯白魂,就說明集成成功了汽纤。
經過編譯,證實集成成功了福荸。


五蕴坪、使用 ijkplayer 實現一個簡單的直播視頻

1、ijkplayer 用法簡介

  • ijkplayer 用法比較簡單敬锐,其實只要有直播地址辞嗡,就能直播
  • 注意: 最好是真機測試,模擬器測試比較卡滞造,不流暢

2续室、抓取數據

#pragma mark - 加載網絡數據
- (void)loadData {
   
    // 映客URL
    NSString *urlString = @"http://service.inke.com/api/live/simpleall?&gender=1&gps_info=116.346766%2C40.090413&loc_info=CN%2C%E5%8C%97%E4%BA%AC%E5%B8%82%2C%E5%8C%97%E4%BA%AC%E5%B8%82&is_new_user=1&lc=0000000000000053&cc=TG0001&cv=IK4.0.30_Iphone&proto=7&idfa=D7D0D5A2-3073-4A74-A726-98BE8B4E8F38&idfv=58A18E13-A21D-456D-B6D8-7499948B379D&devi=54b68af1895085419f7f8978d95d95257dd44f93&osversion=ios_10.300000&ua=iPhone6_2&imei=&imsi=&uid=450515766&sid=20XNNoa5VwMozGALfmi2xN1YCfLWvEq7aJuTHTQLu8bT88i1aNbi0&conn=wifi&mtid=391bb3520c38e0444ba0b3975f4bb1aa&mtxid=f0b42913a33c&logid=162,210&s_sg=89b4fd485d7c5ac30dc0dbf6042a06a9&s_sc=100&s_st=1493023925";
    
    // 請求數據
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/plain", nil];
    
    [manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        // 字典轉模型
        _lives = [XDLive mj_objectArrayWithKeyValuesArray:responseObject[@"lives"]];
        
        // 刷新表格
        [_tableView reloadData];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@", error);
    }];
}

3谒养、通過 拉流 URL 來觀看直播

#pragma mark - 播放直播
- (void)playLive {
    
    // 拉流 URL
    NSURL *liveURL = [NSURL URLWithString:_live.stream_addr];
    
    IJKFFMoviePlayerController *playerVC = [[IJKFFMoviePlayerController alloc] initWithContentURL:liveURL withOptions:nil];
    
    [self.view insertSubview:playerVC.view belowSubview:_backBtn];
    
    [playerVC.view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];
    
    // 記錄成員變量
    _playerVC = playerVC;
    
    [playerVC prepareToPlay];
    
    [playerVC play];
}

4挺狰、離開直播間,需要停止播放

#pragma mark - 當離開當前直播間的時候买窟,要停止播放
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    
    // 界面消失丰泊,一定要記得停止播放
    [_playerVC pause];
    [_playerVC stop];
    [_playerVC shutdown];
}

5、最后始绍,附上Demo地址

Demo地址
以上瞳购,是參照其它資料,自己親自動手實現的亏推。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末学赛,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子吞杭,更是在濱河造成了極大的恐慌盏浇,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芽狗,死亡現場離奇詭異绢掰,居然都是意外死亡,警方通過查閱死者的電腦和手機童擎,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門滴劲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顾复,你說我怎么就攤上這事班挖。” “怎么了捕透?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵聪姿,是天一觀的道長碴萧。 經常有香客問我乙嘀,道長末购,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任虎谢,我火速辦了婚禮盟榴,結果婚禮上,老公的妹妹穿的比我還像新娘婴噩。我一直安慰自己擎场,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布几莽。 她就那樣靜靜地躺著迅办,像睡著了一般。 火紅的嫁衣襯著肌膚如雪章蚣。 梳的紋絲不亂的頭發(fā)上站欺,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音纤垂,去河邊找鬼矾策。 笑死,一個胖子當著我的面吹牛峭沦,可吹牛的內容都是我干的贾虽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼吼鱼,長吁一口氣:“原來是場噩夢啊……” “哼蓬豁!你這毒婦竟也來了?” 一聲冷哼從身側響起菇肃,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤庆尘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巷送,有當地人在樹林里發(fā)現了一具尸體驶忌,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年笑跛,在試婚紗的時候發(fā)現自己被綠了付魔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡飞蹂,死狀恐怖几苍,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情陈哑,我是刑警寧澤妻坝,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布伸眶,位于F島的核電站,受9級特大地震影響刽宪,放射性物質發(fā)生泄漏厘贼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一圣拄、第九天 我趴在偏房一處隱蔽的房頂上張望嘴秸。 院中可真熱鬧,春花似錦庇谆、人聲如沸岳掐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽串述。三九已至,卻和暖如春寞肖,著一層夾襖步出監(jiān)牢的瞬間纲酗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工逝淹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耕姊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓栅葡,卻偏偏與公主長得像茉兰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欣簇,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容