问题标签 [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 投票
1 回答
2302 浏览

c - libav:用 RGB24 样本数据填充 AVFrame?

我正在尝试为使用 RGB24 格式初始化的 AVFrame 填充样本数据。我使用以下代码片段来填充 RGB 数据。但是在编码的视频中,我只能看到仅覆盖视频帧 1/3 的灰度条。此代码片段假设仅填充红色。任何提示我在这里做错了什么?

0 投票
1 回答
1465 浏览

permissions - 使用 minGW 和 MSYS 在 Windows 上构建 libav 时出错

我在使用libav 时遇到了问题。 我使用 MinGW 和 MSYS 在 Windows 上构建 libav。但是,当我使用“make”时,在构建一些文件(.o 文件)后我得到错误,它是

之后,我查看 libavcodec 文件夹的权限,我拥有所有权限。:| 请帮我解决这个问题或者给我一个完整的指导来在windows上构建libav(我使用win7 x64并且有msys,mingw)谢谢!!!

0 投票
0 回答
530 浏览

android - 寻找通过android和ios的phonegap平台组合图像制作视频的方法

我正在寻找可以组合图像然后形成视频的应用程序。我正在使用可在 Android 和 IOS 上使用的 Phonegap 框架。

我的问题是实现这一目标需要什么样的过程?

在这个阶段,我尝试阅读有关 ffmpeg 的内容,stackoverflow 上存在的大多数问题都谈到必须获取源代码,编译以制作一系列库以供使用。有了这些库,它需要与 Android/IOS 库绑定吗?(我注意到eclipse中有一个带有项目文件的'android.jar'。它会存在在那里吗?)之后我的困惑在于它是如何在Phonegap中实现的。开发插件?

补充一下,根据 wiki,libav 具有硬件加速的 H.264 解码,同时使用 x.264 进行 Android 编码。这是如何运作的?这是从 libav 库访问然后必须在 android.jar 中编译的东西吗?

在试图描述我不知道的东西时,我可能会混淆术语。

任何帮助,将不胜感激。

0 投票
3 回答
6162 浏览

c++ - 使用 ffmpeg 库将 .264 转换为 .ts

我目前正在将 h.264 基本流(带有 postfiix .264 的文件)转换为传输流(带有 postfix .ts 的文件)。我已经使用 ffmpeg 命令行“ffmpeg -i in.264 -an -vcodec copy -f mpegts out.ts”成功完成了转换。

现在我想通过调用 ffmpeg 的库,使用我自己的 C++ 代码来实现这种转换。我已经下载了预编译的 ffmpeg 库(libavcodec、libavformat 等)。我的输入 h.264 是预先录制的文件,而不是实时流,我的输出 .ts 文件也是如此。所以我的问题是我应该调用库中的哪些函数来实现转换?

0 投票
4 回答
7518 浏览

ios - 单元测试时的链接器错误:ld:从 .../libavutil.a(imgutils.o) 中的 _av_image_check_size 到 ... 中的 cstring 的非法文本重定位

在 Xcode 4.3.2 中,构建一个 iPad 应用程序,其中包括libavutil.affmpeg 发行版,它可以正确构建和运行,但是当我尝试运行单元测试(Cmd-U)时,我收到以下链接器错误:

ld: 非法文本重定位到 /myPath/libavutil.a(imgutils.o) 中的 cstring 从 /myPath/libavutil.a(imgutils.o) 中的 _av_image_check_size 用于架构 armv7 clang: 错误:链接器命令失败,退出代码 1(使用-v 查看调用)

这是在设备上(我们目前无法在模拟器中运行它,因为我们没有包含所有库的胖二进制文件)。

为什么在运行单元测试时它会正常构建和运行但不能链接?

0 投票
0 回答
593 浏览

c++ - 在 C/C++ 中将 libavcodec 与 linux 一起使用时出错

问题: AVFormatContext::nb_streams 价值太小。我的 C++ 代码(错误处理、包含等省略以减少列表):

跑步:

但是“avplay”程序运行良好。

0 投票
1 回答
386 浏览

ffmpeg - 在没有命令行的情况下使用 libav?

我使用下面的这个命令来转换文件

./avconv -i inputFile -vcodec libx264 -trellis 2 -crf 23 -tune psnr -vf crop='trunc(iw/2)*2:trunc(ih/2)*2' -y outputFile

但是,我不想使用这个命令,我想做一个像

convert(char *inputFile, char *outputFile). (The option of my function like option in command line)

然后我将从我的 main 函数中调用它,例如

我也读过这篇文章。但我不清楚。
谁能告诉我如何解决这个问题?我用谷歌搜索了很多次,但没有找到解决方案。

0 投票
2 回答
1240 浏览

encoding - sws_scale 在较小的 x264 mp4 编码中搞砸了最后一个像素行

我正在将 PIX_FMT_ARGB 格式的图片混合到 mp4 视频中。

一切都很好,除了输出图像的最后一个像素行被搞砸了,在大多数情况下最后一行是完全黑色的,有时还有其他颜色,它似乎在某种程度上取决于它运行的机器。

我绝对确定错误必须在 sws_scale 中,因为我在缩放之前和之后保存图像。输入图像没有错误,但是在 sws_scale() 之后我保存了 yuv 图像并且错误很明显。

这是一个例子:

原来的

在此处输入图像描述

Yuvfile(在 sws_scale 之后)

在此处输入图像描述

在 Yuvfile 的底部,您将看到黑色行。

这就是我进行缩放的方式(在官方 ffmpeg 示例之后,或多或少):

我还尝试了许多不同的 SWS_ 标志,但都产生了相同的结果。

这可能是 sws_scale 中的错误还是我做错了什么?我正在使用最新版本的 ffmpeg 库。

0 投票
0 回答
1567 浏览

c++ - libav 通过 mpegts 将 h264 流式传输到 rtmp 服务器

我正在开发一个应用程序,我想通过 mpegts 将 h264 流式传输到 rtmp 服务器(FMS、C++ RTMP 服务器、Wowza)。我正在查看 libav 的 output-example.c。为了简单起见,我暂时删除了所有音频。

我将此代码用作测试(不起作用): https ://gist.github.com/fb450aee77471a1d86f3#comments

我在那里做错了什么?

谢谢

0 投票
0 回答
1017 浏览

audio - LibAV - 采用什么方法进行实时音频和视频捕获?

我正在使用 libav 将原始 RGB24 帧编码为 h264 并将其复用到 flv。这一切正常,我已经流式传输超过 48 小时,没有任何问题!我的下一步是将音频添加到流中。我将捕捉现场音频,我想使用 speex、mp3 或 nelly moser 对其进行实时编码。

背景资料

我是数字音频的新手,因此我可能做错了。但基本上我的应用程序获得了一个带有交错音频的“浮动”缓冲区。这个“audioIn”函数被我正在使用的应用程序框架调用。缓冲区每个通道包含 256 个样本,我有 2 个通道。因为我可能混用了术语,所以我是这样使用数据的:

现在我有一个缓冲区,其中每个样本都是 16 位,我将 this 传递short* buffer给我的包装av.addAudioFrame() 函数。在这个函数中,我在对音频进行编码之前创建了一个缓冲区。从我读到的,AVCodecContext音频编码器的frame_size. 调用时,此 frame_size 必须与缓冲区中的样本数匹配avcodec_encode_audio2()。我为什么这么认为,是因为这里记录的内容。

然后,尤其是以下行:如果未设置,则除最后一帧外的所有帧都frame->nb_samples必须等于avctx->frame_size。*(如果我对此有误,请在此处纠正我)。

编码后,我调用av_interleaved_write_frame()实际写入帧。当我使用 mp3 作为编解码器时,我的应用程序运行大约 1-2 分钟,然后接收视频/音频流(flv、tcp)的服务器断开连接并显示消息“ Frame too large: 14485504”。生成此消息是因为 rtmp-server 正在获取一个很大的帧。这可能是因为我没有正确地与 libav 交错。

问题:

  • 即使在浏览libav的源代码时,我也不确定有很多位,因此我希望如果有人有一个编码音频的工作示例,该示例来自来自“外部”libav的缓冲区(即您自己的)应用)。即如何为编码器创建一个足够大的缓冲区?当您需要等待此缓冲区填满时,如何使“实时”流工作?

  • 正如我在上面所写的,我需要在编码之前跟踪缓冲区。其他人是否有一些代码可以做到这一点?我现在正在使用 AVAudioFifo。编码音频和填充/读取缓冲区的功能也在这里:https ://gist.github.com/62f717bbaa69ac7196be

  • 我用 --enable-debug=3 编译并禁用优化,但我没有看到任何调试信息。如何使 libav 更详细?

谢谢!