问题标签 [avcodec]
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.
ffmpeg - 解码的 H.264 给出不同的帧和上下文大小
我们使用 avcodec 解码 H.264,在某些情况下,更改分辨率后,avcodec 会感到困惑,并为解码帧提供两种不同的大小:
这将导致此日志(带有一些周围的行):
中断的行用 标记*
。pAVFrame
包含旧框架尺寸,而pCodecCtx
包含新尺寸。当绘图代码尝试以 1280x800 图像的形式访问数据时,它会遇到访问冲突。
当减小尺寸时,avcodec 会正确转换,并设置FrameFinished
为 0 并将pAVFrame
分辨率保持在 0x0。
谁能想到是什么原因造成的,为什么 avcodec 报告成功,但没有做任何事情,以及我能做些什么来正确解决这个问题?
目前,不匹配检查正在防止这种情况。
使用的 avcodec 是由 Zeranoe 从 git-5cba529 构建的。
opengl - 填充 AVFrame.data 的最佳方法是什么
我想尽快将 opengl 帧缓冲区数据传输到 AVCodec。
我已经使用着色器将 RGB 转换为 YUV 并使用 glReadPixels 读取它
我仍然需要手动填充 AVFrame 数据。有没有更好的办法?
c++ - FFmpeg 音频编码器新增编码功能
我想使用函数更新 AV 音频编码器avcodec_encode_audio (deprecated)
,avcodec_encode_audio2
而不修改现有编码器的结构:
在哪里:
1) m_handle AVCodecContext
2) dst, uint8_t * 目标缓冲区
3) sizeBytes, uint32_t 目标缓冲区大小
4) m_samBuf void * 到要编码的输入数据块(这被转换为:const short int*)
有简单的方法吗?
我正在尝试:
它可以编译,但它不编码任何东西,如果我在 mplayer 上通过管道传输输出流,我不会在输出端播放音频,这在升级之前一直在运行。
我究竟做错了什么?
编码器只接受两种样本格式:
这是缓冲区的分配方式:
ffmpeg - ffmpeg avcodec_encode_video2 在使用快速同步 h264_qsv 编码器时挂起
当我使用 mpeg4 或 h264 编码器时,我能够使用 ffmpeg 3.1.0 的 API 成功编码图像以制作有效的 AVI 文件。但是,当我使用快速同步编码器 (h264_qsv) 时,avcodec_encode_video2 会在某些时候挂起。我发现当使用 1920x1080 的图像时,avcodec_encode_video2 很少会挂起。使用 256x256 图像时,该功能很可能会挂起。
我在下面创建了演示 avcodec_encode_video2 的测试代码。代码将创建一个 1000 帧、256x256 的 AVI,比特率为 400000。这些帧被简单地分配,所以输出视频应该只是绿色帧。
使用 Windows 7 和 Windows 10,使用 32 位或 64 位测试应用程序观察到该问题。
如果有人对如何避免 avcodec_encode_video2 挂起有任何想法,我将不胜感激!提前感谢您的任何帮助。
c++ - 实时视频流的 GOP 大小
我正在开发一种丰富的远程桌面系统,使用 avcodec/x264 编码的桌面视频流。我必须手动设置流的 GOP 大小,到目前为止我使用的大小为 fps/2。但我刚刚在维基百科上阅读了以下内容:
这种结构 [Group Of Picture@] 提出了一个问题,因为需要第四帧(P 帧)来预测第二帧和第三帧(B 帧)。所以我们需要在 B 帧之前传输 P 帧,这会延迟传输(需要保留 P 帧)。
这意味着我创建了很多延迟,因为客户端需要接收至少一半的 GOP 才能输出 I 帧之后的第一帧。如果我想要尽可能小的延迟,那么 GOP 大小的最佳策略是什么?一张照片的gop?
c++ - 配置 AVCodecContext 结构以从原始 PCM 编码到 u-law
我正在尝试将原始 PCM 音频数据编码为 u-law,这听起来很奇怪(当它听起来......)。我不太了解如何初始化我的AVCodecContext
结构(和我的输入AVFrame
)。
这是我的参数:
输入:PCM(16 位签名)、MONO、44,1kHz(采样率)(来自我的 Android 设备 MIC)
所需输出:G.711 u-law、MONO、8kHz(采样率)、64 kbits/s(比特率)(来自我的输出目标设备的文档)
我也知道我的输入 nb 样本,这就是我拥有的所有信息。
所以我AVCodecContext
像这样初始化我的:
我AVFrame
喜欢:
avcodec_send_frame()
然后,我用and编码avcodec_receive_packet()
。
所以我的问题是我不确定是否必须在不同的参数中输入或输出所需的值。可能我必须以一种方式进行编码,然后使用swresample
lib 进行“重新采样”。但就目前而言,我很确定我没有正确编码。请问有什么建议吗?谢谢!
c# - 在 C# 中解码 A/V 流
我正在开发一个 C# 程序,它可以读取音频/视频流,并将其分离为视频文件和音频文件。输入流是一个字节原始数组我的问题是如何从字节数组中分离视频帧和音频帧?(假设我知道有关该流媒体的视频和音频详细信息)
PS:对不起我的不好EN :'(
ffmpeg - FFMPEG 解码太慢 (avcodec_send_packet() / avcodec_receive_frame())
我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码、缩放和重新编码。我刚刚从源代码重新编译到 v3.3.2,并从旧的 avcodec_decode_video2() API 更改为新的发送/接收 API。
新旧 API 都非常缓慢地解码视频。
25 fps 视频 = 每 40 毫秒 1 帧。但是,我看到每帧需要 70 到 120 毫秒来解码。这是一个文件翻译器,因此需要它比实时运行得更快。
代码大纲如下。有人对如何提高解码速度有任何想法吗?还有其他关于弃用avcodec_decode_video2()
缓慢的帖子;这些都没有得到解决。新的 API 并没有运行得更快……
一些输出
FFMPEG 版本
在 core2 duo 3.2 GHz、32 位 Centos 6 上运行的测试。
c++ - Visual Studio 2017 C++ 项目中的 Libavcodec“找不到 av_frame_alloc 的过程入口点”错误
我正在尝试将 C++ 中 ffmpeg 库中的 libavcodec 与 Visual Studio 2017 社区一起使用。我从 zeranoe(版本 20171217)下载了最新的 x64 开发和共享构建,在 Visual Studio 中为 x64 构建设置包含目录和其他库,将共享包中的 DLL 文件添加到我的 PATH。
这是我的示例测试代码:
代码编译没有问题,但是当我运行应用程序时,我看到一个对话框窗口,显示错误消息“av_frame_alloc 的过程入口点无法位于 DLL 中”(实际消息不是英文,这是翻译版本)。
我尝试设置 Linker->Optimization->References to /OPT:NOREF 正如在类似问题中所建议的那样,但它没有帮助。
Dependency walker 显示 av_frame_alloc 已导出,“入口点”未绑定。有点奇怪的是,av_frame_alloc 显示在 avcodec-58.dll(红色)和 avutil-56.dll(绿色)中。也许原因是应用程序试图从 avcodec 而不是 avutil 获取此功能,但我不确定,因为我没有检查这些库的源代码。
那么问题来了,如何在VS2017中建立这样一个简单的基于FFMPEG的C++项目,我错在哪里?
UPD。1.
链接器标志:/OUT:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.exe" /MANIFEST /NXCOMPAT /PDB:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pdb" / DYNAMICBASE “c:\work\dev\ffmpeg-20171217-387ee1d-win64-dev\lib*.lib” “kernel32.lib” “user32.lib” “gdi32.lib” “winspool.lib” “comdlg32.lib” “ advapi32.lib""shell32.lib""ole32.lib""oleaut32.lib""uuid.lib""odbc32.lib""odbccp32.lib" /DEBUG:FULL /MACHINE:X64 /OPT:NOREF /PGD:" C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\TestFfmpeg.exe.intermediate.manifest" /OPT :ICF /错误报告:提示 /NOLOGO /TLBID:1
c# - C# ffmpeg 无法加载 dll avcodec
我从这个站点下载了控制 AR Drone 的项目:
这个项目很旧。然后我从这个站点下载了 ffmpeg.autogen 库
这是旧版本的 ffmpeg,因为旧版本 AR.Drone。我必须是.NET Framework 4.0 版本。
项目已编译,但是当我运行应用程序时出现错误:
错误发生在这一行: