问题标签 [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.

0 投票
3 回答
1540 浏览

c++ - SDL 视频覆盖闪烁与 SDL_Flip

我在 C++ 中使用 SDL 和 libav 在 Linux 的屏幕上绘制视频。我的大部分视频打开代码都基于本教程,但我更改了一些已弃用的功能。我像这样初始化 SDL:

我不会发布整个代码,因为它非常大,但下面显示了我如何尝试显示视频叠加层。请注意,一些变量是我的 Video 类中的类成员,例如formatCtxpacket

然后在我的主循环中:

这有效,视频播放,但闪烁很多。就像它试图在每一帧的同一位置绘制图像一样。当我删除对SDL_Flip(screen)视频的调用时,播放正常。太快了,我还没有进行视频超时,但是当我添加一个临时的时SDL_Delay(10),它看起来还不错。但是当我删除SDL_Flip以显示我的视频时,我无法在屏幕上绘制任何其他内容。两者都SDL_BlitSurface无法SDL_FillRect在屏幕上绘制任何内容。我已经尝试添加SDL_DOUBLEBUF标志,但这并没有改变情况。

如果需要,我可以提供更多代码,但我认为问题出在我发布的代码中,因为其他一切工作正常(绘制图像或显示没有 的视频SDL_Flip)。

我究竟做错了什么?

0 投票
1 回答
998 浏览

ffmpeg - 使用 libav 过滤器缩放视频时出错

我需要批量处理一堆视频以将它们的高度缩放到 240,同时保持纵横比不变。几乎完成工作的命令是:

如您所见,有趣的部分是-vf "scale=-1:240"

这适用于缩放输出宽度为偶数的视频。否则,我会收到以下错误消息:

我该如何克服呢?

编辑:根据此链接,我尝试使用-vf "scale=trunc(oh/a/2)*2:240"which 输出电影,但生成的视频质量真的很差。

编辑#2:这不是重复的,因为它被错误地标记了。这个问题比另一个问题更早发布。

0 投票
2 回答
770 浏览

ffmpeg - 无法使用 avconv 录制 S-Video

我一直在尝试使用 avconv 从我的 S-Video 电缆录制提要。我可以使用 avconv 录制复合视频,但质量不是最好的。为了设置输入,我使用v4l2-ctl -i $n,其中$n0 表示复合,或 1 表示 S-Video。我尝试使用v4l2-ctl -i 1设置输入,但这不起作用。奇怪的是,当我使用 tvtime 或 qv4l2 时,我可以观看视频。

我可以录制音频,但不能录制视频。在 tvtime 中,我可以获得音频和视频。此外,我还可以使用该-channel选项使用 ffmpeg 录制 S-Video。ffmpeg,顺便说一句,无法录制音频,并且录制单独的音频不是一种选择。

编辑:根据 Anton 的要求,这是我使用 avconv 捕获视频的命令。

这是此命令的输出:

0 投票
0 回答
1789 浏览

android - Mac 上 Libavcodec.so 和 libavformat.so 的简单构建

谁需要ffmpeg?不是我。我需要的是能够解码视频流及其音频流,以便可以将帧放在 opengl 表面上与音频同步。

FFmpeg 是一个视频转码工具。那不是我需要的。我需要它的库。

问题是构建 FFmpeg 的每个示例都包含我不需要的垃圾。我浪费时间的最新示例:

https://github.com/appunite/AndroidFFmpeg

使用诸如 freetype2 之类的东西,我真的,真的,不需要。更烦人的是,它甚至不会像描述的那样构建,因为示例引用了 freetype,而不是 freetype2,所以构建步骤被破坏了。甚至不要让我开始解决我在使用 libtool 时遇到的问题。

踢球者正在寻找 libav.org,他们在其 about 页面上描述了 ffmpeg 项目中的混乱情况。也许这就是为什么这很困难。

那么,仅仅构建共享库就这么难吗?有人可以指点我一些文档或有效的教程吗?我承认这对我来说是一个新领域,但我使用谷歌发现的只是混乱。

0 投票
2 回答
2299 浏览

c++ - av_free 随机崩溃应用程序 - FFMPEG C++

我正在尝试创建一个简单的媒体播放器来介绍 ffmpeg 的世界,问题是每次我调用av_freep(void*ptr)应用程序时都会崩溃。

如果我不调用av_freep我会出现内存泄漏并且程序使用的内存增加到 1000MB(已经测量),这里是代码:

这是我的“DecodeAudioFrame”功能代码:

我需要有关此问题的帮助,我不知道这是一个错误还是我需要做什么。那里发生了什么?为什么av_freep通话时会崩溃?我该如何解决?

谢谢

0 投票
2 回答
2760 浏览

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,我尝试了很多变体

HEIGHTx 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 值?

0 投票
0 回答
502 浏览

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++。

任何建议都会有所帮助。

对不起,如果这个问题是具体的,但我真的不知道在哪里问。如果是这样,请关闭问题。

0 投票
2 回答
6429 浏览

c++ - avcodec_encode_video2 时出现分段错误

我在尝试将 AVFrame 编码为数据包时遇到了一些问题。

在阅读整个代码之前,输入的东西正在工作,我测试了它。输出内容来自此处的示例。我认为有问题。但是分段错误发生在接近尾端的循环中。

这是我的简化代码:

我究竟做错了什么?

在调试时,我没有发现参数有任何问题。streamOut->codec充满。pktOut被分配并frame填充了之前编码的图片。我认为问题在于创建输出编解码器但观看示例并查看 doxypages 似乎是正确的。

测试

跟踪路由来自使用 msvc11 和框架 5 的 QT。

我也试着和博士一起跑步。记忆并得到这个:

似乎 memcpy 出错时的读取过程。


版本:

我忘了提及我正在使用的 libav/ffmpeg 版本:


附录:

函数是从教程 1SafeFrame复制的。

0 投票
1 回答
617 浏览

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 baseas 和编译它clang -Wall base.c -o base,但都给出了上述错误。我担心库的链接方式有问题,但我对 C 编程的经验不足,不知道下一步该往哪里看。当我删除av_register_all()调用时,C 代码本身编译得很好。

libavformat 的包含如下所示:#include "libavformat/avformat.h"

任何帮助表示赞赏。我尝试添加-arch x86_64到 CFLAGS 导出,但没有任何区别。

0 投票
1 回答
11340 浏览

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,立体声--->???!!!

我厌倦了这个......