Android视频播放器
来源:互联网 发布:殊知的意思是什么 编辑:程序博客网 时间:2024/04/29 15:54
- Android视频播放器
- 本地视频播放器
- 界面设计
- 功能实现
- Activity回到前台继续播放
- 在线视频播放器
- 部署Web应用
- 修改DataSource
- failed status0x80000000 错误
- 本地视频播放器
Android视频播放器
分为两部分,本地视频播放器,和在线视频播放器,与音乐播放器类似,主要是用到了提供的MediaPlayer对象,此处与音乐播放器不同是需要一个SurfaceView
控件,来实现对视频画面的显示,并且要求当Activity不在前台时视频播放停止,当Activity回到前台时,视频播放继续。
本地视频播放器
本地视频播放器应用的实现主要分为以下两个步骤:
设计界面,与音乐播放器不同的是加入了
SurfaceView
控件
设计播放,暂停,停止,重播四个Button的onClick
事件
界面设计
比较简单,主要包括以下部分:
1. 文本输入框来获取本地视频文件的路径。
2. 四个Button
对应播放、暂停、重播、停止。
3. SurfaceView
控件用来显示视频画面。
代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/filename" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/filename" android:text="http://10.170.61.83:8080/videonews/oppo.3gp" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" android:id="@+id/playbutton" android:onClick="mediaplay" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pause" android:id="@+id/pausebutton" android:onClick="mediaplay" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/reset" android:id="@+id/resetbutton" android:onClick="mediaplay" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" android:id="@+id/stopbutton" android:onClick="mediaplay" /> </LinearLayout> <SurfaceView android:layout_width="fill_parent" android:layout_height="240dp" android:id="@+id/surfaceView" /></LinearLayout>
功能实现
主要对四个Button的onClick事件完成编写,这里以播放按钮为例:
1. 从文本输入框获取本地视频文件的路径。
2. 获取SurfaceView对象,并且通过getHolder()
获取SurfaceView的控制对象从而进行配置。例如:
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区。
3. 创建MediaPlayer对象,并且进行配置:
mediaPlayer.reset();mediaPlayer.setDataSource(path);//本地路径mediaPlayer.setDisplay(surfaceView.getHolder());//输出位置mediaPlayer.prepare();//缓冲mediaPlayer.setOnPreparedListener(new PrepareListener(position));
这里我们还要创建一个内部类来实现OnPreparedListener接口,用来完成对缓冲完成事件的监听:
private final class PrepareListener implements OnPreparedListener{ private int position; public PrepareListener(int position) { this.position = position; } public void onPrepared(MediaPlayer mp) { if(position>0) mediaPlayer.seekTo(position); mediaPlayer.start();//播放视频 } }
这里我们不难发现,事实上这与音乐播放器的第一个区别在于对MediaPlayer对象配置时要指定视频流的输出对象,这里使用setDisplay()
方法来实现,需要一个SurfaceHolder
对象作为参数,我们通过getHolder()
方法来获取这个对象。
Activity回到前台继续播放
之前的音乐播放器我们通过Activity的生命周期方法onPause()
和onResume()
方法来实现Activity不在前台时停止音乐播放,回到前台时继续播放。
这里有一点非常重要:
SurfaceView所在的Activity离开前台后,该SurfaceView被摧毁,而当该Activity回到前台后,onResume()
方法执行以后,SurfaceView才被创建,因此,我们要为SurfaceView添加一个回调用来监听SurfaceView重新被创建的事件。
surfaceView.getHolder().addCallback(new SurfaceCallback());
这里我们编写内部类来实现callback接口:
private final class SurfaceCallback implements Callback{ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceCreated(SurfaceHolder holder) { if(position>0 && path!=null){ play(position); position = 0; } } public void surfaceDestroyed(SurfaceHolder holder) { if(mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); } } }
在线视频播放器
要实现在线视频播放,首先咱们的视频文件得是流媒体文件,这里有两种分发类型:
渐进式下载,使用HTTP协议或FTP协议。
实时流媒体,使用RTP,RTSP协议。(需要流媒体服务器)
部署Web应用
将流媒体文件放到Web应用的WebRoot文件夹下,并将Web应用部署到tomcat上,这时,我们打开浏览器,访问这个文件,是可以通过浏览器直接下载该文件,证明web应用部署正确。
修改DataSource
这里把原来的本地路径改为网络路径,例如:xxx.xx.xx.xx:8080/webapp/test.3gp
。
failed.: status=0x80000000 错误
记得添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
至此,完成了本地和网络视频的播放功能。
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android视频播放器
- Android视频播放器
- Android--视频播放器
- Android 视频播放器
- android 视频播放器
- Android-视频播放器
- Android 视频播放器
- android视频播放器
- Android 视频播放器
- Android视频播放器
- Android视频播放器
- Android视频播放器
- strace追踪多线程程序
- 【Android游戏开发之四】基础的Android 游戏框架(一个游戏角色在屏幕行走的demo)
- C++内存管理
- Office Online的“在Word中编辑”不可用,因为相关URL Protocol缺失
- Javascript操作Select和Option
- Android视频播放器
- 初学数据结构自己写的二叉树,方便以后看
- 慕课网JDBC
- 为项目编写Readme.MD文件
- Volley的基本使用(1)——http请求
- Android开发者文档笔记(三)
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 出现次数最多的数
- 华为路由器DHCP中继