问题标签 [openh264]

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 回答
1389 浏览

c++ - FFMPEG: Why aren't all my codecs showing up when I call av_codec_next()

I'm trying to make a custom build of ffmpeg to use in my c++ application. The only codecs I need are encode/decode for h264 and aac. Because I cannot use GPL code, I'm trying to use openh264.

I successfully built openh264.

I am configuring my ffmpeg build thusly:

Here is my configure output:

As you can see, it is listing two values each for encoders and decoders. HOWEVER, when I try to list the codecs available like so:

Only the first call to av_codec_next returns non-null, and it is the h264 decoder. I don't see the aac decoder, and I don't see any encoders at all.

I've tried the same source code but linking to a prebuilt version of ffmpeg (from Zeroane), so I'm sure the code to iterate over the codecs is correct.

What do I need to do to get openh264 and aac to be listed as codecs?

0 投票
1 回答
3414 浏览

c++ - 如何正确使用 OpenH264 使用代码示例进行编码?

我有一张图片,想用OpenH264对其进行编码。

到目前为止,这是我从他们的wiki导出的代码:

我不完全确定这是否是 OpenH264 的正确用法,但我也不确定如何正确测试它。

现在代码示例的文档记录很差。

BufferedData buf;例如什么?我知道这应该是输入,但那是什么类型?就像我如何将我的 test.bmp 加载为 BufferedData 一样?我认为我还没有正确地做到这一点。

我很困惑的另一件事是如何在编码后访问输出?在示例中,它只是说//output bitstream并没有将这个输出保存在任何地方。我认为输出info就像它在codec_api.h头文件中所说的那样:

但显然它只保存有关输出的信息。我真的对这一切感到困惑。

0 投票
1 回答
655 浏览

android - 是否可以将 H.264 软件编解码器安装到 Google 的原生 Android WebRTC 库?

根据这篇文章(如何检测 Android H.264 硬件加速能力)以及个人经验,WebRTC 的最新 Android 原生库('org.webrtc:google-webrtc:1.0.23546')不支持 H.264,除非有一个硬件解码器。

到目前为止,这仅在使用模拟器时影响我,但我知道某些设备它不会工作,所以这可能是一个大问题。

思科在https://github.com/cisco/openh264上提供了他们的 H.264 软件解码器,我想知道是否有办法使用它或其他方式来安装软件 H.264在没有硬件解码的设备上使用 WebRTC。

此外,我似乎无法在设备上找到 H.264 硬件解码的支持矩阵。

0 投票
1 回答
426 浏览

c++ - OpenH264 DecodeFrameNoDelay 输出格式

