Stories

Detail Return Return

FFmpeg開發筆記(八十二)使用國產直播服務器smart_rtmpd執行推流操作 - Stories Detail

​《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2.2  FFmpeg向網絡推流”介紹了輕量級流媒體服務器MediaMTX,通過該工具可以測試RTSP/RTMP等流媒體協議的推拉流。不過MediaMTX的功能比較簡單,也不方便個性化定製,如今出現了國產的直播服務器smart_rtpmd,更適合日常開發調試使用。

smart_rtpmd是一款用於直播且錄播性能卓越的流媒體服務器,相當於nginx+rtmp,或者是簡化版的SRS和ZLMediaKit。smart_rtpmd開源且跨平台,支持Windows、Linux(含Ubuntu、CentOS等)、FreeBSD、ARM64等操作系統。smart_rtpmd支持的視頻格式包括H.264、H.265、VP8等,支持的音頻格式包括AAC、OPUS等。
smart_rtpmd的源碼託管地址為 https://github.com/superconvert/smart_rtmpd (星星數0.6k),國內的鏡像地址為 https://gitee.com/superconvert/smart_rtmpd ,最新版本是2025年3月發佈的smart_rtpmd_v2025.03.10,可見該框架的源碼更新十分及時。
smart_rtpmd不依賴其他第三方庫,下載後的壓縮包文件解壓即可運行。以Windows系統的smart_rtpmd程序為例,它的解壓步驟説明如下:
1、下載smart_rtpmd的源碼得到壓縮包smart-rtmpd-master.zip。
2、解壓smart-rtmpd-master.zip包,找到smart-rtmpd-master目錄下的壓縮包rtmpd.zip。
3、解壓rtmpd.zip包,找到rtmpd目錄下的壓縮包smart-rtmpd-win.zip。
4、解壓smart-rtmpd-win.zip包,得到smart_rtmpd_win目錄,,裏面的smart_rtmpd.exe便是可運行於Windows系統的smart_rtpmd服務器程序。
雙擊smart_rtmpd.exe彈出smart_rtpmd管理界面,單擊右下角的啓動按鈕如下圖所示,即可開啓smart_rtpmd的直播推流服務。

由日誌可見,smart_rtpmd開啓了下列五項流媒體服務:
1、偵聽1935端口的RTMP服務,對應的流媒體播放地址是 rtmp://127.0.0.1:1935/live/stream ;
2、偵聽8554端口的RTSP服務,對應的流媒體播放地址是 rtsp://127.0.0.1:8554/live/stream ;
3、偵聽8080端口的HTTP(HLS)服務,對應的流媒體播放地址是 http://127.0.0.1:8080/live/stream.m3u8
4、偵聽8888端口的TURN.TCP(WebRTC)服務;
5、偵聽9000端口的SRT服務;
接下來驗證smart_rtpmd的實際推拉流情況。打開MSYS窗口,進入《FFmpeg開發實戰:從零基礎到短視頻上線》一書第十章的源碼目錄,執行下面的編譯命令。

gcc pushvideo.c -o pushvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

編譯完成後執行以下命令啓動測試程序,期望把2018.mp4推給smart_rtpmd的RTSP推流地址 rtsp://127.0.0.1:8554/live/stream 。

./pushvideo ../file/2018.mp4 rtsp://127.0.0.1:8554/live/stream

打開另一個MSYS窗口,同樣進入《FFmpeg開發實戰:從零基礎到短視頻上線》一書第十章的源碼目錄,執行下面的編譯命令。

gcc pullvideo.c -o pullvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -I/usr/local/sdl2/include -L/usr/local/sdl2/lib -lsdl2 -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

編譯完成後執行以下命令啓動測試程序,期望從 rtsp://127.0.0.1:8554/live/stream 拉取視頻流並彈窗播放。

./pullvideo rtsp://127.0.0.1:8554/live/stream

然後果真彈出一個SDL窗口,正在播放從RTSP服務拉取的視頻畫面如下圖所示,説明smart_rtpmd正確實現了RTSP協議的流媒體轉發功能。

如果改成RTMP協議實現推拉流的話,需要把推流命令改成下面這樣,表示向RTMP地址推流:

./pushvideo ../file/2018.mp4 rtmp://127.0.0.1:1935/live/stream

注意pushvideo.c的代碼需要按照前一篇文章《FFmpeg代碼對RTSP和RTMP的推流區別》的説明加以修改,才能支持RTMP協議的視頻推流。
對應的拉流命令要改成下面這樣,表示從RTMP地址拉流:

./pullvideo rtmp://127.0.0.1:1935/live/stream

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。

user avatar damenge Avatar jimru Avatar openeuler Avatar
Favorites 3 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.