Android播放器sdk

概述

AlivcMediaPlayer是一款基于Android平台的多媒体视频播放SDK。它为Android的开发者提供了简单易用的接口,帮助开发者方便快捷、低门槛的实现多媒体播放功能的开发。它支持HLS、RTMP、HTTP FLV、MP4等多种流媒体播放格式,视频支持h264格式、音频支持AAC格式。另外,针对直播用户的需求,还增加了首帧秒开的功能;同时为了减少直播的延迟,增加了弱网条件下播放的跳帧功能

功能

支持HLS、RTMP、HTTP FLV、mp4等流格式 支持h264+aac 支持armv7、arm64 支持直播首帧秒开 支持弱网条件下的丢帧策略 支持多实例,支持https 支持带切边的视频渲染模式

阅读对象

本文档面向所有使用该SDK的开发人员、测试人员以及对此感兴趣的用户,要求开发者对播放器的基本功能有一定的了解。

开发准备

设备和系统版本

android4.3及以上 手机芯片要求armv7或armv8架构

开发环境配置

本SDK开发环境为 JAVA1.7 | ANDROID SDK API LEVEL 18

安装包说明

  • lib:播放器SDK开发包,包括jar文件和so文件。

快速开发


开发步骤

首先,需要在安卓应用程序中,声明以下权限:

    <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

其次,按照下面的步骤,使用 sdk 进行播放器的开发:

  1. 创建 AliVcMediaPlayer 播放接口。
  2. 注册事件通知函数。
  3. 设置缺省解码方式:如果缺省为硬解,会尝试使用硬解,如果失败使用软解;如果缺省为软解,那么会一直使用软解。
  4. 如果从历史起点播放,那么调用 seek 方法。
  5. 调用 prepareAndPlay 准备开始播放。

DEMO示例

在 SDK 中提供了 Demo,此 Demo 是用播放器 SDK 开发了一个完整的视频播放器,用户可以参考 Demo 进行播 放器的开发。 下面给出了部分重要的 Demo 中调用 SDK 的代码。

一、创建播放器,准备视频播放:

//1. 创建播放器
 mPlayer = new AliVcMediaPlayer(context,surfaceView);

 //2. 注册事件通知
 mPlayer.setPreparedListener(new VideoPreparedListener());
 mPlayer.setErrorListener(new VideoErrorListener());
 mPlayer.setInfoListener(new VideoInfolistener());
 mPlayer.setSeekCompleteListener(new VideoSeekCompletelistener());
 mPlayer.setCompletedListener(new VideoCompletelistener());
 mPlayer.setVideoSizeChangeListener(new VideoSizeChangelistener());
 mPlayer.setBufferingUpdateListener(new VideoBufferUpdatelistener());
 //3. 设置缺省编码类型:0 表示硬解;1 表示软解;
 mPlayer.setDefaultDecoder(0);

 //4. 如果从历史点开始播放
 mPlayer.seekTo(position);

 //5. 准备开始播放
 mPlayer.prepareAndPlay(msURI.toString());

二、准备完成事件通知中:

private class VideoPrepareListener implements AliVcMediaPlayer.MediaPlayerPreparedListener{
    @Override
    public void onPrepared() {
    //更新视频总进度
    }
}

三、错误事件通知中:

private class VideoErrorListener implements MediaPlayer.MediaPlayerErrorListener {
        private WeakReference<MainActivity> activityWeakReference;

        public VideoErrorListener(MainActivity activity) {
            activityWeakReference = new WeakReference<MainActivity>(activity);
        }

        @Override
        public void onError(int i, String s) {
            MainActivity activity = activityWeakReference.get();
            if (activity != null) {
                activity.onError(i,s);
            }
        }
    }

四、播放信息事件通知中:

private class VideoInfolistener implements AliVcMediaPlayer.MediaPlayerInfoListener {
    public int onInfo(int what, int extra){
        switch (what)
        {
            case MediaPlayer.MEDIA_INFO_UNKNOW:
                // 未知
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                // 开始缓冲
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                // 结束缓冲
                break;
            case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
                // 首帧显示时间
                break;
        }
        return 0;
    }
}

播放器可配置参数与可选功能

配置参数接口 用途描述
setTimeout 设置网络超时断开链接的时间
setMaxBufferDuration 设置直播过程中缓冲区视频丢帧的起始时间,若缓冲区中视频帧的时长超过这个值, 则开始丢帧操作。设置这个参数可以控制直播延时的长度,参数值越小则直播的延迟 越小。
seek功能
接口名称 用途描述
seekTo seek到指定位置之前的最近的一个关键帧
seekToAccurate 精准跳转到指定位置 除了上述可配置的功能和参数,AlivcMediaPlayer还定义了播放器的事件状态通知和错误代码,以方便开发者掌握播放器的运行状态

