播放篇|如何快速地開發(fā)一個完整的iOS直播App

0 評論 13218 瀏覽 34 收藏 16 分鐘

本篇主要講解的是直播app中,需要用到的一個很重要的開源框架ijkplayer,然后集成這個框架可能對大多數(shù)初學者還是比較有難度的,所以本篇主要教你解決集成【ijkplayer】遇見的各種坑。

在看這篇之前,如果您還不了解直播原理,請查看上篇文章原理篇|如何快速地開發(fā)一個完整的iOS直播App

開發(fā)一款直播app,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦

本篇主要講解的是直播app中,需要用到的一個很重要的開源框架 ijkplayer,然后集成這個框架可能對大多數(shù)初學者還是比較有難度的,所以本篇主要教你解決集成【ijkplayer】遇見的各種坑。

很多文章,可能講解的是如何做,我比較注重講解為什么這樣做,大家有什么不明白,還可以多多提出來。

一、基本知識

README.md文件

框架的描述文件,描述這個框架怎么使用

編譯語言

程序在被執(zhí)行之前,需要一個專門的編譯過程,把程序編譯成為機器語言的文件,運行時不需要翻譯,所以編譯型語言的程序執(zhí)行效率高,比如OC,C,C++

解釋性語言

解釋性語言的程序不需要編譯,在運行程序的時候才翻譯,每個語句都是執(zhí)行的時候才翻譯。這樣解釋性語言每執(zhí)行一次就需要逐行翻譯一次,效率比較低

解釋性語言執(zhí)行和編譯語言執(zhí)行的區(qū)別:

  • 解釋性語言一行一行的解析,如果有錯誤,就不會執(zhí)行,直接執(zhí)行下一行。
  • 編譯語言,只要有錯,就不能編譯,一行都不能執(zhí)行。

腳本語言

屬于解析語言,必須通過解釋器解析,將其一條條的翻譯成機器可識別的指令,并按程序順序執(zhí)行。

  • python:腳本語言,適合網(wǎng)絡(luò)應(yīng)用程序的開發(fā),有利于開發(fā)效率,現(xiàn)在顯得越來越強大。
  • PHP:服務(wù)器端腳本語言,適合做動態(tài)網(wǎng)站。
  • JS:作為客戶端的腳本語言,在瀏覽中解釋執(zhí)行。
  • shell:操作系統(tǒng)腳本語言,一般指Unix/Linux中使用的命令行。
  • 編譯語言,執(zhí)行文件是二進制。腳本語言是解釋執(zhí)行的,執(zhí)行文件是文本。

shell解釋器

shell是一個命令行解釋器,相當于windows的cmd,處于內(nèi)核和用戶之間,負責把用戶的指令傳遞給內(nèi)核并且把執(zhí)行結(jié)果回顯給用戶。

  • 默認Unix都有shell,OS基于Unix,因此OS自帶shell。

bash

bash是一種shell解釋器版本,shell有很多種版本,就像人,也分不同國家的人。

  • 牛程序員看到不爽的Shell解釋器,就會自己重新寫一套,慢慢形成了一些標準,常用的Shell解釋器有這么幾種,sh、bash、csh等

shell

通常我們說的shell,指的是shell腳本語言,而不是shell解釋器。

  • 在編寫shell時,第一行一定要指明系統(tǒng)需要哪種shell解釋器解釋你的shell腳本,如:#! /bin/bash,使用bash解析腳本語言。
  • 什么時候使用shell命令,比如有些系統(tǒng)命令經(jīng)常需要用到,可以把命令封裝到一個腳本文件,以后就不用再敲一遍了,直接執(zhí)行腳本語言。
  • 比如ijkplayer,就用腳本文件下載ffmpeg,因為下載ffmpeg需要執(zhí)行很多命令,全部封裝到腳本文件中。
  • 在導入一些第三方框架的時候,經(jīng)常需要用到一些命令,所以一般都會封裝到一個腳本文件中,以后只要執(zhí)行腳本,就會自動執(zhí)行集成第三方框架的命令。

sh:sheel腳本文件后綴名

二、下載ijkPlayer

1、去到B站的github主頁,找到ijkplayer項目,下載源碼 ijkplayer下載地址;

2、打開Demo,查看用法,一般學習第三方庫,都是先查看Demo。

4

三、編譯ijkPlayer的步驟

1、找到ijkPlayerMediaDemo并運行

  • 提示’libavformat/avformat.h’ file not found

5

bug1

原因:libavformat是ffmpeg中的庫,而ijkplayer是基于ffmpeg這個庫的,因此需要導入ffmpeg。

解決:查看ijkplayer的README.md,一般都會有說明。

6

執(zhí)行腳本

init-ios.sh腳本的作用:下載ffmpeg源碼

如何執(zhí)行init-ios.sh腳本文件

  • 步驟一:找到init-ios.sh腳本文件

7

找到init-ios.sh文件

  • 步驟二:打開終端,cd進入到ijkplayer-master的目錄中

8

進入init-ios.sh目錄

  • 注意是 cd 這個文件夾

9

cd ijkplayer-master

  • 步驟三:輸入./init-ios.sh,就會執(zhí)行當前腳本了。

000

