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

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

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


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

查看所有标签

猜你喜欢:

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

Effective JavaScript

Effective JavaScript

赫尔曼 (David Herman) / 黄博文、喻杨 / 机械工业出版社 / 2014-1-1 / CNY 49.00

Effective 系列丛书经典著作,亚马逊五星级畅销书,Ecma 的JavaScript 标准化委员会著名专家撰写,JavaScript 语言之父、Mozilla CTO —— Brendan Eich 作序鼎力推荐!作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的 68 条精华建议。 本书共......一起来看看 《Effective JavaScript》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换