- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一大块 C 语言的视频处理代码,它似乎受到我从 ffmpeg 管道读取字节的速率的瓶颈。
我需要对 ffmpeg 或潜在 libav* 提供的原始视频帧进行解码。
与使用 libav 库相比,fread 调用打开的子进程 ffmpeg 是否有很大的开销?
最佳答案
这里有几个方面。首先,为什么您的应用程序似乎受到 ffmpeg 管道输入的瓶颈?答案可能很简单:因为 ffmpeg 需要更多的 CPU(因此是两个应用程序组合的瓶颈)。如果你运行 | b,而 a 占用更多的 CPU,那么从 b 的角度来看,管道的输入很慢。这是合乎逻辑的,因为 a 需要更多时间。对此没有解决方案,ffmpeg 应该占用更多 CPU,因为(取决于编解码器/分辨率等),多媒体处理是非常占用 CPU 的任务.
其次,使用 C API 而不是管道会有帮助吗?这取决于你在做什么。如果您将 ffmpeg 用于相当琐碎的任务,例如在不解压的情况下从磁盘读取文件(例如未压缩的视频/音频),那么是的,管道的开销相当大。如果 ffmpeg 解压缩 H264/HEVC 或 VP9 视频,您不太可能从这一举措中看到 yield ,或者它们至少会很小(1% 范围),因为大部分时间都花在解码视频上。数据的复制/传输几乎可以忽略不计。所以在那种情况下,问题是:1% 值得吗?这由您决定。
关于c - 使用 libavformat 比使用 popen 调用 ffmpeg 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573679/
我是 ffmpeg 的新手。当某些媒体有多个音频流时,我遇到了问题。 假设在 MKV 文件中,它具有三个音频流(MP3、WMA 和 WMAPro) 使用以下方法进行解复用时如何更改流索引: AVPac
我正在尝试使用 libavformat/Libavcodec 生成一个视频,其中包含一堆内存中的图像。 有人可以指出我正确的方向吗? 提前致谢。 最佳答案 首先,解释使用 FFmpeg 从图像创建视频
我使用 pip 在 Anaconda 虚拟环境中使用以下命令安装 opencv3。 install opencv-python 我成功安装了它,因为我可以在 pip 列表中看到包。 (olfatf)r
我在运行 pyfmpeg 时遇到问题,当我尝试导入下面的代码时会出现错误: libavformat.so can not found 我该如何解决这个问题,我找不到足够的信息。谢谢.. 操作系统:Ub
libavfromat 中是否有任何机制可以将其控制台输出重定向到自定义日志系统? 例如。我想用我的自定义记录器打印 av_dump_format 的输出。 最佳答案 FFmpeg 将日志输出打印到
我正在使用 libavformat 库在 udp://127.0.0.1:1000 等网络地址流式传输视频。我使用ffplay在网络地址显示接收到的视频流。但是,视频在同一台机器上的 ffplay 出
默认情况下,libavformat 将错误消息写入stderr,例如: 根据比特率估计持续时间,这可能不准确 如何关闭它?或者更好的是,将其通过管道传输到我自己的整洁的日志记录功能? 编辑:将 std
我目前正在尝试读取从服务器发送的小视频文件 为了使用 libavformat 读取文件,您应该调用 av_open_input_file(&avFormatContext, "C:\\path\\to
我正在实现一个管道,我在内存中接收入站 RTP 数据包,但我无法弄清楚如何设置 libavformat 来处理/解包 RTP 数据包。 我有所有必要的底层编解码器的相关信息,但由于它是 h264,我不
我正在使用 libavcodec 和 libavformat 对视频进行编码。我使用 libx264 作为编解码器,使用 flv 作为容器。我选择 flv 是因为我希望能够在视频编码时播放和剪切视频片
我正在使用 libavcodec 将流编码为 h264 并使用 libavformat 将其存储在 mp4 中。生成的容器有一个无效的 header ,可以在 VLC 中播放,但不能在任何其他播放器中
我正在使用 libavformat 的示例 remuxing.c 重新混合实时 rtmp 流我的代码与该示例几乎相同,但它还解码音频和视频,以便使用 SDL 呈现预览,效果很好。 我的应用程序有一个开
我想捕获视频,将其压缩并复用为 mpeg2 ts。使用 ffmpeg 库,所有这些都非常简单,但我想做的不是将其写入文件,而是在缓冲区中捕获 ts 数据包并以其他方式使用此流。有没有一种简单的方法可以
我正在尝试使用 libavformat 编写视频流应用程序。虽然 ffmpeg 和 libavformat 将 96 和 97 作为默认负载类型,但我想指定自定义 RTP 负载类型。我已经知道如何在
我正在尝试使用 libavformat 多路复用器“hlsenc.c”......查看多路复用器的代码,看起来多路复用器通过 AVOption 机制支持参数......例如,hlsenc.c 多路复用
我想使用 FFmpeg 的 libavformat 提供的 RTP 数据结构(例如 libavformat/rtpenc.h 中的 RTPMuxContext),但它们似乎在以下安装中不可用: ffm
我们如何在使用 libavformat 和 libavcodec 库的 C++ 代码中设置 re 标志。我需要在我的 C++ 应用程序中实现类似以下命令的东西 ffmpeg -re -f m4v -i
我正在使用以下代码将 avcodec_decode_video2() 输出的图像帧提取到 BMP 文件中: // Convert the image from its native format to
我正在构建一个 iOS 应用程序,其中需要在后台重新编码和修剪视频。 我不能使用 iOS 库 (AVFoundation),因为它们依赖于 GPU,如果它在后台,则没有应用程序可以访问 GPU。 由于
我正在使用 ffmpeg 的各种 API 在我的应用程序中绘制视频。到目前为止,这非常有效。因为我也有 gif,所以我想循环播放而不必一遍又一遍地加载文件。 在我的代码中,解码器循环如下所示: AV
我是一名优秀的程序员,十分优秀!