1小時學會:最簡單的iOS直播推流(一)介紹

hard_man發表於2018-01-12

最簡單的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. 1小時學會:最簡單的iOS直播推流(一)專案介紹
  2. 1小時學會:最簡單的iOS直播推流(二)程式碼架構概述
  3. 1小時學會:最簡單的iOS直播推流(三)使用系統介面捕獲音視訊
  4. 1小時學會:最簡單的iOS直播推流(四)如何使用GPUImage,如何美顏
  5. 1小時學會:最簡單的iOS直播推流(五)yuv、pcm資料的介紹和獲取
  6. 1小時學會:最簡單的iOS直播推流(六)h264、aac、flv介紹
  7. 1小時學會:最簡單的iOS直播推流(七)h264/aac 硬編碼
  8. 1小時學會:最簡單的iOS直播推流(八)h264/aac 軟編碼
  9. 1小時學會:最簡單的iOS直播推流(九)flv 編碼與音視訊時間戳同步
  10. 1小時學會:最簡單的iOS直播推流(十)librtmp使用介紹
  11. 1小時學會:最簡單的iOS直播推流(十一)sps&pps和AudioSpecificConfig介紹(完結)

相關文章