一直在忙, 也沒寫過幾次播客! 但一直熱衷于直播開發(fā)技術(shù), 公司又不是直播方向的, 所以就年前忙里偷襲研究了一下直播開發(fā), 然后翻閱了很多大神的技術(shù)博客等, 寫了一個簡單的Demo, 又根據(jù)網(wǎng)上大神們的技術(shù)博客搭建了簡易的本地RTMP服務器! 由于時間問題, 沒來記得來記錄下來, 目前demo 只完成了直播音視頻采集, 轉(zhuǎn)碼, RTMP協(xié)議推流, 和本地RTMP簡易服務器 推流這一環(huán)節(jié), 拉流還沒來得及寫, RTMP流的播放用的是VLC, 來實現(xiàn)視頻流的播放的!
網(wǎng)上有各種大牛寫的播客, 都很好的, 但我寫這篇播客的目的就是, 想記錄一下當時的思路, 還有分享出來, 讓各位大神指點一下不足之處, 來完善這個小項目! 表達一下我對直播開發(fā)的熱愛哈哈...如果有幸能給大家?guī)托┟? 我倍感榮幸!
好, 廢話不多說, 接下來我們直接開始!
代碼鏈接: Github: https://github.com/jessonliu/JFLivePlaye
技術(shù)部分------ ??
腦涂: ![ 直播思維導圖.png ]
視頻直播的大概流程就上腦涂上所畫的, 還有一些沒列出來, 比如, 聊天, 送禮, 踢出, 禁言, 等等一系列功能, 但本文只是針對視頻直播的簡單實現(xiàn)!
下邊來說一下以下的幾個點和使用到的類(后邊會附上demo, 里邊還有詳細的備注)
1. 音視頻采集
音視頻采集, 網(wǎng)上也有很多大神些的技術(shù)博客, demo 等, 我這里邊只針對iOS 原聲的來介紹以下
利用AVFoundation框架, 進行音視頻采集
AVCaptureSession // 音視頻錄制期間管理者
AVCaptureDevice // 設備管理者, (用來操作所閃光燈, 聚焦, 攝像頭切換等)
AVCaptureDeviceInput // 音視頻輸入數(shù)據(jù)的管理對象
AVCaptureVideoDataOutput // 視頻輸出數(shù)據(jù)的管理者
AVCaptureAudioDataOutput // 音頻輸出數(shù)據(jù)的管理者
AVCaptureVideoPreviewLayer // 用來展示視頻的圖像
注意, 必須要設置音視頻輸出對象的代理方法, 然后在代理方法中獲取sampleBuffer, 然后判斷captureOutput是音頻還是視頻, 來進行音視頻數(shù)據(jù)相應的編碼
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
}
也可以利用GPUImageVideoCamera 來進行視頻數(shù)據(jù)的采集獲取, 可以利用GPUImage 進行美顏, 添加水印, 人臉識別等
2.流媒體
流媒體是指采用流式傳輸?shù)姆绞皆诰W(wǎng)上播放的媒體格式, 是邊傳邊播的媒體,是多媒體的一種!
然后就是大家需要了解的幾個關(guān)鍵詞
幀:視頻是由很多連續(xù)圖像組成, 每一幀就代表一幅靜止的圖像
GOP:(Group of Pictures)畫面組,一個GOP就是一組連續(xù)的畫面,每個畫面都是一幀,GOP就是很多幀的集合!
幀的