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

栏目: IT技术 · 发布时间: 4年前

内容简介: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 )

版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

项目管理艺术

项目管理艺术

Scott Berkun / 东南大学出版社 / 2006-4-1 / 58.00

《项目管理艺术(英文影印版)(2006年度Jolt获奖图书)》 “该书内容涵盖了项目管理的各个方面:保证项目按时按质交付的有效方法,如何激励项目成员全力以赴地工作,如何成为一名有影响力的领导者等等。通过阅读本书,您会详细地了解微软公司的最优秀的项目管理方法。衷心希望书中的经验能够被付诸于实践!” -Joe Belfiore,General Manager,E-home Divisi......一起来看看 《项目管理艺术》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码