Android简单网络视频播放器
来源:互联网 发布:电脑点歌软件 编辑:程序博客网 时间:2024/05/17 20:50
播放需要调用service,在此,只是简单梳理播放流程。
<LinearLayout 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:orientation="vertical" tools:context=".MainActivity" > <EditText android:id="@+id/et_path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要播放文件的路径" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/bt_play" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="play" android:text="播放" /> <Button android:id="@+id/bt_pause" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="pause" android:text="暂停" /> <Button android:id="@+id/bt_stop" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" /> <Button android:id="@+id/bt_replay" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="replay" android:text="重播" /> </LinearLayout> <SurfaceView android:id="@+id/sv" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
public class MainActivity extends Activity { private EditText et_path; private MediaPlayer mediaPlayer; private Button bt_play,bt_pause,bt_stop,bt_replay; private SurfaceView sv; private SurfaceHolder holder; private int position; private String filepath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_path = (EditText) findViewById(R.id.et_path); bt_play = (Button) findViewById(R.id.bt_play); bt_pause = (Button) findViewById(R.id.bt_pause); bt_stop = (Button) findViewById(R.id.bt_stop); bt_replay = (Button) findViewById(R.id.bt_replay); //得到surfaceview sv = (SurfaceView) findViewById(R.id.sv); //得到显示界面内容的容器 holder = sv.getHolder(); //在低版本模拟器上运行记得加上下面的参数。不自己维护双缓冲区,而是等待多媒体播放框架主动的推送数据。 holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); holder.addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("destoryed"); if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } } @Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("created"); if(position>0){//记录的有播放进度。 try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); mediaPlayer.seekTo(position); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (IOException e) { e.printStackTrace(); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("changed"); } }); } /** * 播放 * @param view */ public void play(View view) { filepath = et_path.getText().toString().trim(); //File file = new File(filepath); if(filepath.startsWith("http://")){ try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "播放失败", 0).show(); } }else{ Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show(); } } /** * 暂停 * @param view */ public void pause(View view) { if("继续".equals(bt_pause.getText().toString())){ mediaPlayer.start(); bt_pause.setText("暂停"); return; } if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.pause(); bt_pause.setText("继续"); } } /** * 停止 * @param view */ public void stop(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } bt_pause.setText("暂停"); bt_play.setEnabled(true); } /** * 重播 * @param view */ public void replay(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.seekTo(0); }else{ play(view); } bt_pause.setText("暂停"); }}
参考:
Android音频、视频
0 0
- Android简单网络视频播放器
- android简单视频播放器
- Android 简单视频播放器
- Android 网络视频播放
- android播放网络视频
- Android 播放网络视频
- Android网络视频播放器DEMO
- android MediaPlayer SurfaceView 网络视频播放器
- Android自定义视频播放器(网络/本地)
- Android基础之网络视频播放器
- Android 简单定制一个视频播放器
- 【Android SurfaceView】视频播放器 简单例子
- Android简单本地视频播放器
- 网络视频播放器
- Android 播放网络视频
- Android播放网络视频截图
- Android VideoView播放网络视频
- Android实现网络视频播放
- 基数排序
- 桟的应用——十进制转化为八进制
- 【CodeForces 797B】Odd sum(模拟)
- 【上机笔试之十三】最大公约数
- reactNative的页面跳转
- Android简单网络视频播放器
- matlab中的imshow函数使用
- 自定义Ribbon的负载均衡
- Android-Broadcast广播事件(1)-简介及普通广播调用步骤
- 动态绑定
- 因数
- JavaScript对JSON数组操作。数组添加(push)以及移除(splitce)
- Salome
- kafka 集群搭建过程及搭建问题处理