SurfaceView和Mediaplayer实现播放网络和本地视频 一

时间:2025-01-26 17:44:15
package ; import ; import ; import ; import .; import ; import ; import ; import ; import ; import ; /* * *本身就是对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/ /"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(.activity_main); surfaceView = (SurfaceView) findViewById(); mediaPlayer = new MediaPlayer(); //获取SurfaceHolder 可以通过该接口来操作SurfaceView中的Surface SurfaceHolder surfaceHolder = (); //设置Meiaplayer的准备监听 (new () { @Override public void onPrepared(MediaPlayer mp) { //准备完成后播放 (); } }); (new () { //当SurfaceView中Surface创建时回掉 //该方法表示Surface已经创建完成,可以在该方法中进行绘图操作 @Override public void surfaceCreated(SurfaceHolder holder) { (); try { //设置视屏文件图像的显示参数 (holder); //()本地视频 //uri 网络视频 (MainActivity.this, (uri)); //prepare();表示准备工作同步进行,(准备工作在UI线程中进行) //当播放网络视频时,如果网络不要 会报ARN 所以不采用该方法 //(); //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法 (); } catch (IOException e) { (); } } //当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) { (); //释放资源 (); } } }); //设置 surfaceView点击监听 (new () { @Override public boolean onTouch(View v, MotionEvent event) { switch (()) { case MotionEvent.ACTION_DOWN: if (()) { (); } else { (); } break; } //返回True代表事件已经处理了 return true; } }); } }