Java 捕获视频(摄像头API)并简单使用MediaCodec

Java 捕获视频(摄像头API)并简单使用MediaCodec,java,android,camera,android-mediacodec,Java,Android,Camera,Android Mediacodec,最近,我与MediaRecorder合作捕获视频并在输出中处理它们。然而,事实证明,存在安全限制,不允许我从MediaRecorder捕获输出流。下面的链接中显示了问题: 因此,我不得不详细阐述另一个解决方案,并决定使用Camer API并将流放到那里。因此,第一种方法是使用onPreviewFrame,捕获文件中的帧并转换颜色和格式MediaCodec。幸运的是,如bigflakes项目中所述,通过从例如SuraceTexture获取视频,可以避免颜色转换问题: 我不是一个完全的Android

最近,我与MediaRecorder合作捕获视频并在输出中处理它们。然而,事实证明,存在安全限制,不允许我从MediaRecorder捕获输出流。下面的链接中显示了问题:

因此,我不得不详细阐述另一个解决方案,并决定使用Camer API并将流放到那里。因此,第一种方法是使用onPreviewFrame,捕获文件中的帧并转换颜色和格式MediaCodec。幸运的是,如bigflakes项目中所述,通过从例如SuraceTexture获取视频,可以避免颜色转换问题:

我不是一个完全的Android Java新手,但这真的让我不知所措。我不想要一张现成的收据,我可以在接下来的一周里坐下来工作,破解代码,但首先我的问题是:你们是如何理解MediaCodec从SurfaceTexture中获取视频,然后将其放入MediaMuxer的,其次,你们能推荐一些教程吗,您从该主题的最简单项目开始,然后逐步扩展代码

我真的试着在bigflakes项目上工作,但我无能为力,即使缺少onCreate方法。。最好的部分是在他开始渲染视频时开始的。

Bigflakes包含了MediaCodec的大部分测试,如果您仍然坚持使用它作为参考,那么从encodeCameraToMpeg开始,也可以看看如何设置MediaCodec编码器

对于工作视频捕获示例,请查看。有关如何解码录制的视频的示例,请查看Google Samples repo中提供的

将MediaCodec与Camera1 API一起使用的优点是,您将能够支持API级别为18及以上的设备。如果您只针对API级别21及以上,那么Camera2应该可以工作,如果需要,这里有一个供您参考的示例

最后,也许值得一看新的CameraX API,尽管它还不应该在生产中使用,这是android的camera API的发展方向。因此,可能值得一看,并通过一两个指南,例如:提前获得基本的想法

注意-不要在生产代码中使用CameraX API,因为
CameraX库处于alpha阶段,其API表面尚未最终确定。我只是将其作为一个选项提供给您,供您随时查看,以备将来参考。

您指的是Camera2 API吗。另外,您希望使用MediaCodec的目的是什么?简单地将帧保存为图像或视频,或者处理每个帧的数据,或者将所述数据转换为合适的格式,以便将其传送到其他地方?谢谢您的回复。使用MediaRecorder和FileDescriptor,我能够捕获已经在Mp4中转换的输出流,但这在牛轧糖和棉花糖上不起作用。现在的想法是使用Camera API 1在onPreviewFrame上捕捉帧,然后将其转换为mp4或AndroidView中的任何可播放格式。通过bigflake,我知道你可以访问SurfacetTexture上的流,并从那里通过到之间的所有步骤将其转换,例如到Mp4。如果可能的话,在保存最终输出之前,我想再次捕获字节流,并将其转移到其他地方。谢谢!如果可能的话,如果我成功了,我会给你留言。@KOalaDelYtaPLaYa我想你没有成功。@BugsHappen相反,我已经成为了这方面的专家。我建议每个人都不要放弃,而是努力追求自己的目标,并要求自己放弃!