问题标签 [grafika]

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

android - 触摸屏上 Android Lollipop 的视频延迟和 FPS 下降

我正在使用 MediaCodec 播放 1080p@60fps 视频。这是在带有 Android Lollipop 5.1 的飞思卡尔 SabreSD 平台上。

最初是因为 BufferQueue 同步模式,FPS 远低于 60。我现在可以通过将 BufferQueue 更改为 JB 中的异步来设法以 70FPS 播放。

现在我面临的下一个挑战是当我开始与屏幕交互(下拉通知栏、按下音量按钮等)时,视频延迟和 FPS 急剧下降到 40。

所以我运行了 rafika MultiSurfaceActivity 和 Record GL,当没有触摸或干扰屏幕时,我可以看到所有测试顺利播放,但是一旦我开始从顶部滚动通知栏并继续很长时间,fps 就会降低到 35 -40FPS。

我已经在 Kitkat 4.4.2 和 JB 4.2.2 上确认了相同的测试,它们似乎工作正常。

从画廊播放 MP4 时的行为相同。当我们开始使用通知栏播放时,视频卡住并滞后很多

谁能解释从 Kitkat 到 Lollipop 的变化可能导致这个问题(VSync,三重缓冲?)。

0 投票
0 回答
1686 浏览

android - MediaCodec createInputSurface 失败,出现 -38

我启动 grafika,出现一个对话框并显示“无法生成内容。某些功能可能不可用。无法使用带有软件编解码器的输入表面:OMX.google.h264.encoder”

然后我点击确定按钮并进入连续捕获活动,应用程序崩溃。

我的设备信息如下:

我确定这是关键日志:

如何解决这个问题?

0 投票
1 回答
1833 浏览

android - Android MediaCodec 后向搜索

我正在尝试使用MediaCodec和实现对视频的精确搜索MediaExtractor。通过关注 Grafika 的MoviePlayer,我已经成功实现了前向搜索。但是我仍然有向后搜索的问题。相关的代码在这里:

基本上和MoviePlayer的doExtract方法是一样的。我只是添加了一些修改以返回到前一个关键帧,而不是向前解码到我想要的位置。我也在这里遵循了fadden的建议,但收效甚微。

另一个问题,据我了解,ExoPlayer 是基于 构建的MediaCodec,那么为什么它可以很好地播放 iOS 录制的视频,而 MoviePlayer 的纯实现MediaCodec却不能呢?

0 投票
0 回答
706 浏览

android - 使用 MediaRecorder 录制视频

我目前正在使用 Grafika 的 TextureFromCameraActivity 以正方形 (1:1) 分辨率录制视频。因此,我使用 GLES20.glViewport 以便视频移动到顶部并且看起来是方形的。现在我想使用 MediaRecorder 记录这个方形视图,或者至少以正常分辨率记录相机,然后使用 FFmpeg 对其进行裁剪。但是我一遍又一遍地遇到同样的错误,我不知道为什么。

我得到的错误:

以无效状态开始调用:4

是的,我添加了所有必要的权限。

android.permission.WRITE_EXTERNAL_STORAGE android.permission.CAMERA android.permission.RECORD_VIDEO android.permission.RECORD_AUDIO android.permission.STORAGE android.permission.READ_EXTERNAL_STORAGE

这里修改后的代码:

https://github.com/google/grafika

感谢您的帮助:D

0 投票
1 回答
876 浏览

android - Android:使用 MediaCodec 和 MediaMuxer 录制时裁剪视频

我正在尝试使用 GLSurfaceView 和 AudioRecord 中的音频录制视频。在 MediaMuxer 中,我在调用 onFrameAvailable 时同时发送音频和视频数据。我将相机预览大小设置为 1280 * 720 并全屏预览。我在将帧裁剪为 600 * 600 时遇到问题。谁能帮我在编码为 MediaCodec 和 MediaMuxer 之前裁剪视频帧。

我正在从 Grafika android 演示代码中获得帮助

0 投票
1 回答
572 浏览

android - Android MediaCodec 可以同时解码到两个 Surface 吗?

我正在尝试改进我们应用程序的帧提取。基本上我所做的是将 Grafika 的MoviePlayer前向搜索解决方案和 BigFlake 的解决方案结合起来ExtractMpegFramesTest提取帧。对于提取,我回溯到前一个关键帧,然后向前解码,只保存最后一帧。像这样的东西(有关更完整的解释,请参阅我之前的问题):

