美文网首页
Media(播放器)

Media(播放器)

作者: 涛涛123759 | 来源:发表于2016-11-22 16:02 被阅读89次

    一、使用VideoView播放视频
    1、读取放在raw目录下的文件

    String uri = "android.resource://" + getPackageName() + "/" + R.raw.lesson;
    videoView.setVideoURI(Uri.parse(uri));
    

    2、//根据文件在SD卡中的路径播放

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){   
         String strPath = Environment.getExternalStorageDirectory().getCanonicalPath()+ "/lesson.mp4";  
         videoView.setVideoPath(strPath);
    
    }
    

    二、使用MediaPlayer播放视频
    1)获得MediaPlayer实例:

    MediaPlayer mp = new MediaPlayer();
    MediaPlayer mp = MediaPlayer.create(this, R.raw.test); //无需再调用setDataSource
    

    另外create还有这样的形式: create(Context context, Uri uri, SurfaceHolder holder) 通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器

    2)设置播放文件:
    播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他的 组件来显示MediaPlayer播放的图像输出,我们可以使用用SurfaceView 来显示。

    //①raw下的资源:
    MediaPlayer.create(this, R.raw.test);
    
    //②本地文件路径:
    mp.setDataSource("/sdcard/test.mp3");
    
    //③网络URL文件:
    mp.setDataSource("http://www.xxx.com/music/test.mp3");
    

    另外setDataSource()方法有多个,里面有这样一个类型的参数:FileDescriptor,在使用这个 API的时候,需要把文件放到res文件夹平级的assets文件夹里,然后使用下述代码设置DataSource:

    AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
    m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
    

    3)其他方法

    getCurrentPosition( ):得到当前的播放位置
    getDuration() :得到文件的时间
    getVideoHeight() :得到视频高度
    getVideoWidth() :得到视频宽度
    isLooping():是否循环播放
    isPlaying():是否正在播放
    pause():暂停
    prepare():准备(同步)
    prepareAsync():准备(异步)
    release():释放MediaPlayer对象
    reset():重置MediaPlayer对象
    seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
    setAudioStreamType(int streamtype):指定流媒体的类型
    setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
    setLooping(boolean looping):设置是否循环播放
    setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
    setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
    setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
    setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
    setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
    setVolume(float leftVolume, float rightVolume):设置音量
    start():开始播放
    stop():停止播放

    三、使用SoundPool播放音效
    1)构造方法:
    SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是:
    ①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。
    ②指定声音类型,流类型可以分为STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSICSTREAM_ALARM四种类型。在AudioManager中定义。
    ③指定声音品质(采样率变换质量),一般直接设置为0!

    在低版本中可以用上述构造方法,而API 21(Android 5.0)后这个构造方法就过时了! 而用到一个SoundPool.Builder的东东,我们要实例化SoundPool只需调用:

    SoundPool.Builder spb = new SoundPool.Builder();
    spb.setMaxStreams(10);
    
     //转换音频格式
    spb.setAudioAttributes(null);
    
    //创建SoundPool对象
    SoundPool sp = spb.build(); 
    

    2)常用方法介绍:
    加载声音资源

    load(Context context, int resId, int priority)
    load(String path, int priority)
    load(FileDescriptor fd, long offset, long length, int priority)
    load(AssetFileDescriptor afd, int priority) 上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音

    参数介绍
    context:上下文
    resId:资源id
    priority:没什么用的一个参数,建议设置为1,保持和未来的兼容性
    path:文件路径
    FileDescriptor:貌似是流吧,这个我也不知道
    AssetFileDescriptor:从asset目录读取某个资源文件,用法: AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");

    播放控制
    play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

    参数依次是:
    soundID:Load()返回的声音ID号
    leftVolume:左声道音量设置
    rightVolume:右声道音量设置
    priority:指定播放声音的优先级,数值越高,优先级越大。
    loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数
    rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。

    资源释放
    可以调用release()方法释放所有SoundPool对象占据的内存和资源,当然也可以根据声音 ID来释放!

    3).OnLoadCompleteListener监听声音文件是否加载完毕

    mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { 
        @Override 
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {  
                 Toast.makeText(MainActivity.this,"加特技准备完毕~",Toast.LENGTH_SHORT).show(); 
        }
    });

    相关文章

      网友评论

          本文标题:Media(播放器)

          本文链接:https://www.haomeiwen.com/subject/ldydpttx.html