最簡單的iOS 推流程式碼,視訊捕獲,軟編碼(faac,x264),硬編碼(aac,h264),美顏,flv編碼,rtmp協議,陸續更新程式碼解析,你想學的知識這裡都有,願意懂直播技術的同學快來看!!
原始碼:https://github.com/hardman/AWLive
介紹
最近在做iOS直播,研究了相關直播技術,主要包含兩方面:推流,播放。
因為之前使用cocos2dx做過一個視訊遊戲(戀愛公寓),用ffmpeg+sdl+cocos2dx實現過視訊播放器。
遊戲中的視訊是hevc(h265)+aac合成mp4檔案,使用aes加密。視訊播放的時候,需要使用ffmpeg中的crypt模組進行aes解密後播放視訊,解析出來的yuv圖片資料直接送給OpenGL顯示。
所以這次主要研究推流技術。並將程式碼開源。
其實直播技術中不論播放還是推流,更多的應該算是技術整合,就是將前人做好的協議和實現,整合成我們自己想要的功能。
而這次做這個專案也並不是做了什麼技術創新,github裡面已經有著很多直播原始碼,可能比我寫的更好更完整。而我的程式碼,特點就是簡單直接,直奔主題。
我會在我的部落格裡做一些簡單的解析,目的是希望讓更多的人瞭解直播技術,能夠了解直播內部的一些簡單的原理,不再知其然不知其所以然。
功能範圍
- 視訊捕獲:系統方法捕獲,GPUImage捕獲,CMSampleRef解析
- 美顏濾鏡:GPUImage,
- 視訊變換:libyuv
- 軟編碼:faac,x264
- 硬編碼:VideoToolbox(aac/h264)
- libaw:C語言函式庫
- flv協議及編碼
- 推流協議:librtmp,rtmp重連,rtmp各種狀態回撥
程式碼使用及注意
程式碼使用方法見Demo。後續會根據上述功能的每一點對原始碼進行解析。
如果有什麼疑問或者問題,請評論指出。希望能夠給願意瞭解直播技術的人丟擲一塊好磚。
注1:專案中所有相關的檔名,類名,全域性變數,全域性方法都會加AW/aw作為字首。
注2:專案中關鍵程式碼都使用c語言編寫,理論上可以很容易地移植到android中。
文章列表
- 1小時學會:最簡單的iOS直播推流(一)專案介紹
- 1小時學會:最簡單的iOS直播推流(二)程式碼架構概述
- 1小時學會:最簡單的iOS直播推流(三)使用系統介面捕獲音視訊
- 1小時學會:最簡單的iOS直播推流(四)如何使用GPUImage,如何美顏
- 1小時學會:最簡單的iOS直播推流(五)yuv、pcm資料的介紹和獲取
- 1小時學會:最簡單的iOS直播推流(六)h264、aac、flv介紹
- 1小時學會:最簡單的iOS直播推流(七)h264/aac 硬編碼
- 1小時學會:最簡單的iOS直播推流(八)h264/aac 軟編碼
- 1小時學會:最簡單的iOS直播推流(九)flv 編碼與音視訊時間戳同步
- 1小時學會:最簡單的iOS直播推流(十)librtmp使用介紹
- 1小時學會:最簡單的iOS直播推流(十一)sps&pps和AudioSpecificConfig介紹(完結)