SurfaceView和Mediaplayer实现播放网络和本地视频 一
2016-04-14 13:04
916 查看
代码是最好的老师!!直接上代码
xml布局文件:
涉及到播放视频更多内容:
添加自定义控制栏:点击查看
添加缓冲信息:点击查看
package com.example.yaoan.surfaceviewtest; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import java.io.File; import java.io.IOException; /* * *1.VideoView本身就是对SurfaceView和MediaPlayer做了一个封装 *2.实现视频列表播放 * * 如果读取本地文件,和网络的话 需要添加权限 * * */ public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SurfaceView surfaceView; //读取本地文件 private File file=new File("/storage/sdcard1/音乐/", "曾经的你.mp4"); //访问网络视频 private String uri="http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com /D046015255134077DDB3ACA0D7E68D45.flv"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView) findViewById(R.id.surfaceView); mediaPlayer = new MediaPlayer(); //获取SurfaceHolder 可以通过该接口来操作SurfaceView中的Surface SurfaceHolder surfaceHolder = surfaceView.getHolder(); //设置Meiaplayer的准备监听 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { //准备完成后播放 mediaPlayer.start(); } }); surfaceHolder.addCallback(new SurfaceHolder.Callback() { //当SurfaceView中Surface创建时回掉 //该方法表示Surface已经创建完成,可以在该方法中进行绘图操作 @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.reset(); try { //设置视屏文件图像的显示参数 mediaPlayer.setDisplay(holder); //file.getAbsolutePath()本地视频 //uri 网络视频 mediaPlayer.setDataSource(MainActivity.this, Uri.parse(uri)); //prepare();表示准备工作同步进行,(准备工作在UI线程中进行) //当播放网络视频时,如果网络不要 会报ARN 所以不采用该方法 //mediaPlayer.prepare(); //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法 mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } } //当SurfaceView的大小发生改变时候触发该方法 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } //Surface销毁时回掉 //当Surface销毁时候,同时把MediaPlayer也销毁 @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mediaPlayer!=null) { mediaPlayer.stop(); //释放资源 mediaPlayer.release(); } } }); //设置 surfaceView点击监听 surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } else { mediaPlayer.start(); } break; } //返回True代表事件已经处理了 return true; } }); } }
xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.yaoan.surfaceviewtest.MainActivity"> <!--第一步 在布局文件中添加SurfaceView控件--> <SurfaceView android:layout_centerInParent="true" android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/surfaceView" /> </RelativeLayout>
涉及到播放视频更多内容:
添加自定义控制栏:点击查看
添加缓冲信息:点击查看
相关文章推荐
- 2015轻院校赛 D 社交网络(排列组合)
- 网络通信基石Socket (上)
- android端获取网络数据添加到二级列表ExpandableListView
- HTTP 错误 500.21 - Internal Server Error处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 配置Tomcat使用https协议(配置SSL协议)
- 理解HTTP幂等性
- Web压力测试工具 http_load
- 基于Python的TCP阻塞式echo服务器
- 基于GB28181RTPoverTCP的发送程序拾遗
- http://www.devstore.cn/code/info/87.html
- HttpResponse 内容解压
- Can not find the tag library descriptor for "http://www.springframework.org/security/tags"
- Unirest-拼装http请求发送rest接口
- http 请求类
- Show me the code之Python练习册 Q13 获取网络图片
- java web HttpClient 开发一个接口
- libevent异步IO读写操作
- 浅谈TCP(传输控制协议)的可靠性
- IOS开发之网络数据Json处理
- Atitit.获取某个服务 网络邻居列表 解决方案