内容简介:FFmpeg社区曾经有过一次针对RTMP扩展HEVC的讨论,最终达成的结论是如果Adobe扩展了RTMP,那么FFmpeg才可以接受HEVC扩展。现状是Adobe更新RTMP协议遥遥无期。为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展…以上内容摘自金山视频云的文章《
FFmpeg社区曾经有过一次针对RTMP扩展HEVC的讨论,最终达成的结论是如果Adobe扩展了RTMP,那么FFmpeg才可以接受HEVC扩展。现状是Adobe更新RTMP协议遥遥无期。
为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展…
以上内容摘自金山视频云的文章《 FFmpeg代码导读系列(一,下半部)—-HEVC在RTMP中的扩展 》
金山云在ffmpeg的源码基础上增加了rtmp h265的支持,并且在 github上开源 。
所谓工欲善其事,必先利其器。第一步,我们先编译代码,得到可以推拉rtmp h265流的ffmpeg,以及可以播放rtmp h265的ffplay。以便后续学习rtmp h265的协议知识。
本来,金山云ffmpeg的git wiki页《 H.265 RTMP推流使用指南 》上已经有编译的说明,但是我实际操作时遇到了一些问题,所以写了这篇文章。
另外,我之前还写了几篇和ffmpeg编译相关的文章(如果你在编译时遇到问题,也可以看看):
正文
我的实验环境是 macOS Catalina 10.15.1
下载ksvc版本的ffmpeg,并切换到对应的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目录,按上面的参数继续执行 ./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相关的,打开本地的 /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 。
继续 make -j8 编译,成功得到ffmpeg和ffplay等可执行文件。
之后,我们就可以尝试推拉h265的流了。
#推流 $./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服务器支持h265。
好,本篇文章到此结束。后面我会给我的开源 Go 流媒体服务器 lal 添加rtmp h265的支持,并提供可执行文件供大家直接使用,有兴趣的可以在github上关注一波,github地址: https://github.com/q191201771/lal
原文链接: https://pengrl.com/p/20044/
原文出处: yoko blog ( https://pengrl.com )
原文作者: yoko ( https://github.com/q191201771 )
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Where Wizards Stay Up Late
Katie Hafner / Simon & Schuster / 1998-1-21 / USD 16.00
Twenty five years ago, it didn't exist. Today, twenty million people worldwide are surfing the Net. "Where Wizards Stay Up Late" is the exciting story of the pioneers responsible for creating the most......一起来看看 《Where Wizards Stay Up Late》 这本书的介绍吧!