如何在android中播放视频时拍摄videoview的快照?

Posted

技术标签:

【中文标题】如何在android中播放视频时拍摄videoview的快照?【英文标题】:How to take snapshot of videoview while video is playing in android? 【发布时间】:2016-06-08 07:46:50 【问题描述】:

我的黑屏不是视频内容,请帮帮我。

我的代码:

 private Bitmap takeScreenshot() 
    relate.setDrawingCacheEnabled(true);
    relate.buildDrawingCache();
    return relate.getDrawingCache();


private void saveBitmap(Bitmap bitmap) 
    //  File imagePath = new File(Environment.getExternalStorageDirectory()     + "/screenshot.png");

    FileOutputStream fos;
    // String path ="data/data/com.focusmedica.eyeactivity/files/Images" +    filename;

    try 
        fos =new FileOutputStream(path);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
        sentmail(path);
     catch (FileNotFoundException e) 
        Log.e("GREC", e.getMessage(), e);
     catch (IOException e) 
        Log.e("GREC", e.getMessage(), e);
    

我正在使用canvasvideoview 上绘制一些东西。只有我得到黑屏。 我的videoviewrelative layout 里面。 提前致谢.....

【问题讨论】:

你用的是surfaceview还是textureview? 不,我没有同时使用这两个,实际上我是 android 新手,所以我不知道这些东西...@gvsharma 【参考方案1】:

您可以从android 获取视频视图的快照或帧。

你可以试试这个代码来获取videoview帧。

    public static Bitmap createVideoThumbnail(Context context, Uri uri, int i)
    
     MediaMetadataRetriever mediametadataretriever = new MediaMetadataRetriever();

try 
    mediametadataretriever.setDataSource(context, uri);
    Bitmap bitmap = mediametadataretriever.getFrameAtTime(-1L);
    if(null != bitmap)
    
        int j = getThumbnailSize(context, i);
        return ThumbnailUtils.extractThumbnail(bitmap, j, j, 2);
    
    return bitmap;
 catch (Throwable t) 
    // TODO log
    return null;
 finally 
    try
    
        mediametadataretriever.release();
    
    catch(RuntimeException e)  
    

您可以根据需要使用此方法。

【讨论】:

谢谢兄弟,这个方法帮了我很多..@gvsharma @GvSharma 你能告诉我什么是 getThumbnailSize @GowthamanM,它是一种调整位图高度和宽度的方法。【参考方案2】:

我有一个替代解决方案来替换Android MediaMetadataRetrievergetFrameAt 方法。 AV_FrameCapture 使用MediaCodec 解码视频帧并使用OpenGL 将视频帧转换为RGB 位图。由于AndroidMediaMetadataRetriever不保证调用getFrameAtTime时返回结果,所以这个AV_FrameCapture可以用来提取一帧视频,准确度

https://***.com/a/60633395/6676310

【讨论】:

以上是关于如何在android中播放视频时拍摄videoview的快照?的主要内容,如果未能解决你的问题,请参考以下文章

Qt+GStreamer:如何在播放实时视频流时拍摄快照

在 VideoView 中播放流,将 url 转换为 rtsp

在 Android 中播放 RTSP 流视频时如何保持宽高比?

为视频播放器启动新活动时,如何强制android视频播放器在视频播放后不退出

如何在我的 Android 应用程序中播放 YouTube 视频?

如何上传视频 传视频的方法