问题标签 [openmax]

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 投票
0 回答
1516 浏览

c - 通过 RTP 流式传输 H.264 (Raspberry Pi)

我需要帮助使用 RTP 协议流式传输 H.264 视频。我有一个 Raspberry PI(B+) 和一个摄像头模块。Raspberry PI 有一个 H.264 硬件编码器。

但是,播放器无法播放 RTP 流:视频有延迟,画面很糟糕: 在此处输入图像描述

我无法理解这个问题。

有流 H.264 :

我将此流放在单独的 RTP 数据包中。播放时 VLC 的日志:

为了访问硬件编码器,我使用 OpenMax。编码器的部分代码:

我发送到函数的编码器产生的数据,之前我删除了起始代码(00 00 00 01):

描述函数打包到 RTP:

0 投票
1 回答
171 浏览

android - 获取 Mediabuffer 存储的 yuv size 大小

我正在使用 OpenMax 来解码视频帧,我的示例是这样的:

输出是这样的:

我的问题是如何知道 MediaBuffer 存储的 yuv 实际大小,因为 1280 x 736(我猜步幅是 32)x 1.5 = 1413120,但是 mVideoBuffer 的 range_length() 是 1417216,没有常规我可以得到 yuv 大小,请帮帮我,谢谢!

0 投票
1 回答
989 浏览

android - 使用 OpenMAX AL 构建 android H264 解码器

我正在尝试使用 OpenMAX AL API 开发 H264 硬件加速视频解码器。但这份文件指出——

提供多媒体内容的唯一受支持方式是通过 MPEG-2 传输流。

但根据维基百科,MPEG-2H262和较旧的不太先进的版本H264。那么解码应该H264起作用吗?

此外,上述文件指出 -

主要特点是能够播放包含单个节目流的 MPEG-2 传输流,该节目流由一个 H.264 视频基本流和一个 AAC 音频基本流组成。

那么这里的事实是什么?我可以使用 OpenMax AL 解码 H264 基线附件 B 流吗?还是我需要用OpenMax ILor接近stagefright

0 投票
2 回答
3817 浏览

c++ - 开发 H264 硬件解码器 Android - Stagefright 或 OpenMax IL?

我正在为 android 开发 H264 H/W 加速视频解码器。到目前为止,我已经使用了一些库MediaCodecStagefrightOpenMax IL和. 经过一番研究,我发现-OpenMax ALFFmpeg

  1. 我找到了使用 FFmpeg 的 stagefright 的一个很好的资源,但是我不能使用 FFmpeg 作为它的许可证,它对分布式软件有很大的限制。(或者可以从这种方法中丢弃 FFmpeg?)

  2. 我不能使用 MediaCodec 作为它的 Java API,我必须通过 C++ 层的 JNI 调用它,这相对较慢而且我不允许。

  3. 我不能使用 OpenMax AL,因为它只支持通过缓冲区队列解码 MPEG-2 传输流。这排除了传递原始 h264 NALU 或其他媒体格式的可能性。

  4. 现在只剩下 - stagefright 和 OpenMax IL。我知道stagefright使用OpenMax(OMX)接口。那么我应该选择 stagefright 还是 OpenMax IL?哪个更有希望?

此外,我了解到 Android H/W 加速解码器是特定于供应商的,每个供应商都有自己的 OMX 接口 API。这是真的吗?如果是这样,我是否需要在 OpenMax IL 的情况下编写硬件供应商特定的实现?怯场呢?- 它是与硬件无关的还是依赖于硬件的?如果无法使用 stagefright 或 OpenMax IL 实现 H/W indenpent,我至少需要支持高通的 Snapdragon、三星的 Exynos 和 Tegra-4。

请注意,我需要解码 H264 附件 B 流并期望解码后的解码数据,我将发送到我的视频渲染管道。所以基本上,我只需要解码器模块。

我真的很困惑。请帮助我确定正确的方向。提前致谢!

编辑

我的软件是用于商业目的,源代码也是私有的。而且我也被限制为客户端使用 ffmpeg。:)

0 投票
1 回答
898 浏览

android - 如何在 stagefright 媒体播放器中编写和移植 OpenMAX 软件视频解码器组件?

我已经浏览了这个链接和其他一些链接,

  1. 克罗诺斯
  2. OpenMax_Development_Guide
  3. bellagio_openmax_il_open_source_implementation_enables_developers_to_create

但是他们都只是解释了调用顺序,框图图片等,但没有解释如何编写和构建openmax组件并将其插入android。甚至 android 构建和移植的链接也很复杂,它没有解释,你需要完整的源代码来编写和构建 openmax 插件或部分 android 源代码,或者没有 android 源代码你可以创建它。

我有android OS Kitkat 4.4支持 hevc 硬件解码器的 firefly K3288 板,但我想添加 hevc 软件解码器。

如果有人知道如何编写和构建 openmax hevc 视频解码器组件并将其插入 android,请提供一些指导。

0 投票
0 回答
229 浏览

android - 如何在 Android 上以自定义播放速度播放视频?