我已经使用 OpenH264 教程 ( https://github.com/cisco/openh264/wiki/UsageExampleForDecoder ) 成功解码了 H264 帧,但我无法从教程中弄清楚输出格式是什么。

我正在使用“unsigned char *pDataResult[3];” (本教程中的 pData),它会被填充,但我需要知道长度才能将其转换为字节缓冲区以将其返回给 java。我还需要知道这些数据的所有权是什么(它似乎归解码器所有)。据我所知,教程或文档中没有提到此信息。

本教程还列出了一个初始化程序,但给出了“...”作为赋值。

YUV 数据是否为空值终止?

TagSysMemBuffer 有 SBufferInfo 最后一个参数:

长度可能在那里,但不清楚。也许每个缓冲区都是“iWidth * iHeight”?

0 投票
0 回答
67 浏览

ffmpeg - 如何处理 ffplay 播放 iPhone 的视频太慢?

尝试播放由 iPhone 7 (@30fps) 录制的 3840x2160 视频时,我经常出现停顿——在视频中,音乐一直在播放。

这在 firefox 和当ffplay被调用以直接播放文件时都会发生 - 从命令行。CPU 是双 E6700 @3.20GHz——速度不是很快,但应该可以流畅运行,不是吗?视频是英特尔的“4 系列”集成芯片组——同样,它不是速度守护程序,但它应该足够了……包括对英特尔 VA API 的支持。

我使用FreeBSD port从源代码构建 ffmpeg-4.1 。如您所见,该端口有很多令人抓狂的选项——包括用于 264 编解码器的几个不同选项。

有什么建议可以将解码速度提高到人类可以观看的程度吗?谢谢!

0 投票
1 回答
273 浏览

c++ - 如何将 Y、U、V 缓冲区转换为一维数组

我正在尝试将 hls 文件转换为 jpeg。首先,我使用openh264将 HLS 文件转换为 YUV。我得到了一个包含 Y、U、V 缓冲区 (*pData[3]) 的二维数组。之后,我尝试将三个数组合二为一,将其传递给CompressYUYV2JPEG。这是我的转换方式:

但不幸的是,它不会产生预期的结果。将二维 YUV 数组转换为一维数组的正确方法是什么?

0 投票
2 回答
2870 浏览

javascript - 未捕获的 TypeError:Module.cwrap 不是函数

我需要在浏览器端解码 h264 数据,因为我正在使用 emscripten 在 web 程序集中构建 openh264 库。我已经成功构建它并尝试在 java 脚本中使用它来解码 h264 数据。但是我收到以下行的一个错误,

错误是:未捕获的类型错误:Module.cwrap 不是函数

如果有人用 emscripten 构建了 openh264,请帮我解决问题。

按照我用来使用 emscripten 构建 openh264 的步骤。

  1. $ 源 emsdk_env.sh
  2. $./emsdk 激活最新
  3. cd openh264-js-master
  4. 制作

注意:openh264 的代码已经从 github(ttyridal) 下载,并且已经有 emscripten 的 make 文件。

0 投票
0 回答
273 浏览

java - 如何使用 JNR 按值返回结构?

我正在尝试使用 JNR 从 Java 代码中使用openh264本机库。我正在调用的函数在 openh264 的 C 头文件中定义,以按值返回一个简单的结构:

我写了以下Java对应物:

最后尝试一下:

但是,返回的版本具有错误的值(并且它们在每次调用时都不同)。
该库是在 Windows 10 x64 上运行的 x64。
我可以使用 JNI+JavaCpp 加载相同的库,并且返回值是正确的。
我错过了什么?

0 投票
1 回答
1369 浏览

c# - 在 C# 项目中使用 OpenH264 DLL

我正在通过 UDP 接收 H264 流。我想解码流,以便我可以将帧发送到 OpenCV 或其他任何东西。我在这里遇到了 Cisco 的开源 H264 解码器:https ://github.com/cisco/openh264 经过一番努力,我得到了在 Visual Studio 2019 中构建的解码器解决方案,并使用我从命令行创建的文件对其进行了测试原始 UDP 数据报。有用。

现在我想弄清楚如何在 C# 项目中使用解码器 DLL (welsdec.dll)。上一次我在 Windows 中用 C++ 做任何严肃的事情是在 DirectShow 和 Delphi 5 天,所以我完全迷失了。

使用 __declspec(dllexport) 显式导出 H264 项目中的任何内容。这正常吗?将 DLL 作为项目引用添加到 C# 项目不起作用(“引用无效或不受支持”)。

我猜DLL是非托管的。我可以直接在 C# 中使用它吗?我是否必须将 DLL 重写为,或者可能或将其包装在 C++ CX 库中才能使其正常工作?

0 投票
1 回答
64 浏览

c++ - 动态调用 Openh264 函数导致我的应用程序崩溃

基本上我正在尝试使用他们网页中预先构建的 Openh264 DLL。

使用 LoadLibrary 和 GetProcaddress 有效,直到我调用所需的 WelsCreateEncoder()。

VS 错误告诉我 ESP 未正确保存。

在调试器中,我可以继续运行,一切正常。我一直在调试它,一切正常。但作为一个独立的应用程序它只是崩溃。

我假设因为它是一个 C 库并且我的应用程序是 c++,所以我的调用约定是错误的?

https://github.com/cisco/openh264

我为 WelsCreateDecoder 的开头和结尾添加了 ASM。是我还是它看起来忘记了 sub esp, 4 ?