Rom开发 视频播放器开发

本文深入探讨了视频缩略图获取、媒体数据库刷新、视频截屏、播放界面设计及视频重命名等关键技术,提供了从视频文件管理到播放界面定制的一系列解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          

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两个字段的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值