macOS編譯金山云ksvc ffmpeg,在rtmp flv之上支持hevc h265

寫在前面

FFmpeg社區(qū)曾經(jīng)有過一次針對RTMP擴展HEVC的討論,最終達成的結(jié)論是如果Adobe擴展了RTMP,那么FFmpeg才可以接受HEVC擴展。現(xiàn)狀是Adobe更新RTMP協(xié)議遙遙無期。

為推進HEVC視頻編碼格式在直播方案中的落地,經(jīng)過CDN聯(lián)盟討論,并和主流云服務(wù)廠商達成一致,規(guī)范了HEVC在RTMP/FLV中的擴展...

以上內(nèi)容摘自金山視頻云的文章《FFmpeg代碼導讀系列(一,下半部)----HEVC在RTMP中的擴展

金山云在ffmpeg的源碼基礎(chǔ)上增加了rtmp h265的支持,并且在github上開源

所謂工欲善其事,必先利其器。第一步,我們先編譯代碼,得到可以推拉rtmp h265流的ffmpeg,以及可以播放rtmp h265的ffplay。以便后續(xù)學習rtmp h265的協(xié)議知識。

本來,金山云ffmpeg的git wiki頁《H.265 RTMP推流使用指南》上已經(jīng)有編譯的說明,但是我實際操作時遇到了一些問題,所以寫了這篇文章。

另外,我之前還寫了幾篇和ffmpeg編譯相關(guān)的文章(如果你在編譯時遇到問題,也可以看看):

正文

我的實驗環(huán)境是macOS Catalina 10.15.1

下載ksvc版本的ffmpeg,并切換到對應(yīng)的3.4版本release分支:

$git clone https://github.com/ksvc/FFmpeg.git
$cd FFmpeg
$git reset --hard origin/release/3.4

編譯:

./configure --enable-static --enable-pic \
        --disable-encoders --enable-encoder=aac --enable-encoder=libx264 --enable-gpl --enable-libx264 --enable-encoder=libx265  --enable-libx265 \
        --disable-decoders --enable-decoder=aac --enable-decoder=h264 --enable-decoder=hevc  \
        --disable-demuxers --enable-demuxer=aac --enable-demuxer=mov --enable-demuxer=mpegts --enable-demuxer=flv --enable-demuxer=h264 --enable-demuxer=hevc --enable-demuxer=hls  \
        --disable-muxers --enable-muxer=h264  --enable-muxer=flv --enable-muxer=f4v  --enable-muxer=mp4 \
        --disable-doc --extra-cflags="-fno-stack-check"

報錯:

ERROR: x265 not found using pkg-config

原因是缺少libx265庫,我們先下載并編譯libx265:

x265的所有版本下載列表: https://bitbucket.org/multicoreware/x265/downloads/

我們選當前的次新版本x265_3.2.1,開始編譯安裝:

$wget https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.1.tar.gz
$tar zxvf x265_3.2.1.tar.gz
$cd x265_3.2.1/build/linux
$./make-Makefiles.bash
$make && make install

回到ffmpeg目錄,按上面的參數(shù)繼續(xù)執(zhí)行./configure

然后編譯:

$make -j8

報錯:

libavcodec/libx264.c:282:9: error: use of undeclared identifier 'x264_bit_depth'
    if (x264_bit_depth > 8)
        ^
libavcodec/libx264.c:892:9: error: use of undeclared identifier 'x264_bit_depth'
    if (x264_bit_depth == 8)
        ^
libavcodec/libx264.c:894:14: error: use of undeclared identifier 'x264_bit_depth'
    else if (x264_bit_depth == 9)
             ^
libavcodec/libx264.c:896:14: error: use of undeclared identifier 'x264_bit_depth'
    else if (x264_bit_depth == 10)

意思是找不到x264_bit_depth的定義,看名字明顯是和x264相關(guān)的,打開本地的/usr/local/include/x264_config.h文件,可以看到:

#define X264_BIT_DEPTH     0
#define X264_POINTVER "0.155.x"

說明x264的頭文件中是大寫的X264_BIT_DEPTH,所以我就把libavcodec/libx264.c中的x264_bit_depth全部替換成了大寫的X264_BIT_DEPTH。

繼續(xù)make -j8編譯,成功得到ffmpeg和ffplay等可執(zhí)行文件。

之后,我們就可以嘗試推拉h(huán)265的流了。

#推流
$./ffmpeg -re -i ~/video/mp4/oceans.mp4 -c:a copy -c:v libx265 -f flv rtmp://your_rtmp_server/live/h265

#拉流
$./ffplay rtmp://your_rtmp_server/live/h265

這里需要注意的是,推拉流成功的前提是,你的rtmp服務(wù)器支持h265。

好,本篇文章到此結(jié)束。后面我會給我的開源Go流媒體服務(wù)器lal添加rtmp h265的支持,并提供可執(zhí)行文件供大家直接使用,有興趣的可以在github上關(guān)注一波,github地址: https://github.com/q191201771/lal

20200418補充,lal服務(wù)器已經(jīng)支持h265了,歡迎使用lal和ffmpeg、ffplay進行h265測試。

本文完,作者yoko,尊重勞動人民成果,轉(zhuǎn)載請注明原文出處: https://pengrl.com/p/20044/

本篇文章由一文多發(fā)平臺ArtiPub自動發(fā)布

?著作權(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ù)。

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