如何快速的開發一個完整的iOS直播app(播放篇)
作者:袁崢
連結:https://www.jianshu.com/p/7b2f1df74420
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
開發一款直播app,整合ijkplayer成功後,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦
本篇主要講解的是直播app中,需要用到的一個很重要的開源框架ijkplayer
,然後整合這個框架可能對大多數初學者
還是比較有難度的,所以本篇主要教你解決整合【ijkplayer】遇見的各種坑
。
很多文章,可能講解的是如何做,我比較注重講解為什麼
這樣做,大家有什麼不明白,還可以多多提出來
。
一、基本知識
README.md檔案
編譯語言
:程式在被執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,執行時不需要翻譯,所以編譯型語言的程式執行效率高,比如OC,C,C++
解釋性語言
:解釋性語言的程式不需要編譯,在執行程式的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就需要逐行翻譯一次,效率比較低
解釋性語言執行和編譯語言執行的區別
:
- 解釋性語言一行一行的解析,如果有錯誤,就不會執行,直接執行下一行。
- 編譯語言,只要有錯,就不能編譯,一行都不能執行。
指令碼語言
:屬於解析語言,必須通過直譯器解析,將其一條條的翻譯成機器可識別的指令,並按程式順序執行。
- python:指令碼語言,適合網路應用程式的開發,有利於開發效率,現在顯得越來越強大
- PHP:伺服器端指令碼語言,適合做動態網站
- JS:作為客戶端的指令碼語言,在瀏覽中解釋執行,
- shell:作業系統指令碼語言,一般指Unix/Linux中使用的命令列
- 編譯語言,執行檔案是二進位制。指令碼語言是解釋執行的,執行檔案是文字
shell直譯器
:shell是一個命令列直譯器,相當於windows的cmd,處於核心和使用者之間,負責把使用者的指令傳遞給核心並且把執行結果回顯給使用者.
- 預設Unix都有shell,OS基於Unix,因此OS自帶shell。
bash
: bash是一種shell直譯器版本,shell有很多種版本,就像人,也分不同國家的人。
- 牛程式設計師看到不爽的Shell直譯器,就會自己重新寫一套,慢慢形成了一些標準,常用的Shell直譯器有這麼幾種,sh、bash、csh等
shell
:通常我們說的shell,指的是shell指令碼語言,而不是shell直譯器。
- 在編寫shell時,第一行一定要指明系統需要哪種shell直譯器解釋你的shell指令碼,如:#! /bin/bash,使用bash解析指令碼語言
-
什麼時候使用shell命令
,比如有些系統命令經常需要用到,可以把命令封裝到一個指令碼檔案,以後就不用再敲一遍了,直接執行指令碼語言。 - 比如ijkplayer,就用指令碼檔案下載ffmpeg,因為下載ffmpeg需要執行很多命令,全部封裝到指令碼檔案中。
- 在匯入一些第三方框架的時候,經常需要用到一些命令,所以一般都會封裝到一個指令碼檔案中,以後只要執行指令碼,就會自動執行整合第三方框架的命令。
sh
:sheel指令碼檔案字尾名
二、下載ijkPlayer
- 去到B站得github主頁,找到ijkplayer專案,下載原始碼 ijkplayer下載地址
- 開啟Demo,檢視用法,
一般學習第三方庫,都是先檢視Demo
三、編譯ijkPlayer的步驟
1、找到ijkPlayerMediaDemo並執行
- 提示
'libavformat/avformat.h' file not found
原因
:因為libavformat是ffmpeg中的庫,而ijkplayer是基於ffmpeg這個庫的,因此需要匯入ffmpeg
解決
:檢視ijkplayer的README.md,一般都會有說明。
init-ios.sh
指令碼的作用:下載ffmpeg原始碼
- 想了解指令碼具體怎麼做的,可以檢視之前寫的文章帶你走進指令碼世界,ijkplayer之【init-ios.sh】指令碼分析,全面剖析了
init-ios.sh
這個指令碼做了哪些事情。
如何執行init-ios.sh
指令碼檔案
-
步驟一:
找到init-ios.sh指令碼檔案
-
步驟二:
開啟終端,cd進入到ijkplayer-master的目錄中
- 注意是 cd 這個資料夾
-
步驟三:
輸入./init-ios.sh,就會執行當前指令碼了。
- 執行完指令碼後,就會發現ijkplayer中有
ffmpeg
了
2、下載好ffmpeg原始碼後,再次執行Demo
- 發現還是報
'libavformat/avformat.h' file not found
錯誤 -
原因
:執行init-ios.sh,僅僅是下載原始碼
,但是原始碼並沒有參與編譯,需要把原始碼編譯成.a檔案- Demo依賴於IJKMediaPlayer庫
- 開啟 IJKMediaPlayer庫,檢視下原始碼