基于FFMPEG API開發(fā)RTMP推流器

1. 環(huán)境

Win10 + Visual Stdio 2017

2. 材料

Windows版本的FFMPEG庫

下載地址:https://ffmpeg.zeranoe.com/builds/

如圖1所示,下載Windows64位的4.0.2版本的Shared和Dev版本,Dev包含的是開發(fā)ffmpeg程序所需要的頭文件及鏈接庫,在編譯時會用到;Shared包含的是運行程序時調(diào)用到的ffmpeg的動態(tài)庫,在運行時用到。這兩個都要下載。

圖1

3 開發(fā)環(huán)境配置

  • 創(chuàng)建解決方案

打開Visual Studio 2017,創(chuàng)建一個live的解決方案,如圖2所示,

圖2
  • 創(chuàng)建項目

如圖3,


圖3

項目結(jié)構(gòu)如圖4所示。


圖4
  • 運行

此時點本地Windows調(diào)試器按鍵運行一下,如果彈出的控制臺有打印Hello World, 則項目創(chuàng)建成功。

VS默認(rèn)為Debug環(huán)境為x86配置,我們可以將其手動改為x64平臺。如圖5所示,再次點本地Windows調(diào)試器按鍵運行一下,看是否還會成功打印Hello World,答案當(dāng)然是肯定的啦。

圖5

接下來我們把ffmpeg加入到我們的解決方案中,在我們的live目錄下創(chuàng)建一個ffmpeg的目錄來存放庫及頭文件,還有運行動態(tài)庫。將ffmpeg-4.0.2-win64-dev文件夾下的include和lib,還有ffmpeg-4.0.2-win64-shared文件夾下的bin目錄都復(fù)制到ffmpeg目錄下。

接下來就是把它們配置到我們的live解決方案中

3.1 配置include和lib目錄

右擊項目,屬性 --> C/C++ --> 常規(guī) 添加include目錄 如圖6

圖6

鏈接器-->常規(guī)-->附加庫目錄 添加lib目錄 如圖7


圖7

鏈接器--》輸入--》附加依賴項--》編輯,輸入lib目錄中所有的.lib文件名,如圖8,9所示。

圖8

圖9

運行環(huán)境配置:配置屬性-->高度-->環(huán)境-->輸入path=ffmpeg bin目錄 如圖10所示


圖10

至此,所有的配置完成。

3.2 導(dǎo)入源碼

我們這次的推流工程項目StreamPusher是直接拿雷神的simplest_ffmpeg_streamer的工程來升級的,雷神的simplest_ffmpeg_streamer的github地址為https://github.com/leixiaohua1020/simplest_ffmpeg_streamer, 它這個工程是在2014年10月份寫的,當(dāng)時的ffmpeg版本為2.3.6, https://ffmpeg.org/olddownload.html,如圖11。

圖11

這次我們嘗試著給它升級到4.0.2,看它能不能正常運行。

首先將雷神的simplest_ffmpeg_streamer項目中的simplest_ffmpeg_streamer.cpp復(fù)制到我們的StreamPusher.cpp里,編譯時主要碰到三個問題,

  • 預(yù)編譯頭錯誤

解決方法

  1. 在解決方案資源管理器中,右擊相應(yīng)的.cpp文件,點擊“屬性”
  2. 在左側(cè)配置屬性中,點開“C/C++”,單擊“預(yù)編譯頭”
  3. 更改右側(cè)第一行的“創(chuàng)建/使用預(yù)編譯頭”,把選項從“使用預(yù)編譯頭(/Yu)”改成“不使用預(yù)編譯頭”

如下圖所示

13.png
  • CODEC_FLAG_GLOBAL_HEADER找不到

在4.0.2版本中,它已被替換成AV_CODEC_FLAG_GLOBAL_HEADER。

  • 變量/類被聲明已否決

發(fā)現(xiàn)報非常多的變量/類被聲明已否決,先暫時關(guān)掉SDL試一下,

3.3 驗證

編譯成功后,再搭建一個SRS流媒體服務(wù)器驗證一下(網(wǎng)上有許多博客可參考,比較簡單),推流成功。

如下圖所示:

下一節(jié),我們將打開SDL,通過修改代碼,實現(xiàn)將此工程升級到4.0.3版本。

完整代碼可到我的github下載:
https://github.com/onroadtech/live
branch: master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,063評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,011評論 2 59
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 目錄 I(36)最后的暑假 (37)冬夜飛蛾 高三的日子,全部與高考相關(guān)。一次又一次的測驗,早晨五點多到晚上十點多...
    波米閱讀 1,164評論 11 26
  • 昨晚,回到家時快10點了,時間不算晚,但卻很累。 從前天開始,我又被抽調(diào)進了談判項目組。 我是項目組成員,但在項目...
    安心在奔跑閱讀 2,406評論 3 5

友情鏈接更多精彩內(nèi)容