- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下基于 ffmpeg 的代码片段正在 Windows VC2012、VC20155、VC2017 上构建和运行。
在 Ubuntu LTS 16.04 上使用 gcc,这给了我一些问题,更具体地说,它似乎无法识别 avcodec_send_packet、avcodec_receive_frame 和 struct AVCodecParameters,以及我目前未使用的更多函数和结构。
错误:“AVCodecParameters”未在此范围内声明
错误:“avcodec_send_packet”未在此范围内声明
错误:“avcodec_receive_frame”未在此范围内声明
代码片段是:
// the includes are actually in a precompiled header, included in cmake
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
#include <libavfilter/avfilter.h>
#include <libpostproc/postprocess.h>
#include <libswresample/swresample.h>
#include <libswscale/swscale.h>
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
#include <libavutil/avassert.h>
#include <libavutil/avstring.h>
#include <libavutil/bprint.h>
#include <libavutil/display.h>
#include <libavutil/mathematics.h>
#include <libavutil/imgutils.h>
//#include <libavutil/libm.h>
#include <libavutil/parseutils.h>
#include <libavutil/pixdesc.h>
#include <libavutil/eval.h>
#include <libavutil/dict.h>
#include <libavutil/opt.h>
#include <libavutil/cpu.h>
#include <libavutil/ffversion.h>
#include <libavutil/version.h>
}
//
...
{
if (av_read_frame(m_FormatContext, m_Packet) < 0) {
av_packet_unref(m_Packet);
m_AllPacketsSent = true;
} else {
if (m_Packet->stream_index == m_StreamIndex) {
avcodec_send_packet(m_CodecContext, m_Packet);
}
}
}
...
/usr/bin/ld: /usr/lib/ffmpeg/libavdevice.a(alsa.o): undefined reference to symbol 'snd_pcm_hw_params_any@@ALSA_0.9' //usr/lib/x86_64-linux-gnu/libasound.so.2:
最佳答案
所以问题确实是 avcodec 和 ffmpeg 源的版本混合,我将链接到正确的库但针对错误的源包编译。我是通过遵循 Andrew 的建议来检查标题中的 API 版本而发现的。
正如halfelf 建议的那样,解决方案是卸载ffmpeg 和avcodec,然后从ffmpeg 的最新存储库版本手动下载源主干,并从源代码构建。这是一个相当大的过程,但一切都解决了并解决了链接问题。
关于gcc - 错误 : ‘avcodec_send_packet’ was not declared in this scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040531/
我正在尝试解码帧,但内存使用量随着每一帧(更具体地说,每次调用 avcodec_send_packet)而增长,直到最后代码因 bad_alloc 而崩溃。这是基本的解码循环: int rfret =
我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码、缩放和重新编码。我刚刚从源代码重新编译到 v3.3.2,并从旧的 avcodec_decode_video2() API 更改为新的发
我正在尝试从来自 mp4 容器的压缩数据中解码数据包。我已经获得了 AVCodecContext,并从 avreadframe() 获得了数据包。问题是当我尝试解码数据包时,eclipse 一直说无法
以下基于 ffmpeg 的代码片段正在 Windows VC2012、VC20155、VC2017 上构建和运行。 在 Ubuntu LTS 16.04 上使用 gcc,这给了我一些问题,更具体地说,
我正在尝试优化一款播放视频的软件,它在内部使用 FFmpeg 库进行解码。我们发现,在一些大型(4K,60fps)视频中,解码一帧的时间有时比应该显示该帧的时间要长;遗憾的是,由于问题域,简单地缓冲/
Windows 10 x64,ffmpeg: 3.1, 预建 dll 这里绝对是新手。 我正在尝试一个非常基本的案例来解码视频文件中的帧,但每次尝试都失败了。最终的代码片段如下所示: #define
我正在考虑如何设计一个循环,从互联网读取帧,馈送到 ffmpeg 解码器,然后从 ffmpeg 接收以发送到渲染。 考虑这个伪代码循环: while true { auto packet =
我是一名优秀的程序员,十分优秀!