我想在 Android 中播放视频,将其渲染为 SurfaceTexture 或其他可用作 OpenGL ES 纹理的东西,但我需要非常精确地控制视频的播放速度,以将其与外部事件流同步。这些事件将以大致可预测的速度发生,但确切的速度将取决于许多小的机械细节,受许多小因素的影响,包括天气(甚至可能是月相……)。

android 提供的android.media.MediaPlayer类允许渲染到 SurfaceTexture(Oculus Mobile SDK 中的 360Videos 应用程序成功使用了该功能),但不幸的是似乎不允许改变播放速度,至少据我从文档中可以看出在这里

我尝试过分别使用 pause() 和 start() 暂停和恢复播放,以影响播放速度,但这会导致播放非常不稳定和缓慢。我的想法是让视频具有比以往更高的帧速率,然后手动延迟每一帧,直到它真正需要显示。从日志中的消息来看,在我看来,MediaPlayer 类将在暂停时释放各种需要的资源,并在恢复时重新请求它们,如果您每帧执行一次,这显然会降低性能。

我正在考虑的另一个选择是 ffmpeg。这个似乎会做我想做的事,它本身不做任何计时,它只是在我告诉它到缓冲区时解码帧,让我随时随地使用它。明显的缺点是 ffmpeg,至少在 android 上,不进行硬件解码,可能无法实时解码 4K 媒体。

我还在看的另一件事是 OpenMAX AL。不幸的是,OpenMax AL 很难进入。我还没有找到任何好的初学者文档,只有一些旧的,可能已经过时的自述文件以及来自 Khronos 的接口规范。不过,后者读起来很长而且很麻烦,我什至不知道 OpenMAX AL 是否允许我自己做计时……

0 投票
1 回答
2127 浏览

video - gst-omx 和 gst-openmax 有什么区别?

我用google搜索gst-omxgstopenmax,但我认为两个插件的功能似乎是一样的。gst-omx我不明白和之间是什么关系gstopenmax。根据他们的个人文件:

  1. gst-openmax 是一个允许与 OpenMAX IL 组件通信的 GStreamer 插件。

  2. gst-omx 是一个包含一个插件的模块,该插件包装了可用的 OpenMAX IL 组件并使它们作为标准 GStreamer 元素可用。

在以上两点,我认为它们是 OpenMAX IL 包装器的实现。如果它们是 OpenMAX IL 的相同包装器,为什么要通过两种方法来实现它们?任何人对我有任何想法,谢谢你为我解释这个问题。

0 投票
1 回答
161 浏览

c++ - RPi2、OpenMAX、死锁

环境

  • 树莓派 2 B+
  • Debian Linux
  • OpenMAX IL

用例

  • OpenMAX 相机 视频采集
    • 摄像头端口被禁用
    • 渲染器/相机隧道已设置
    • 所有组件状态设置为空闲
    • 端口已启用

问题描述

第一个端口被启用到相机输入端口(端口#73),使用“OMX_CommandPortEnable”命令启用端口,与“OMX_CommandPortDisable”命令一样,相机组件预计会触发它的“OMX_CALLBACKTYPE:: EventHandler”事件处理程序具有“eEvent == OMX_EventCmdComplete”和“nData1 == OMX_CommandPortEnable”,但是,这永远不会发生,应用程序会无限等待端口启用。

问题分析

我将 std::condition_variable 与 std::mutex 结合使用以等待状态更改完成,因此,OMX_CALLBACKTYPE::EventHandler 更新条件变量并调用“notify_one()”,而调用者线程锁定 std::mutex 和等待设置条件变量,使用这种方法“OMX_CALLBACKTYPE::EventHandler”永远不会被调用(带有任何参数),并且程序永远锁定。
注意:当等待条件变量时,互斥锁被验证为不被拥有,这是通过验证 (0 == std::mutex::__owner) 来完成的。
但是,通过迭代调用 usleep 和 OMX_GetParameter(OMX_IndexParamPortDefinition) 轮询端口状态时,一切正常。

手头的问题

为什么在轮询它的值时会触发“OMX_CALLBACKTYPE::EventHandler”,而在使用 conditional_variable 时不会触发?对于 Windows,有 APC 和 Alertable 线程的概念,在 linux 中是否有任何等价物?一个可以解释上面提到的?

0 投票
0 回答
193 浏览

android - android中的openmax,如何从OMX_BUFFERHEADERTYPE获取yuv数据

大家都知道“OMX_BUFFERHEADERTYPE”这个结构体携带数据缓冲区。“pBuffer”字段指向数据缓冲区,“nFilledLen”表示当前缓冲区中的字节数。我尝试从 "OMX.cpp" 中的 "OnFillBufferDone()" 转储 yuvdata,但转储的数据已损坏且不完整。代码如下:

转储 yuv 数据的方法是错误的吗?

你能告诉我如何转储 yuv 吗?谢谢!!!!

0 投票
0 回答
39 浏览

c - 为什么 OpenMax 中的 uuid 是 128 字节?

在 OMX_Types.h 中有

我应该将每一位都存储在一个字符中吗?如果是这样,使用实际数字 0,1 还是使用 ascii 字符'0','1'?