抽空給之前做的開源專案【高仿微信】新增直播功能,由於時間有限,做得不是很完美,有空再去完善吧,能用就好~~
在此提供存放於百度雲的完整專案【高仿微信】- 百度雲 希望各位能在我的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 這個標頭檔案
這時你需要在終端cd到ijkplayer這個目錄,然後執行 init-ios.sh檔案,如圖
然後經過一段漫長的時間之後,在ios目錄下就多出了這些ffmpeg相關的目錄
這個操作是在下載ffmpeg原始碼,然缺失的avformat.h就在裡面
開啟專案 IJKMediaPlayer
設定為 release,這樣打出來的包會小些
選擇真機和模擬器,各Command+B編譯一次
右擊,Show in Finder
如圖,就有兩個資料夾,裡面存放著的就是我們編譯出來的庫
可以使用如下命令檢視資訊
lipo -info IJKMediaFramework
複製程式碼
預設模擬器編譯出來的包是不支援i386,如果希望支援的話
進入專案的 Build Settings,將 Build Active Architecture Only 設定為NO
好,現在對編譯出來的包進行合併,這樣就即支援真機,也支援模擬器
// 格式
// 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