1. 程式人生 > 其它 >如何快速的開發一個完整的iOS直播app(播放篇)

如何快速的開發一個完整的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原始碼

如何執行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庫,檢視下原始碼