Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上以自定义播放速度播放视频?_Android_Performance_Video_Ffmpeg_Openmax - Fatal编程技术网

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

如何在Android上以自定义播放速度播放视频?,android,performance,video,ffmpeg,openmax,Android,Performance,Video,Ffmpeg,Openmax,我想在Android中播放视频,将其渲染为SurfaceTexture或其他可用作OpenGL ES纹理的东西,但我需要非常精确地控制视频的播放速度,以便将其与外部事件流同步。这些事件将以大致可预测的速度发生,但确切的速度将取决于许多小的机械细节,受许多小因素的影响,包括天气(甚至可能是月亮的相位…) android提供的android.media.MediaPlayer类允许渲染到SurfaceTexture(Oculus Mobile SDK中的360Videos应用程序成功地使用了该功能)

我想在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是否允许我自己计时…

您可以通过ffmpeg lib来完成。github.com中有一个android播放器使用ffmpeg的现成示例。您可以通过ffmpeg lib来实现。github.com中有一个android播放器使用ffmpeg的现成示例。