问题标签 [libav]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - SDL 视频覆盖闪烁与 SDL_Flip
我在 C++ 中使用 SDL 和 libav 在 Linux 的屏幕上绘制视频。我的大部分视频打开代码都基于本教程,但我更改了一些已弃用的功能。我像这样初始化 SDL:
我不会发布整个代码,因为它非常大,但下面显示了我如何尝试显示视频叠加层。请注意,一些变量是我的 Video 类中的类成员,例如formatCtx
和packet
。
然后在我的主循环中:
这有效,视频播放,但闪烁很多。就像它试图在每一帧的同一位置绘制图像一样。当我删除对SDL_Flip(screen)
视频的调用时,播放正常。太快了,我还没有进行视频超时,但是当我添加一个临时的时SDL_Delay(10)
,它看起来还不错。但是当我删除SDL_Flip
以显示我的视频时,我无法在屏幕上绘制任何其他内容。两者都SDL_BlitSurface
无法SDL_FillRect
在屏幕上绘制任何内容。我已经尝试添加SDL_DOUBLEBUF
标志,但这并没有改变情况。
如果需要,我可以提供更多代码,但我认为问题出在我发布的代码中,因为其他一切工作正常(绘制图像或显示没有 的视频SDL_Flip
)。
我究竟做错了什么?
ffmpeg - 使用 libav 过滤器缩放视频时出错
我需要批量处理一堆视频以将它们的高度缩放到 240,同时保持纵横比不变。几乎完成工作的命令是:
如您所见,有趣的部分是-vf "scale=-1:240"
这适用于缩放输出宽度为偶数的视频。否则,我会收到以下错误消息:
我该如何克服呢?
编辑:根据此链接,我尝试使用-vf "scale=trunc(oh/a/2)*2:240"
which 输出电影,但生成的视频质量真的很差。
编辑#2:这不是重复的,因为它被错误地标记了。这个问题比另一个问题更早发布。
ffmpeg - 无法使用 avconv 录制 S-Video
我一直在尝试使用 avconv 从我的 S-Video 电缆录制提要。我可以使用 avconv 录制复合视频,但质量不是最好的。为了设置输入,我使用v4l2-ctl -i $n
,其中$n
0 表示复合,或 1 表示 S-Video。我尝试使用v4l2-ctl -i 1
设置输入,但这不起作用。奇怪的是,当我使用 tvtime 或 qv4l2 时,我可以观看视频。
我可以录制音频,但不能录制视频。在 tvtime 中,我可以获得音频和视频。此外,我还可以使用该-channel
选项使用 ffmpeg 录制 S-Video。ffmpeg,顺便说一句,无法录制音频,并且录制单独的音频不是一种选择。
编辑:根据 Anton 的要求,这是我使用 avconv 捕获视频的命令。
这是此命令的输出:
android - Mac 上 Libavcodec.so 和 libavformat.so 的简单构建
谁需要ffmpeg?不是我。我需要的是能够解码视频流及其音频流,以便可以将帧放在 opengl 表面上与音频同步。
FFmpeg 是一个视频转码工具。那不是我需要的。我需要它的库。
问题是构建 FFmpeg 的每个示例都包含我不需要的垃圾。我浪费时间的最新示例:
https://github.com/appunite/AndroidFFmpeg
使用诸如 freetype2 之类的东西,我真的,真的,不需要。更烦人的是,它甚至不会像描述的那样构建,因为示例引用了 freetype,而不是 freetype2,所以构建步骤被破坏了。甚至不要让我开始解决我在使用 libtool 时遇到的问题。
踢球者正在寻找 libav.org,他们在其 about 页面上描述了 ffmpeg 项目中的混乱情况。也许这就是为什么这很困难。
那么,仅仅构建共享库就这么难吗?有人可以指点我一些文档或有效的教程吗?我承认这对我来说是一个新领域,但我使用谷歌发现的只是混乱。
c++ - av_free 随机崩溃应用程序 - FFMPEG C++
我正在尝试创建一个简单的媒体播放器来介绍 ffmpeg 的世界,问题是每次我调用av_freep(void*ptr)
应用程序时都会崩溃。
如果我不调用av_freep
我会出现内存泄漏并且程序使用的内存增加到 1000MB(已经测量),这里是代码:
这是我的“DecodeAudioFrame”功能代码:
我需要有关此问题的帮助,我不知道这是一个错误还是我需要做什么。那里发生了什么?为什么av_freep
通话时会崩溃?我该如何解决?
谢谢
c++ - 为 ffmpeg 编码设置 RGB 帧的单个像素
我正在尝试将 ffmpeg 流媒体的测试模式Trouble syncing libavformat/ffmpeg with x264 and RTP更改为熟悉的 RGB 格式。我更广泛的目标是动态计算流式视频的帧。
因此,我将其替换AV_PIX_FMT_MONOWHITE
为根据http://libav.org/doxygen/master/pixfmt_8h.htmlAV_PIX_FMT_RGB24
的“压缩 RGB 8:8:8、24bpp、RGBRGB ...” 。
为了填充它的像素数组data
,我尝试了很多变体
在HEIGHT
x WIDTH
= 80x60 时,这个版本产生
,当我期望一个蓝色到红色的水平渐变时。
640x480 产生相同的 4 列模式,但水平条纹更多。
640x640、160x160 等,产生三列,青色/洋红色/黄色,具有相同的水平条纹。
垂直渐变的表现更加怪异。
外观不受AV_PIX_FMT_RGBA
尝试的影响(每个像素 4 个而不是 3 个字节,alpha=255)。也不受从 C 到 C++ 的移植的影响。
srcStrides
传递给的参数sws_scale()
是一个长度为 1 的数组,包含单个 int HEIGHT
。
访问 AVFrame的每个像素都会以较少的细节提出相同的问题,目前尚未得到解答。
流光发出一个警告,我怀疑这会影响外观:
[rtp @ 0x269c0a0] Encoder did not produce proper pts, making some up.
所以。如何设置要发送到 sws_scale()(然后发送到 x264_encoder_encode() 和 av_interleaved_write_frame())的帧中像素的 RGB 值?
c++ - 启用在 Windows 上收听麦克风或使用 libav 进行实时回放
我需要一个系统,它可以从我的麦克风录制声音并同时实时播放。我正在使用 windows 7 专业版、c++ mingw 或 msvc 2012/2010 可选。
我使用 libav 来抓取我的麦克风并播放/录制声音。我的问题是,libav 的声音包长 0.499 秒,所以我的声音播放(如果我(重新)现场播放)至少 0.5 秒到晚。我不知道这是否真的是一个 libav 问题。因为我没有找到任何可以缩短libav中的持续时间或packege-size的东西。
所以现在我的想法是使用 libav 进行录制,但使用 windows 来(重新)现场播放。
如果我启用此选项,我的声音会(几乎)实时播放。但现在的问题是,它始终处于启用状态。所以如果我重放我录制的声音,我也会听到实时声音。因此我想启用/禁用此选项。
我不太擅长windows prgramming,并且没有找到(在我完成的简短搜索中)如何在windows中启用/禁用souch(深层系统)选项,甚至是否可以使用c++。
任何建议都会有所帮助。
对不起,如果这个问题是具体的,但我真的不知道在哪里问。如果是这样,请关闭问题。
c++ - avcodec_encode_video2 时出现分段错误
我在尝试将 AVFrame 编码为数据包时遇到了一些问题。
在阅读整个代码之前,输入的东西正在工作,我测试了它。输出内容来自此处的示例。我认为有问题。但是分段错误发生在接近尾端的循环中。
这是我的简化代码:
我究竟做错了什么?
在调试时,我没有发现参数有任何问题。streamOut->codec
充满。pktOut
被分配并frame
填充了之前编码的图片。我认为问题在于创建输出编解码器但观看示例并查看 doxypages 似乎是正确的。
跟踪路由来自使用 msvc11 和框架 5 的 QT。
我也试着和博士一起跑步。记忆并得到这个:
似乎 memcpy 出错时的读取过程。
版本:
我忘了提及我正在使用的 libav/ffmpeg 版本:
附录:
函数是从教程 1SafeFrame
复制的。
c - 在 C 代码中使用 libavformat,未定义的 x86_64 符号
我正在做一个项目,我必须创建一个简单的 C 程序,libavformat
用于将文件从一种格式转换为另一种格式。
我正在使用 OS X (10.8.3) 并已libav
通过以下步骤进行安装。
首先,使用 Homebrew 安装依赖项:
接下来,从这里下载 libav:http://libav.org/download.html (使用libav 9 "plain 9"
发行版)
最后,使用以下命令进行配置:
一切都正确编译并给出了支持的编解码器、编码器、解码器、复用器、解复用器等的列表。
然后我运行make && sudo make install
。
但是,一旦我尝试av_register_all()
在自己的 C 代码中使用和其他一些关键函数,就会收到以下错误:
我曾尝试使用gcc -Wall base.c -o base
as 和编译它clang -Wall base.c -o base
,但都给出了上述错误。我担心库的链接方式有问题,但我对 C 编程的经验不足,不知道下一步该往哪里看。当我删除av_register_all()
调用时,C 代码本身编译得很好。
libavformat 的包含如下所示:#include "libavformat/avformat.h"
任何帮助表示赞赏。我尝试添加-arch x86_64
到 CFLAGS 导出,但没有任何区别。
c - 如何通过ffmpeg将mp3解码为pcm
我需要将 mp3 音频数据解码为 pcm。我有以 mp3 标头开头的数据。Api-example.c 不起作用,输出很奇怪:
命令ffmpeg -i input.mp3 output.wav
很棒,这就是我需要的。但我找不到如何在代码中做到这一点。有人知道,ffmpeg 库的一些教程在哪里?谢谢
编辑 2.7.13:
再次嗨,我从 ffmpeg 重建了音频解码示例方法,我的问题可能在这里:
data_size 是来自解码器的数据帧的大小,它取决于通道数、数据样本数和数据类型(我的数据是 16 位 PCM 立体声编码为 mp3 到 1152 个 mp3 帧样本)
如果我大胆地打开一个输出文件,给出正确输出的正确参数是立体声(正确)、8bit pcm(错误)和半采样率(也错误),发生了什么?
编码前数据:16bit PCM 44100Hz,立体声
解码后的数据:8bit PCM 22050Hz,立体声--->???!!!
我厌倦了这个......