Rom开发 视频播放器开发

来源:互联网 发布:淘宝网如何找同款 编辑:程序博客网 时间:2024/05/16 17:56

          

1、视频缩略图的获取

通过系统接口读取视频缩略图有以下两个尺寸


          * MINI_KIND: 512 x 384 thumbnail

          * MICRO_KIND: 96 x 96 thumbnail


Bitmap bitmap = MediaStore.Video.Thumbnails.getThumbnail(mContext.getContentResolver(), id,TASK_GROUP_ID,

                MediaStore.Video.Thumbnails.MINI_KIND,null);

 

原生视频应用获取的缩略图是96*96尺寸,若自定义列表视频显示缩略图可以获取512*384尺寸,获取到之后再做相应的裁剪处理得到适当的尺寸。


2、视频媒体数据库的刷新


使用递归查询SD卡文件夹中的视频文件,然后逐个发送扫描广播的方法不合理,在4.2平台上面,可以采用发送Intent.ACTION_MEDIA_MOUNTED广播的方式,这样可以扫描整个SD卡。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,  Uri.parse("file://" + Environment.getExternalStorageDirectory())));

        但在4.4平台上面不能采用发送广播的方式,而是直接调用MediaScannerConnection.scanFile(context,,new String[]{ file_path},null,null);函数扫描特制定的路径;


3、视频截屏

 01、初始视频截屏实现是通过查询视屏文件在SD卡中的绝对文件路径,设置到MediaMetadataRetriever中,之后调用其getFrameAtTime()函数来获取在特定时间点的视频帧图像,但是这种方式不适用于所有情况,当录制的视频是信息中要发送的附件时,此时所录制的视频并未存在在SD卡中,数据库也没此视频文件的任何数据,所以在查询数据库获取视频文件绝对路径的值为空,导致截屏失败。因MediaMetadataRetriever.setDataSource()有多种参数可设置,后续直接采用MovieItem的视频Uri参数(mMovieItem.getOriginalUri())作为抽取视频特定时间帧图像的数据源。

02、实际截屏的处理在MeituVideoUtils.getVideoScreenshot(Context pContext, Uri pUri, long pTime),这边需要注意的是截屏的时间点,是以微秒为单位,截屏的时候获取到的视频播放时间点(毫秒)需要在抽取Bitmap的时候再转化为微秒(bitmap = retriever.getFrameAtTime(pTime * 1000))。

 03、另外一个需要注意的地方是,当从文件管理器中进入视频播放界面,当前所播放视频的Uri是以"file:///"开头的,所以需要对当前视频的Uri做一个转化处理(VideoUtils.constructUriFromFile(Context pContext, Uri pUri)),方便后面的数据使用。


4、播放界面ActionBar样式

播放界面头部栏的半透明背景是调用ActionbarsetBackgroundDrawable()函数实现。

actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.video_play_actionbar_bg)));

头部栏文本颜色采用Html.fromHtml()的样式设置来实现。

        actionBar.setTitle(Html.fromHtml("<font color=\"#FFFFFF\">" + pTitle +"</font>"));


5、视频重命名

初始视频重命名逻辑处理方法是在重命名视频文件之后,删除要重命名的这个视频在数据库中的原始数据,再发送在SD卡中的重命名之后的视频文件扫描广播,将新的数据扫描到媒体数据库中,但这个方法的处理并不具备实时性,会出现在重命名操作之后,在编辑页面列表项的视频文件名显示还是重命名之前的文件名称。后面改成在重命名SD卡中的视频文件之后,直接更新数据库中MediaColumns.DISPLAY_NAMEMediaColumns.DATA两个字段的值。



0 0
原创粉丝点击