美文网首页
macOS编译金山云ksvc ffmpeg,在rtmp flv之

macOS编译金山云ksvc ffmpeg,在rtmp flv之

作者: 就想叫yoko | 来源:发表于2020-05-24 11:55 被阅读0次

    写在前面

    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

    20200418补充,lal服务器已经支持h265了,欢迎使用lal和ffmpeg、ffplay进行h265测试。

    本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/20044/

    本篇文章由一文多发平台ArtiPub自动发布

    相关文章

      网友评论

          本文标题:macOS编译金山云ksvc ffmpeg,在rtmp flv之

          本文链接:https://www.haomeiwen.com/subject/toidahtx.html