package com.curiousby.baoyou.cn.DemoMediaPlayer.activity; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.SeekBar; import java.io.File; import java.io.IOException; import java.util.Timer; import java.util.TimerTask; import com.curiousby.baoyou.cn.R; /* * *1.VideoView本身就是对SurfaceView和MediaPlayer做了一个封装 *2.实现视频列表播放 * * 如果读取本地文件,和网络的话 需要添加权限 * * */ public class MainActivity extends Activity { private MediaPlayer mediaPlayer; private SurfaceView surfaceView; private SeekBar seekbar; //读取本地文件 private File file=new File("/storage/emulated/legacy/Pictures/Screenshots", "1.mp4"); //访问网络视频 private String uri="http://7xqwgk.com1.z0.glb.clouddn.com/mysqlconsole.mp4"; protected TimerTask timeTask; private Timer timer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("baoyou", "file.exists()"+file.exists()); seekbar = (SeekBar) findViewById(R.id.sb_video_seekbar); 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(); //本地视频 seekbar.setEnabled(true); //Log.e("baoyou", file.length()+""+"=========mediaPlayer.getDuration()========="); // seekbar.setMax(Integer.parseInt(file.length()+"")); mediaPlayer.setDataSource(file.getAbsolutePath()); //uri 网络视频 //mediaPlayer.setDataSource(MainActivity.this, Uri.parse(uri)); //prepare();表示准备工作同步进行,(准备工作在UI线程中进行) //当播放网络视频时,如果网络不要 会报ARN 所以不采用该方法 mediaPlayer.prepare(); //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法 //mediaPlayer.prepareAsync(); timer=new Timer(); timeTask=new TimerTask() { @Override public void run() { Log.e("baoyou", mediaPlayer.getCurrentPosition()+"=========mediaPlayer.getCurrentPosition()========="); int position = mediaPlayer.getCurrentPosition(); int duration = mediaPlayer.getDuration(); if (duration > 0) { long pos = seekbar.getMax() * position / duration; seekbar.setProgress((int) pos); } } }; timer.schedule(timeTask, 0, 1000); } catch (Exception 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; } }); } }
<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:gravity="center_vertical"> <RelativeLayout android:id="@+id/rl_video_content" android:layout_width="wrap_content" android:layout_height="wrap_content" > <SurfaceView android:id="@+id/surfaceView" android:layout_centerInParent="true" android:layout_width="match_parent" android:layout_height="wrap_content" /> <SeekBar android:id="@+id/sb_video_seekbar" android:layout_above="@+id/ll_video_operation" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" > </SeekBar> <LinearLayout android:id="@+id/ll_video_operation" android:layout_width="match_parent" android:layout_height="30dip" android:gravity="center_horizontal" android:background="@color/white" android:layout_alignParentBottom="true" > <Button android:id="@+id/ll_video_operation_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始" android:textColor="@color/black" android:background="@android:color/transparent" /> </LinearLayout> </RelativeLayout> </RelativeLayout>
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
在Android应用开发中,SurfaceView和MediaPlayer是两个关键组件,常用于实现视频播放功能。SurfaceView是一个特殊的视图,它可以创建一个独立的图形表面,使得视频渲染和其他UI操作可以并行进行,避免了UI线程阻塞,...
在Android开发中,多媒体播放是常见的功能之一,`MediaPlayer` 和 `SurfaceView` 的结合使用是实现视频播放的标准方式。本篇文章将详细讲解如何利用这两个组件来构建一个视频播放器。 首先,`MediaPlayer` 是...
在Android开发中,`MediaPlayer`和`SurfaceView`是两个重要的组件,它们在处理多媒体内容,尤其是视频播放方面发挥着核心作用。`MediaPlayer`是一个系统级的服务,它提供了丰富的功能来加载、解码和播放音频及视频...
在Android开发中,MediaPlayer和SurfaceView是两个非常重要的组件,它们在处理多媒体内容,特别是视频播放方面发挥着关键作用。本篇文章将深入探讨这两个组件的使用及其相互配合的基础知识。 首先,我们来看一下`...
在Android开发中,MediaPlayer是处理音频和视频播放的核心类之一,它提供了丰富的API来控制多媒体文件的播放。本文将深入探讨如何使用MediaPlayer自定义循环播放的次数,这在需要重复播放特定音频片段的应用场景中...
在Android开发中,MediaPlayer和SurfaceView是两个非常重要的组件,它们常常被用来实现视频播放功能。MediaPlayer是一个系统级的服务,负责处理音频和视频流的解码与播放,而SurfaceView则是一个可以在屏幕上显示...
总之,`MediaPlayer`和`SurfaceView`是Android实现视频播放的核心组件。理解它们的工作原理并熟练运用,可以帮助开发者创建功能强大的视频播放应用。在项目开发过程中,务必遵循最佳实践,确保性能和用户体验。
`MediaPlayer`和`SurfaceView`是Android系统提供的两个核心组件,用于实现高效且流畅的视频播放体验。在这篇文章中,我们将深入探讨这两个组件以及如何将它们结合使用来创建一个视频播放器。 ### `MediaPlayer`详解...
这个名为"基于android实现SurfaceView播放视频代码.rar"的压缩包提供了实现这一功能的源码参考,对于初学者和经验丰富的开发者来说都是一份宝贵的资源。下面,我们将深入探讨如何利用Android的SurfaceView组件来播放...
本示例着重讲解如何使用`MediaPlayer`、`SurfaceView`以及自定义控制器来实现这一功能。`MediaPlayer`是Android系统提供的一个核心组件,它允许开发者处理多媒体文件,如音频和视频。`SurfaceView`则是一个特殊的...
在Android平台上,SurfaceView是一种特殊的视图,常用于处理高性能的图形渲染,比如播放视频或者游戏画面。在视频播放场景中,SurfaceView提供了一个高效且低延迟的显示机制,能够将视频帧直接绘制到Surface上,减少...
- 视频渲染:若需要在界面上显示视频,可以使用`SurfaceView`或`TextureView`作为`MediaPlayer`的输出表面。 - 用户交互:添加播放、暂停、停止、重置等控制按钮,相应地调用`start()`, `pause()`, `stop()` 和 `...
总的来说,掌握`MediaPlayer`和`SurfaceView`的使用是Android开发中的重要技能,特别是在开发多媒体应用时。通过理解和实践"Android MediaPlayer 播放器(修改版)"的代码,开发者可以学习到更高级的媒体播放技巧,...
android 利用MediaPlayer+SurfaceView播放视频,与我的文章对应http://blog.csdn.net/shenxiaolei507/article/details/41349295,而且其中还有很多高级功能的实现,还包括ViedioView播放视频!!
`SurfaceView`和`MediaPlayer`是Android系统提供的两个关键组件,用于高效地处理视频播放任务。本文将深入探讨如何利用这两个组件实现视频播放,包括小窗口(悬浮窗口)播放和全屏播放。 `SurfaceView`是一个特殊的...
使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
在Android平台上,`MediaPlayer`是系统提供的一个核心组件,用于播放各种媒体文件,如音频和视频。本篇文章将深入探讨`MediaPlayer`的使用方法,帮助开发者理解和掌握如何在Android应用中实现多媒体播放功能。 首先...
在Android开发中,SurfaceView是一种特殊的视图,用于高效地显示动态图像,比如播放视频或者进行游戏渲染。标题“SurfaceView放大和缩小”涉及到的是如何在Android应用中实现对SurfaceView内的视频画面进行局部放大...