抽空給以前作的開源項目【高仿微信】添加直播功能,因爲時間有限,作得不是很完美,有空再去完善吧,能用就好~~ios
在此提供存放於百度雲的完整項目【高仿微信】- 百度雲 但願各位能在個人GitHub上獻出一個寶貴的Star 【高仿微信】- GitHub 謝謝nginx
注意:直播功能的使用(對方須要先進入到對應的聊天界面)git
兩個測試帳號: lxf lqr 密碼都是123456github
首先第一件事固然就是搭建一個推流服務器,這裏請跳轉參考我以前寫好的文章吧【Ubuntu 安裝nginx 來搭建推流服務器】,這裏個人服務器的ip地址是:192.168.123.191shell
APP上推流我使用的是第三方的庫 LFLiveKit,這個第三方庫已經幫咱們處理了不少事情,並且還包括美顏~~。固然,有時間咱們仍是要去了解一下底層的東西,這裏就先不贅述,過幾天抽空再作總結。swift
關鍵代碼以下服務器
// 初始化配置
let audioConfiguration = LFLiveAudioConfiguration.default()
let videoConfiguration = LFLiveVideoConfiguration.defaultConfiguration(for: .low2, outputImageOrientation: .portrait)
// 初始化session
let session = LFLiveSession(audioConfiguration: audioConfiguration, videoConfiguration: videoConfiguration)
// 設置代理
// session?.delegate = self
// 設置展現的View
session?.preView = self.view
複製代碼
let stream = LFLiveStreamInfo()
stream.url = "rtmp://192.168.123.191:1935/rtmplive/lxf"; // 服務器地址
session.startLive(stream)
// 開始推流
session.running = true
複製代碼
這裏我使用的是B站的開源庫 ijkplayer微信
爲了方即可以用這個 編譯好的B站開源庫session
須要注意的是:IJKPlayer默認使用的是軟解碼(FFMpeng),若是須要使用硬解碼須要咱們進行相應的設置iphone
// 設置"videotoolbox"的值爲0爲軟解碼(默認),設置爲1則是硬解碼
let options = IJKFFOptions.byDefault()
options?.setOptionIntValue(1, forKey: "videotoolbox", of: kIJKFFOptionCategoryPlayer)
let ijkPlayer = IJKFFMoviePlayerController(contentURLString: "rtmp://192.168.123.191:1935/rtmplive/lxf", with: options)
// 需保存起來
self.ijkPlayer = ijkPlayer
ijkPlayer?.view.frame = view.bounds
view.addSubview(ijkPlayer!.view)
// 準備播放,當視頻準備好的時候會自動進行播放
ijkPlayer?.prepareToPlay()
複製代碼
從B站的gitHub上下載的 ijkplayer 須要手動編譯出來,跟着說明走就能夠了,這裏就不贅述咯,接下來咱們將它打包,方便使用
若是你不跟着說明走的話會提示找不到 avformat.h 這個頭文件
這時你須要在終端cd到ijkplayer這個目錄,而後執行 init-ios.sh文件,如圖
而後通過一段漫長的時間以後,在ios目錄下就多出了這些ffmpeg相關的目錄
這個操做是在下載ffmpeg源碼,然缺失的avformat.h就在裏面
打開項目 IJKMediaPlayer
設置爲 release,這樣打出來的包會小些
選擇真機和模擬器,各Command+B編譯一次
右擊,Show in Finder
如圖,就有兩個文件夾,裏面存放着的就是咱們編譯出來的庫
可使用以下命令查看信息
lipo -info IJKMediaFramework
複製代碼
好,如今對編譯出來的包進行合併,這樣就即支持真機,也支持模擬器
// 格式
// lipo -create path1 path2 -output frameName
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
複製代碼
將合併出來的IJKMediaFramework替換 IJKMediaFramework.framework中的IJKMediaFramework,最後將替換好的 IJKMediaFramework.framework 拖入到項目中使用便可。
最後,附上編譯好的IJKMediaFramework
連接:pan.baidu.com/s/1eRYlJ7W 密碼:9iaw