MediaMetadataRetriever mediaMetadataRetriever=new MediaMetadataRetriever(); //should be stored as an instance variable
mediaMetadataRetriever.setDataSource(mVideo.getVideoUrl(Video.SD));
int time = videoView.getCurrentPosition()* 1000; //micro-to-milliseconds
Bitmap bmFrame = mediaMetadataRetriever.getFrameAtTime(time);
字符串
编辑:
要检索原始字节数据而不涉及UI,您可以逐帧推进时间,获取Bitmap并将其转换为字节数组。 为了提高效率,考虑fork FFmpegMediaMetadataRetriever,它的FFmpegMediaMetadataRetriever.java有方法private native byte [] _getFrameAtTime(long timeUs, int option);,跳过整个Bitmap转换过程。
3条答案
按热度按时间4bbkushb1#
可以使用MediaMetadataRetriever:
字符串
编辑:
要检索原始字节数据而不涉及UI,您可以逐帧推进时间,获取Bitmap并将其转换为字节数组。
为了提高效率,考虑fork FFmpegMediaMetadataRetriever,它的
FFmpegMediaMetadataRetriever.java
有方法private native byte [] _getFrameAtTime(long timeUs, int option);
,跳过整个Bitmap转换过程。bnl4lu3b2#
如果使用TextureView和SurfaceTexture包裹在Surface中,则可以执行此操作。
https://developer.android.com/reference/android/view/TextureView#getBitmap()
如果想以非视觉方式进行,您可以使用ImageReader的Surface和PixelCopy(Android N+)。
注意事项:
这个项目展示了. https://github.com/dburckh/HeifViewer
beq87vna3#
试试这个:
字符串
}