使用VS2015添加对ffmpeg添加h265 支持。
来源:互联网 发布:手机垃圾清理软件排行 编辑:程序博客网 时间:2024/04/28 06:47
最近有人问我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 的一半。效果还不错。
- 使用VS2015添加对ffmpeg添加h265 支持。
- vs2015添加jQuery支持
- 在VS2015中使用easylogging++添加支持Unicode
- ffmpeg添加mpeg ts对pcm的支持
- ffmpeg修改源码添加flv对pcm的打包支持
- 【FFMPEG】ffmpeg 中添加264支持
- 使用ffmpeg添加logo
- 对内核添加cramfs支持
- 向ffmpeg中添加librtmp库支持
- mingw下ffmpeg编译添加x265支持
- ffmpeg添加MP4的pcm音频支持
- VS2015使用技巧 添加xml文件
- ffmpeg h265
- VS2015如何添加解析
- VS2015添加MSDN
- VS2015自动添加注释
- vim 添加代码补全功能(Omnicppcomplete 添加对STL支持)
- WinCE5.0中添加对硬盘支持
- Linux 同步机制:信号量
- Mysql基本操作
- 集合详解之TreeSet集合--排序及API应用
- Android编程之SparseArray<E>详解
- excel中怎样每隔5行取出一列中的一个数生成一列新数据?
- 使用VS2015添加对ffmpeg添加h265 支持。
- 匿名内部类
- Appium自动化测试--使用Chrome调试模式获取App混合应用H5界面元素
- 初识Babel
- Atitit 设计模式的本质思考】
- 堆和栈的区别
- C语言中.h和.c文件解析(很精彩)
- 欢迎使用CSDN-markdown编辑器
- windows和Linux 动态库与静态库制作