Android含视频的截屏

最近在做一个关于一个界面的截屏功能,但是因为含有视频模块,在使用getDrawingCache时会出现视频部分黑屏的情况。主要是因为视频和Activity的展示不是一个通道,视频使用了硬件解码的原因。
在网上找了一下,发现了一种工具类MediaMetadatRetriever可以获取媒体信息,所以就用了此类来获取视频的缩略图。具体代码如下
 
ViewGroup v = (ViewGroup) myActivity.getWindow().getDecorView();
            View view = v.getRootView();
            view.setDrawingCacheEnabled(true);
            view.buildDrawingCache();
            Bitmap newBitmap = view.getDrawingCache();//获取activity的截屏
            String fnm=Settings.libraryPath + Settings.displayName + ".png";//保存在本地的图片名称


            Bitmap bitmap = null;
            String filePath = null;
            MediaMetadataRetriever retriever = new MediaMetadataRetriever();
            try {
                if(videoName !=null){
                    filePath = videoName;                                       //本地视频的路径
                    if(currentVideoTime==null || "".equals(currentVideoTime)){
                        currentVideoTime="0";
                    }else{
                        currentVideoTime = "" + (System.currentTimeMillis() - Long.parseLong(currentVideoTime));
                    }
                    retriever.setDataSource(filePath);
                    // 取得视频的长度(单位为毫秒)
                    //String timeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
                    // 取得视频的长度(单位为秒)
                    //int seconds = Integer.valueOf(timeString) /1000;
                    //Log.v("PowerMediaProject-ScreenshotManager-createVideoBitmap","time = " + seconds);
                    bitmap = retriever.getFrameAtTime(
//                            Long.parseLong(currentVideoTime),
                            videoView.getCurrentPosition()*1000,
                            MediaMetadataRetriever.OPTION_CLOSEST);//获取时间点的缩略图
                    bitmap = zoomImg(bitmap,video_w,video_h);
                    Canvas cv = new Canvas(newBitmap);
                    cv.drawBitmap(bitmap,video_left,video_top, null);//在activity的截屏上left,top坐标开始画入视频缩略图
                    cv.save(Canvas.ALL_SAVE_FLAG);//保存
                    cv.restore();//存储
                    LogMessage.write(1,"截取视频成功"+videoName+"截屏时间"+
//                            currentVideoTime
                                    videoView.getCurrentPosition()*1000
                    );
                }else{
                    LogMessage.write(1,"没有视频截图");
                }
                if (newBitmap != null) {
                    try {
                        FileOutputStream out = new FileOutputStream(fnm);
                        newBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);//把截图保存在本地
                        out.flush();
                        out.close();
                    } catch (Exception ex) {
                        LogMessage.write(1, ex.getMessage() + ": error in take screenshot");
                    }
                } else LogMessage.write(1, "error in take screen shot,empty bitmap");
                Settings.ftp.ftpUpload("/htdocs/sibo/mystore/apk", fnm,Settings.displayName+".png" ,putScreenShot);
                return;
            } catch (Exception e) {
                Log.e("PowerMediaProject","fail to videoScreen"+e.getMessage());
            }
我的视频下载到了本地,网络源的没有测试不知道能不能使用。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值