執(zhí)行init-ios.sh

  • 執(zhí)行完腳本后,就會發(fā)現(xiàn)ijkplayer中有ffmpeg了

10

執(zhí)行腳本后

2、下載好ffmpeg源碼后,再次運行Demo

  • 發(fā)現(xiàn)還是報’libavformat/avformat.h’ file not found錯誤

原因:執(zhí)行init-ios.sh,僅僅是下載源碼,但是源碼并沒有參與編譯,需要把源碼編譯成.a文件

  • Demo依賴于IJKMediaPlayer庫

11

Demo源碼

  • 打開 IJKMediaPlayer庫,查看下源碼

12

IJKMediaPlayer工程位置

  • 打開 IJKMediaPlayer庫

    13
    IJKMediaPlayer源碼

  • 右擊,發(fā)現(xiàn)FFMPEG中的庫都是紅的,表示不存在14

解決:查看ijkplayer的README.md

15
編譯ffmpeg

編譯ffmpeg庫

  • 步驟一:進入到腳本文件的目錄下16cd ios
  • 步驟二:執(zhí)行./compile-ffmpeg.sh clean

步驟二功能:刪除一些文件和文件夾,為編譯ffmpeg.sh做準備,在編譯ffmpeg.sh的時候,會自動創(chuàng)建剛剛刪除的那些文件,為避免文件名沖突,因此在編譯ffmpeg.sh之前先刪除等會會自動創(chuàng)建的文件夾或者文件

17

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

18

執(zhí)行compile-ffmpeg.sh all前

19

編譯前

執(zhí)行compile-ffmpeg.sh all后

20

編譯后

3.再次運行Demo,就能成功了,因為IJKMediaPlayer庫獲取到ffmpeg庫了

  • 編譯完ffmpeg后,IJKMediaPlayer庫中顯示21成功獲取到ffmpeg庫
  • cmd+r,Demo運行成功

22

Demo運行成功

四、如何集成到ijkplayer到自己的項目中

  • 注意:ijkplayer的README中的方法比較麻煩,不方便攜帶,不推薦。

23

1.推薦自己把IJKMediaPlayer打包成靜態(tài)庫,在導入到自己的項目中

  • 如何打包,請參考,iOS中集成ijkplayer視頻直播框架,寫的非常不錯,就不一一詳細介紹了,但是只有發(fā)布版本的庫。
  • 我自己打包了ijkplayer兩個版本庫,分別用于調(diào)試和發(fā)布(DEBUG和Release),點擊下載
  • 由于文件太大上傳不了GitHUb,就上傳到百度云了

2.直接把ijkplayer庫拖入到自己的工程中

  • 調(diào)試的話,拖入調(diào)試版本的ijkplayer庫,發(fā)布的話,拖入發(fā)布版本的ijkplayer庫。

24

3.導入ijkplayer依賴的庫,具體可以查看ijkplayer的README

25

26

五、使用ijkplayer直播

1.ijkplayer用法簡介

  • ijkplayer用法比較簡單,其實只要有直播地址,就能直播了;
  • 注意:最好真機測試,模擬器測試比較卡,不流暢,真機就沒有問題了。

2.抓取數(shù)據(jù)

抓了很多直播app的數(shù)據(jù),發(fā)現(xiàn)映客主播的質(zhì)量是最高的。

映客主播url:http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1

  • uid=賬號ID,這里是我的賬號ID
  • interest=興趣 ,1表示只查看女生。
  • 上下拉刷新的接口沒抓到,就一下加載200條數(shù)據(jù)。

111

3.獲取拉流url,直播

  • IJKFFMoviePlayerController:用來做直播的類

微博桌面截圖_20160906143327

4.結(jié)束播放

  • 界面不播放,一定要記得結(jié)束播放,否則會報內(nèi)存溢出

28

內(nèi)存bug

333

結(jié)束語

后續(xù)還會更新更多有關(guān)直播的資料,希望做到教會每一個朋友從零開始做一款直播app,并且Demo也會慢慢完善。Demo點擊下載。

  • 由于FFMPEG庫比較大,大概100M。
  • 本來想自己上傳所有代碼了,上傳了1個小時,還沒成功,就放棄了。
  • 提供另外一種方案,需要你們自己導入IJKPlayer庫

具體步驟:

  • 下載Demo后,打開YZLiveApp.xcworkspace問題

29

打開YZLiveApp.xcworkspace問題。

  • pod install就能解決

444

  • 下載jkplayer庫,點擊下載
  • 把jkplayer直接拖入到與Classes同一級目錄下,直接運行程序,就能成功了

30

拖入ijkplayer到與Classes同一級目錄下。

  • 注意:不需要打開工程,把jkplayer拖入到工程中,而是直接把jkplayer庫拷貝到與Classes同一級目錄下就可以了。
  • 錯誤示范:不要向下面這樣操作

31

 

作者:崢吖,如果喜歡我的文章,可以關(guān)注我微博:袁崢Seemygo,也可以來袁崢Seemygo,了解下我們的iOS培訓課程。后續(xù)還會更新更多內(nèi)容,有任何問題,歡迎留言崢吖。

來源:http://www.jianshu.com/p/7b2f1df74420

本文由 @崢吖 授權(quán)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!