作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的项目使用 libavformat 连接到 rtsp://
网址。设置套接字超时并在错误时重新连接很重要。不幸的是,stimeout
开放选项只存在于 ffmpeg (特别是它的 libavformat 版本 >= 55.1.100),而不是竞争项目 libav (任何版本)。并且我想支持的一些系统(例如 Raspbian Jessie)仍然与 libav 捆绑在一起。
所以,我认为我最好的选择是使用 cmake 检测我是否有合适的版本,如果没有,则在树中安装 ffmpeg。我想我应该能够通过以下方式做到这一点:
pkg_check_modules(FFMPEG libavutil libavcodec libavformat)
if(not FFMPEG_FOUND or FFMPEG_VERSION VERSION_LESS 55.1.101)
ExternalProject_Add(
FfmpegProject
URL "http://ffmpeg.org/releases/ffmpeg-2.8.3.tar.xz"
URL_HASH "SHA1=a6f39efe1bea9a9b271c903d3c1dcb940a510c87"
INSTALL_COMMAND "")
...set up flags and such to use this in-tree version...
endif()
libavformat/version.h
中没有看到任何内容来区分它们。他们使用的版本号似乎重叠。如何以编程方式区分差异对我来说并不明显,更不用说使用不奇怪的 cmake 规则了。有任何想法吗?
最佳答案
要具体回答您的问题,请使用以下代码:
#include <stdio.h>
#include "libavutil/opt.h"
#include "libavformat/avformat.h"
int main(int argc, char *argv[]) {
av_register_all();
AVInputFormat *input = av_find_input_format("rtsp");
const AVClass *klass = input->priv_class;
const AVOption *opt = av_opt_find2(&klass, argv[1], NULL, 0, AV_OPT_SEARCH_FAKE_OBJ, NULL);
printf("%p\n", opt);
return 0;
}
bash-3.2$ /tmp/test hi
0x0
bash-3.2$ /tmp/test stimeout
0x103420100
关于ffmpeg - 如何在 CMake 中检测 ffmpeg 与 libav?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350589/
我是一名优秀的程序员,十分优秀!