iOS 給高仿微信添加直播聊天功能

抽空給以前作的開源項目【高仿微信】添加直播功能,因爲時間有限,作得不是很完美,有空再去完善吧,能用就好~~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()
複製代碼

將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

如圖,就有兩個文件夾,裏面存放着的就是咱們編譯出來的庫

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

連接:pan.baidu.com/s/1eRYlJ7W 密碼:9iaw

微信公衆號
相關文章
相關標籤/搜索