VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件。

既然是播放一段视频,那么不可避免的要涉及到一些开始、暂停、停止等操作,VideoView也为开发人员提供了对应的方法,这里简单介绍一些常用的:

int getCurrentPosition():获取当前播放的位置。

int getDuration():获取当前播放视频的总长度。

isPlaying():当前VideoView是否在播放视频。

void pause():暂停

void seekTo(int msec):从第几毫秒开始播放。

void resume():重新播放。

void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。

void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。

void start():开始播放。

void stopPlayback():停止播放。

setMediaController(MediaController controller):设置MediaController控制器。

setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。

setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。

setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件。

上面的一些方法通过方法名就可以了解用途。和MediaPlayer配合SurfaceView播放视频不同,VideoView播放之前无需编码装载视频,它会在start()开始播放的时候自动装载视频。并且VideoView在使用完之后,无需编码回收资源。

有播放视频时需要获取视频的某一帧的图片进行操作,这时MediaMetadataRetriever类就派上了用场:

MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();

mediaMetadataRetriever.setDataSource(dataPath);

获取一帧的关键代码为:

Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(timeMs * 1000, MediaMetadataRetriever.OPTION_CLOSEST);

public Bitmap getFrameAtTime(long timeUs, int option)

第一个参数是传入时间,只能是us(微秒)

第二个参数:

OPTION_CLOSEST 在给定的时间,检索最近一个帧,这个帧不一定是关键帧。

OPTION_CLOSEST_SYNC 在给定的时间,检索最近一个同步与数据源相关联的的帧(关键帧)。

OPTION_NEXT_SYNC 在给定时间之后检索一个同步与数据源相关联的关键帧。

OPTION_PREVIOUS_SYNC 顾名思义,同上

这里为了提取我们想要的帧,不使用关键帧,所以用 OPTION_CLOSEST .

最终的测试结果并不理想,连续取20帧画面,其中真正有效的只有7张,其余都是重复的,原因为即使是使用参数OPTION_CLOSEST,程序仍然会去取指定时间临近的关键帧,如10s-15s总是取同一帧,因此这种方法不可用。

提高视频的质量或许有效,未尝试。

补充MediaMetadataRetriever的其他知识

// 取得视频的总长度(单位为毫秒)

String time = mediaMetadataRetriever. extractMetadata( MediaMetadataRetriever. METADATA_KEY_DURATION);

MediaMetadataRetriever主要用来取缩略图。

android videoview属性,Android VideoView相关推荐

  1. android layout_width 属性,android:layout_weight属性详解

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  2. android preference属性,Android进阶——Preference详解之Preference系的基本应用和管理(二)...

    并非我们第一次打开相应界面之后就会自动创建对应的SharedPreferences文件,而是在我们改变了原有状态时候喎�"/kf/ware/vc/" target="_b ...

  3. android videoview属性,Android VideoView无法播放视频错误,特别是.mp4

    @H_502_1@我正在尝试在我的应用程序中播放视频,但我得不能播放此视频错误.关于这一点,我遇到了很多线索.他们要求在玩家准备好后开始播放视频.我也是这样做的.但无法弄清楚问题.请在下面找到我的代码 ...

  4. Android 布局属性 Android:layout_weight 总结

    Android 为我们提供了五种布局方式 线性布局:LinerLayout 表格布局:TableLayout 相对布局:RelativeLayout 绝对布局:AbsoluteLayout 帧布局:F ...

  5. android布局属性,Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline...

    相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的: 那到底这个属性是做什么用的呢? baselineAlig ...

  6. 没有android:padding属性,android pading的四个值,为负值时,什么情况下,有效啊

    在我的理解中, 设置 padding 为负值和设置为0在显示上不会有什么区别, 所以, 你想要的效果是什么? OK, 之前没有自习考虑这个问题, 现在帮你分析一下. 首先, 从 xml 中解析 pad ...

  7. 没有android:padding属性,android自定义无上下padding的textview

    因为工作需要需要无上下padding的textview,经过查阅资料,很多说xml中的配置includefontpadding=false,但无法实现0 padding的需要. 也有说通过设置负数的m ...

  8. Android 自定义控件属性

    前言 自定义控件经常需要一些特殊的配置,添加一些自定义属性. 1. 自定义属性 attrs.xml文件,所有自定义属性需要在文件中添加declare-styleable节点来声明,例如定义属性back ...

  9. android @style/name,android style和attr的用法

    一  .对style和attr的引用 1. 当引用平台的style做为style的parent时,[email protected]:style/主题" == [email protecte ...

最新文章

  1. CBV 验证装饰器的使用
  2. Netflow/IPFIX 流量收集与分析
  3. Hibernate配置文件,省的到处找了
  4. autorelease使用注意事项
  5. 【Pytorch学习】用pytorch搭建第一个神经网络
  6. C++ code:string stream(string流)学习大全
  7. 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
  8. layer弹出层 获取index
  9. IT编程从零开始学入门到精通需要多久
  10. 景区分时实名预约系统
  11. 汽车金融信用评分卡模型-论文毕业设计复现
  12. 从零到上亿用户,我是如何一步步优化MySQL数据库的?(建议收藏)
  13. 父亲节php源码,剑盟社区-【父亲您在,世界就在】6月20日父亲节系列活动
  14. 快来带您了解中秋节的前世今生
  15. 在 Half-Life MOD 中创建自己的武器及弹药
  16. 分享一个微信公众号id转换为biz的接口
  17. 【榜单公布】10·24征文活动结果出炉!
  18. Vue项目provide和inject的使用
  19. 沈阳市房地产市场信息系统数据容灾与异地备份
  20. SQL Server HA - 数据库镜像 (Mirroring)

热门文章

  1. idea右键项目没有git 【解决方法】
  2. 在项目组也有段时间了,你对系统架构师了解过吗?
  3. leetcode 467. Unique Substrings in Wraparound String | 467. 环绕字符串中唯一的子字符串(动态规划)
  4. ACM练习 链表排序 II 【WA】
  5. dart系列之:安全看我,dart中的安全特性null safety
  6. Intellij IDEA中安装使用PlantUML画时序图、类图等
  7. 可迭代协议与for-of循环
  8. 【通俗易懂】什么是状态机?
  9. 【千字分析】剑指 Offer 05. 替换空格
  10. 1036 跟奥巴马一起编程 (15分)——16行代码AC