代码:

package com.itheima.videoview;import android.app.Activity;import android.os.Bundle;import android.widget.VideoView;public class MainActivity extends Activity {    private VideoView vv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        vv = (VideoView) findViewById(R.id.vv);        vv.setVideoPath("http://192.168.22.136:8080/11.mp4");        vv.start();    }}

surfaceview表面视图

双缓冲区:使用两个线程协调工作;

surfaceview 重量级空间,当画面可见时,双缓冲器被创建,占用较高的cpu和内存资源。
当界面不可见时,双缓冲器占用释放。

音乐播放器API
package com.itheima.surfaceview;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MainActivity extends Activity {

private SurfaceView sv;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    sv = (SurfaceView) findViewById(R.id.sv);    SurfaceHolder holder = sv.getHolder();    //推送缓冲数据,api 13之前的版本上必须执行这行代码,13版本之后,播放器可以自动把    //数据加载到缓冲区    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    holder.addCallback(new Callback() {        private MediaPlayer mediaPlay;        @Override        public void surfaceCreated(SurfaceHolder holder) {            try {                mediaPlay = new MediaPlayer();                mediaPlay.setDataSource("http://192.168.22.136:8080/11.mp4");                mediaPlay.setAudioStreamType(AudioManager.STREAM_MUSIC);                mediaPlay.setDisplay(holder);                //使用阻塞式准备方法,等待数据资源准备完成后才开始播放,用于播放本地的音视频文件

// mediaPlay.prepare();
//使用异步式准备方法,使用子线程等待数据资源准备完成后才开始播放,用于播放网络上的音视频文件
mediaPlay.prepareAsync();

                mediaPlay.setOnPreparedListener(new OnPreparedListener() {                    @Override                    public void onPrepared(MediaPlayer mp) {                        mediaPlay.start();                    }                });            } catch (Exception e) {                e.printStackTrace();            }        }        @Override        public void surfaceDestroyed(SurfaceHolder holder) {            if(mediaPlay != null && mediaPlay.isPlaying()){                mediaPlay.stop();                mediaPlay.release();                mediaPlay = null;

// mediaPlay.seekTo(msec);

            }        }        @Override        public void surfaceChanged(SurfaceHolder holder, int format, int width,                int height) {            // TODO Auto-generated method stub        }    });}

}

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. android创建文件夹以及向文件写入数据
  3. Android腾讯微博客户端开发三:多账号管理的实现
  4. 使用MediaPlayer播放音乐文件
  5. android ViewPager学习笔记3
  6. SQLiteDatabaseTest
  7. Android同步网络请求工具类HttpURLConnection
  8. sqlite的使用及其框架
  9. Android中SdCard的数据读写

随机推荐

  1. Android网格布局实现--GridView
  2. Android社交系统----界面预览
  3. Android(安卓)OpenCV 旋转图像
  4. android 带删除按钮的ListView
  5. android 监听SDCard安装和卸载的代码片段
  6. Android(安卓)TouchDelegate 扩大点击区
  7. libnghttp2 NDK 交叉编译
  8. Android 利用AudioManager控制后台音乐播
  9. Android的xml布局文件代码讲解(TextView
  10. Android仿微信语音聊天功能