问题有时是从extractor.getSampleTime()向后搜索然后向前解码时检索的样本时间似乎与直接向前搜索的时间不匹配。

我已经包含了一个日志以使这一点更清楚:

如您所见,在前向搜索中extractor.getSampleTime()可以到达位置12137125,而后向搜索然后向前解码,它只能到达12128783。我不确定它为什么会发生,但这会导致表示帧和提取帧之间不匹配。EGLSurface这种方法也不是很有效,因为每次我需要提取帧时我都必须设置一个并解码它。根据所需帧与前一个关键帧的距离,此操作可能需要 3 到 5 秒,对于多次提取来说肯定太长了。

我想问一下是否有可能使解码器同时解码到两个表面(一个SurfaceView用于显示和一个EGLSurface用于帧检索),以便我可以潜在地解决这些准确性和性能问题。

我之前也尝试过使用 FFmpeg 检索帧,性能大致相同。如果有比使用 OpenGL 更好的检索帧的方法,我非常愿意尝试。

编辑:经过进一步测试,我可以匹配这extractor.getSampleTime()两种方法,即使检索到的帧有时可能与显示帧不匹配。

编辑2:关于显示帧和提取帧之间的不匹配,它实际上非常简单,但如果你不知道它是如何MediaCodec工作的,一开始会很混乱。我必须重新阅读每一个 fadden 的评论以更好地理解这个问题(是给我那个“啊哈”时刻的那个)。

简而言之,解码器喜欢在吐出任何表示缓冲区之前消耗多个缓冲区。所以当前显示的那个和当前位置的那个是不一样的extractor.getSampleTime()。所以显示和提取之间要同步的正确值应该是输出缓冲区的presentationTime,如下所示:

mCurrentSampleTime = mBufferInfo.presentationTimeUs;

理解这一点有助于解决许多神秘的问题(例如为什么第一帧不在 0 位置?)。希望这会对某人有所帮助。

0 投票
0 回答
175 浏览

java - 如何从 EGLSurface 获取 Surface 对象?

我需要将视频流中的帧写入图像文件。流来自GStreamer Player,因此需要将其定向到Surface对象(它不接受EGLSurface)。但是,我正在尝试使用Grafika作为输出,OffscreenSurface以便我可以调用saveFrame(File file)以将最新帧保存到文件中。

所以问题是OffscreenSurface使用 aEGLSurface而不是 a Surface,所以我不能将它设置为流的输出位置,因为Player#setSurface(Surface surface)需要 a Surface

有没有办法Surface在创建时获取对象EGLSurface,或者可能在OffscreenSurface从 Grafika 创建时获取对象?

0 投票
1 回答
939 浏览

android - eglPresentationTimeANDROID():我可以使用 microedition.khronos 代替 android.opengl 吗?

我想在我的(从 GLSurfaceView 扩展)中使用eglPresentationTimeANDROID 。ExtendedGLSurfaceView

该方法出现在:

我的主要问题是GLSurfaceView使用EGLDisplay,EGLContextEGLSurfacefrom javax.microedition.khronos.egl。但是,eglPresentationTimeANDROID需要EGLDisplayEGLSurfaceandroid.opengl.EGLDisplay

有什么快速解决办法吗?还是我需要重做所有ExtendedGLSurfaceView要使用的android.opengl课程?

0 投票
1 回答
1728 浏览

android - OMX.qcom 编码器随机崩溃

该应用程序基于 Grafika 的相机捕捉活动 ( https://github.com/google/grafika/tree/master/src/com/android/grafika )。用户点击一个按钮来录制视频。Nexus 5x 发生随机崩溃。下面发布了 2 个日志,说明它何时工作,何时不工作。请告诉我这次崩溃的可能原因以及您是否需要我发布代码的任何部分。

在职的:

发生崩溃时:

0 投票
1 回答
524 浏览

android - android mediacodec 编码丢帧

你好,我尝试使用Android MediaCodec进行编码。我遵循“grafika”的代码,但我发现编码视频丢了一些帧。我检查了我的输入,每一帧都彼此不同,但是在我的编码输出视频中,例如,第 71 帧与第 72 帧相同,第 99 帧与第 100 帧相同。另一帧与输入序列相同。

我使用 OpenGL ES,并在编码中使用表面。我的帧率是30,码率是1920*1080*30,Iframe intervel是1s。

mediacodec 编码有什么问题吗?