iOS 給高仿微信新增直播聊天功能

LinXunFeng發表於2017-12-14

抽空給之前做的開源專案【高仿微信】新增直播功能,由於時間有限,做得不是很完美,有空再去完善吧,能用就好~~

在此提供存放於百度雲的完整專案【高仿微信】- 百度雲 希望各位能在我的GitHub上獻出一個寶貴的Star 【高仿微信】- GitHub 謝謝

注意:直播功能的使用(對方需要先進入到對應的聊天介面)

兩個測試賬號: lxf lqr 密碼都是123456

直播聊天

推流

首先第一件事當然就是搭建一個推流伺服器,這裡請跳轉參考我之前寫好的文章吧【Ubuntu 安裝nginx 來搭建推流伺服器】,這裡我的伺服器的ip地址是:192.168.123.191

APP上推流我使用的是第三方的庫 LFLiveKit,這個第三方庫已經幫我們處理了很多事情,而且還包括美顏~~。當然,有時間我們還是要去了解一下底層的東西,這裡就先不贅述,過幾天抽空再做總結。

關鍵程式碼如下

// 初始化配置
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站開源庫

需要注意的是:IJKPlayer預設使用的是軟解碼(FFMpeng),如果需要使用硬解碼需要我們進行相應的設定

// 設定"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()
複製程式碼

將IJKPlayer打包

從B站的gitHub上下載的 ijkplayer 需要手動編譯出來,跟著說明走就可以了,這裡就不贅述咯,接下來我們將它打包,方便使用

如果你不跟著說明走的話會提示找不到 avformat.h 這個標頭檔案

avformat.h

這時你需要在終端cd到ijkplayer這個目錄,然後執行 init-ios.sh檔案,如圖

目錄

init-ios.sh

然後經過一段漫長的時間之後,在ios目錄下就多出了這些ffmpeg相關的目錄

ffmpeg相關目錄

這個操作是在下載ffmpeg原始碼,然缺失的avformat.h就在裡面

avformat.h

開啟專案 IJKMediaPlayer

開啟專案

設定為 release,這樣打出來的包會小些

Edit Scheme

release

選擇真機和模擬器,各Command+B編譯一次

真機
模擬器

右擊,Show in Finder

iOS   給高仿微信新增直播聊天功能

如圖,就有兩個資料夾,裡面存放著的就是我們編譯出來的庫

Paste_Image.png

可以使用如下命令檢視資訊

lipo -info IJKMediaFramework
複製程式碼

檢視所支援的處理器
預設模擬器編譯出來的包是不支援i386,如果希望支援的話 進入專案的 Build Settings,將 Build Active Architecture Only 設定為NO
Build Active Architecture Only

好,現在對編譯出來的包進行合併,這樣就即支援真機,也支援模擬器

// 格式
// 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 連結:https://pan.baidu.com/s/1eRYlJ7W 密碼:9iaw

相關文章