除了上述可配置的功能和参数,AlivcMediaPlayer 还定义了播放器的事件状态通知和错误代码,以方便开发者掌 握播放器的运行状态。 若需要了解上述功能和接口的详细用法,请参照下节的接口说明。

接口说明


SDK 中提供了两个类 AliVcMediaPlayer 和 AliVcMediaPlayerFactory,其中 AliVcMediaPlayer 是播放器 SDK 使用类,AliVcMediaPlayerFactory 用来创建播放器 AliVcMediaPlayer。同时我们还提供了多个事件通知接口, 用来监听播放器的各种状态。

名称 功能描述
AliVcMediaPlayerFactory 创建媒体播放器接口
MediaPlayer 媒体播放器功能接口类
AliVcMediaPlayer 媒体播放器功能实现类
MediaPlayerPrepareListener 视频播放准备完成监听接口
MediaPlayerCompletedListener 视频播放完成监听接口
MediaPlayerInfoListener 视频播放信息监听接口
MediaPlayerSeekCompleteListener 视频跳转完成监听接口
MediaPlayerBufferingUpdateListener 视频缓冲监听接口
MediaPlayerVideoSizeChangeListener 视频大小改变监听接口
MediaPlayerErrorListener 视频播放错误监听接口

AliVcMediaPlayerFactory

类名:AliVcMediaPlayerFactory 功能:创建媒体播放器接口类 MediaPlayer 成员:

成员 功能
createPlayer 创建媒体播放器 MediaPlayer

详细说明:

MediaPlayer createPlayer(Context context,int decoder_type, String path)

createPlayer 用来创建播放器,返回 MediaPlayer 类。 参数:

  • path:播放器文件路径,本地或者网络地址。 返回值:返回空为错误,正确则为有效的 MediaPlayer 值。

MediaPlayer

类名:MediaPlayer 功能:媒体播放器接口类,提供播放控制 成员:

成员 功能
init 初始化播放器
prepareToPlay 准备视频播放
play 开始播放视频
pause 暂停视频播放
stop 停止视频播放
reset 释放播放器
seekTo 跳转到指定位置
isPlaying 是否正在播放
setVolumn 调节音量
getVideoWidth 获取视频宽度
getVideoHeight 获取视频高度
getDuration 获取视频长度
getCurrentPosition 获取当前视频播放位置
getUserPriority 获取播放器权限
setPreparedListener 注册视频准备完成通知
setCompletedListener 注册播放完成通知
setInfoListener 注册播放信息通知
setErrorListener 注册播放错误通知
setSeekCompleteListener 注册跳转完成通知
setBufferingUpdateListener 注册缓冲更新通知
setVideoSizeChangeListener 注册视频大小改变通知
getErrorCode 获取错误码
setSurfaceChanged 设置 surface 发生改变
enalbeNativeLog 打开底层日志,在开发阶段使用
disableNativeLog 关闭底层日志,在 release 阶段使用
setVideoSurface 设置视频显示的 surface
releaseVideoSurface 释放视频显示的 surface
setTimeout 设置 IO 超时时间,单位毫秒
setMaxBufferDuration 设置最大的缓冲时长,直播中有效
setMediaType 设置视频源类型
setDefaultDecoder 设置默认的解码器
getPropertyDouble 获取性能参数
getPropertyLong 获取长整型性能参数
getCurrNativeLog 获取 Natvie 的日志
getAllDebugInfo 获取全部 debug 信息
destroy 回收播放器
setMuteMode 设置静音模式
setVideoScalingMode 设置视频渲染的缩放模式

下面详细介绍一下各个成员函数的具体使用:

init

public static void init(Context context, String businessId, AccessKeyCallback callback);

功能:初始化播放器 参数: context: Android 上下文; callback:AccessKey 的回调函数; businesssId:业务 ID,用户自行设置,用于标识使用播放器 sdk 的 APP。如“淘宝直播”就设置“TaobaoLive”。

prepareToPlay

public void prepareToPlay(String url);

功能:根据视频文件内容初始化播放器实例,包括读取视频头,解析视频和音频信息,并根据视频和音频信息初始 化解码器,创建下载(或读取本地文件)、解码、渲染线程等。 参数: url:当前播放视频的文件名或网络地址。

play

public void play();

功能:播放当前视频。

pause

public void pause();

功能:暂停视频播放。

stop

public void stop();

功能:停止视频播放。

destroy

public void destroy();

功能:回收播放器。 备注:当整个播放器退出时调用,回收播放器。

reset

public void reset();

功能:重置播放器。当播放的过程中调用该函数,会先停止当前的播放行为,销毁当前的播放器,然后创建一个新 的播放器。

seekTo

public void seekTo(int msc);

功能:跳转到指定位置