使用VS2015添加对ffmpeg添加h265 支持。

最近有人问我hls 是否支持h265,经过一番查找资料应该是不支持的。但是有人却不依不饶的问是否vlc 支持hls 支持h265,于是我想测试一番,翻出原来的推流代码,

把 pCodecOut = avcodec_find_encoder(AV_CODEC_ID_H264);这句代码改成  pCodecOut = avcodec_find_encoder(AV_CODEC_ID_H265);,经过debug 发现返回的null

想起来当初没有把h265 加入到ffmpeg中,撸起袖子开干吧。

     1、 首先从官方下载http://hg.videolan.org/x265代码,使用cmake 生成vs工程,build 完成 ,生成目标文件,将头文件,和libx264.lib 复制到指定的目录(可以让编译器找的到相应的库)。

  2、下载安装msys2 ,借助msys2 来运行ffmpeg 的shell 脚本。在bash里,在ffmpeg 目录下,执行./configure --toolchain=msvc --enable-gpl --enable-nonfree  ... --enable-libx265。经过一段时间的执行,bash 报错,using libx265 without pkg-con53fig.fig。经过百度,发现要配置pkg-config 也比较麻烦,还有pkg-config 可能和mingw 配合比较好,msvc 压根没有没啥用啊。这种用法,于是我只能去修改configure,中找到了如下代码:

 enabled libx265           && use_pkg_config x265 "x265.h" x265_encoder_encode -lx265 ||
                             { check_cpp_condition x265.h "X265_BUILD >= 57" ||
                               die "ERROR: libx265 version must be >= 57."; }

改成了

 enabled libx265           && use_pkg_config x265 "x265.h" x265_encoder_encode -lx265 ||
                             { check_cpp_condition x265.h "X265_BUILD >= 57" ||
                               die "ERROR: libx265 version must be >= 57."; }

继续configure 完成后看到encoder列表中有h265 ,表示配置完成。


然后使用make 命令进行编译。 链接到一半的时候报错,x265_api_get_68 无法引用的符号错误。此时,我马上收索,x265_api_get_68 发现代码里面并没有这个函数,

最后我翻了x265的头文件里面,发现有一段宏,,x265_api_get_68 被宏定义搞成了,x265_api_get ,因此ffmpeg无论哪个版本都可以 ,x265_api_get_68调用。改了还是出错。因此库没有正确的引用,最后在libx265.c 代码开头加上,#pragma comment(lib,"x265.lib"),最后make 一下生成了dll,

将dll 替换以后原先的代码可以工作了,推流到EasyDarwin 上,本地用vlc 播放,发现流量基本上是h264 的一半。效果还不错。


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值