当前位置: 首页 > news >正文

Android多媒体功能开发(8)——使用VideoView控件播放视频

Android播放视频类主要有两种方式:

  1. VideoView控件
  2. SurfaceView控件+MediaPlayer

VideoView是SurfaceView的子类,实际上VideoView相当于SurfaceView + MediaPlayer。SurfaceView支持的功能VideoView都支持。也可用VideoView+MediaPlayer的方式播放。

视频播放控制可以使用MediaController控件,也可以用代码进行控制。MediaController是一个播放控制面板,可以加到VideoView控件上。同时,SurfaceView和VideoView都提供了播放控制的方法,所以可以用代码进行播放控制。


用VideoView播放视频的基本步骤是:创建或获取VideoView控件、设置视频数据源、开始播放、停止播放、释放资源。播放过程中可以暂停和继续。停止播放后可以恢复,此时会再从头播放。也可以重新设置视频数据源,播放另一个视频。基本流程和对应的代码如下图:

下面用一个简单的例子进行说明,界面和对应的关键代码如下:

视频源采用外部存储上的视频,通过视频选择界面进行选择。若要播放资源ID或assets中的文件,需采用VideoView+MediaPlayer的方式。在界面上用四个按钮对应VideoView对象的相应方法进行播放控制。设置一个播放控制面板,需点击视频才能出现,会自动隐藏。

例子的完整代码如下:

public class MainActivity extends AppCompatActivity {VideoView videoView;static final int PICK_VIDEO = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LinearLayout ll = new LinearLayout(this);ll.setOrientation(LinearLayout.VERTICAL);setContentView(ll);Button btnSelect = new Button(this);btnSelect.setText("Select Video");ll.addView(btnSelect);btnSelect.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0) {Intent intent = new Intent(Intent.ACTION_GET_CONTENT);   //  选择文件动作intent.setType("video/*");startActivityForResult(intent, PICK_VIDEO); //  启动文件选择应用}});Button btnPlay = new Button(this);btnPlay.setText("Play");ll.addView(btnPlay);btnPlay.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0) {videoView.start();}});Button btnPause = new Button(this);btnPause.setText("Pause");ll.addView(btnPause);btnPause.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0) {videoView.pause();}});Button btnResume = new Button(this);btnResume.setText("Resume");ll.addView(btnResume);btnResume.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0) {videoView.resume();}});Button btnStop = new Button(this);btnStop.setText("StopPlayback");ll.addView(btnStop);btnStop.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0) {videoView.stopPlayback();}});// 创建VideoView对象videoView = new VideoView(this);// 设置播放控制面板MediaController controller = new MediaController(this);videoView.setMediaController(controller);// 将VideoView控件添加到布局ll.addView(videoView);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//  处理选择视频的结果,选中的图片文件的uri保存在Intent的getData()中if (requestCode == PICK_VIDEO && resultCode == RESULT_OK) {Uri uri = data.getData();   //  得到选中的视频文件的uriLog.i("zzk", "选择视频成功, uri=" + uri);videoView.setVideoURI(uri);}}@Overrideprotected void onDestroy(){super.onDestroy();videoView.suspend();}
}

VideoView类的主要方法包括:

  • void setVideoPath(String path):以文件路径的方式设置视频源
  • void setVideoURI(Uri uri):以Uri的方式设置视频源,网络Uri或本地Uri
  • void start():开始播放
  • void pause():暂停,调用start()可以继续
  • void stopPlayback():停止播放,调用resume()可以从头重新播放
  • void resume():重新播放
  • int getDuration():获取当前播放视频的总长度,单位为毫秒
  • int getCurrentPosition():获取当前播放的位置,单位为毫秒
  • void seekTo(int msec):从第几毫秒开始播放
  • isPlaying():是否在播放视频
  • setMediaController(MediaController controller):设置MediaController控制器
  • setOnCompletionListener(MediaPlayer.onCompletionListener l):设置监听播放完成的事件
  • setOnPreparedListener(MediaPlayer.OnPreparedListener l):设置监听视频装载完成的事件
http://www.lryc.cn/news/43628.html

相关文章:

  • python调用CC++
  • [golang gin框架] 10.Gin 商城项目介绍
  • Endor Labs:2023年十大开源安全风险
  • 关于Error和Exception的一些思考 小结
  • Mac环境变量配置(Java)
  • 通过这三个文件彻底搞懂rocketmq的存储原理
  • Linux安装Nvidia显卡驱动
  • GPT-4 介绍
  • Ubuntu下单机安装Hadoop详细教程(附所需安装包下载)
  • 【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件
  • 【云原生】初识 Kubernetes — pod 的前世今生
  • 【基础篇】Java类加载器详解
  • Pytorch动手实现Transformer机器翻译
  • 宝塔面板部署node+vue项目注意事项
  • 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version
  • fisco bcos用caliper0.2.0进行压力测试的安装配置
  • 正在进行 | 用友企业数智化财务峰会落地广州 高能不断
  • uniapp - APP云打包、蒲公英平台发布APP的步骤
  • reposync命令详解--reposync同步aliyunyum库到本地
  • OCR之论文笔记TrOCR
  • 雷电4模拟器安装xposed框架(2022年)
  • 微信小程序支付完整流程(前端)
  • 设置鼠标右键打开方式,添加IDEA的打开方式
  • LAMP架构之zabbix监控(2):zabbix基础操作
  • ShareSDK常见问题
  • [Spring]一文明白IOC容器和思想
  • 程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)
  • MATLAB | R2023a更新了哪些好玩的东西
  • Python Module — OpenAI ChatGPT API
  • Docker学习记录