通过阅读本文,您可以了解移动端RTS SDK与阿里云播放器SDK集成的方法。
背景信息
移动端RTS SDK与阿里云播放器SDK集成比较简单,因为集成工作在播放器SDK中已内置,只需完成依赖,就可以像RTMP协议一样使用ARTC协议。
Android平台集成
- 阿里云播放器SDK集成RTS SDK作为插件。
使用maven或者本地依赖的方式将阿里云播放器SDK版本中AliyunARTC.aar依赖到APP工程中,同时添加RtsSDK.aar到APP工程中。在依赖了AliyunARTC.aar后,播放器SDK会自动将RTS SDK加载为插件。
- maven依赖
名称 版本号 相关代码 AliyunARTC 5.3.2 implementation 'com.aliyun.sdk.android:AlivcArtc:5.3.2'
RtsSDK 1.6.0 implementation 'com.aliyun.rts.android:RtsSDK:1.6.0'
- 本地依赖
使用本地依赖,请下载对应的依赖文件,详情请参见SDK下载。
- maven依赖
- 客户工程集成阿里云播放器SDK和RTS SDK。
使用maven或者本地依赖的方式集成阿里云播放器SDK和RTS SDK。
- maven依赖
名称 版本号 相关代码 AliyunPlayer 5.3.2 implementation 'com.aliyun.sdk.android:AliyunPlayer:5.3.2-full'
- 本地依赖
使用本地依赖,请通过官网中版本的zip包中手动获取依赖文件,详情请参见Android播放器SDK,播放器SDK集成请参见集成文档。
- 新建工程,如下图所示。 此处以maven依赖方式举例说明。
- 在根目录的build.gradle中添加如下代码。
//MPChart maven仓库地址,如果不需要曲线图,可以删除 maven { url 'https://jitpack.io' } //阿里云相关SDK(阿里云播放器、RTSSDK) maven仓库地址,如果使用IJKPlayer可以删除 maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
ext { compileSdkVersion = 25 buildToolsVersion = "25.0.3" minSdkVersion = 21 targetSdkVersion = 25 versionCode = 800800 versionName = "0.8.8" appVersionCode = 1 appVersionName = "1.0" externalRecyclerView = 'com.android.support:recyclerview-v7:25.4.0' externalMPAndroidChart = 'com.github.PhilJay:MPAndroidChart:v3.1.0' externalSupportAppCompat = 'com.android.support:appcompat-v7:25.4.0' //ARTC直播播放器 externalAliyunARTCNet = 'com.aliyun.rts.android:RtsSDK:1.6.0' externalAliyunARTC = 'com.aliyun.sdk.android:AliyunArtc:5.3.2' externalAliyunPlayer = 'com.aliyun.sdk.android:AliyunPlayer:5.3.2-full' //required, enough for most devices. //implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' //implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' }
- maven依赖
- 调用阿里云播放器SDK的接口使用RTS服务。
- 创建播放器。
通过AliPlayerFactory类可创建两种播放器:AliPlayer和AliListPlayer。单个播放功能使用AliPlayer,创建方法如下所示:
AliPlayer aliyunVodPlayer; ..... aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
- 设置播放器监听事件。
播放器提供了多种监听事件,如onPrepared,onCompletion等事件。设置方法如下所示:
aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() { @Override public void onCompletion() { //播放完成事件 } }); aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() { @Override public void onError(ErrorInfo errorInfo) { //出错事件 } }); aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { //准备成功事件 } }); aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { //视频分辨率变化回调 } }); aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() { @Override public void onRenderingStart() { //首帧渲染显示事件 } }); aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(int type, long extra) { //其他信息的事件,type包括循环播放开始、缓冲位置、当前播放位置、自动播放开始等 } }); aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() { @Override public void onLoadingBegin() { //缓冲开始 } @Override public void onLoadingProgress(int percent, float kbps) { //缓冲进度 } @Override public void onLoadingEnd() { //缓冲结束 } }); aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() { @Override public void onSeekComplete() { //拖动结束 } }); aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleShow(long id, String data) { //显示字幕 } @Override public void onSubtitleHide(long id) { //隐藏字幕 } }); aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() { @Override public void onChangedSuccess(TrackInfo trackInfo) { //切换音视频流或者清晰度成功 } @Override public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { //切换音视频流或者清晰度失败 } }); aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() { @Override public void onStateChanged(int newState) { //播放器状态改变事件 } }); aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() { @Override public void onSnapShot(Bitmap bm, int with, int height) { //截图事件 } });
- 创建DataSource,准备播放。
播放器支持4种播放源:VidSts、VidAuth、VidMps、UrlSource。其中UrlSource是直接URL播放,需要将URL设置为
artc://
协议,才可以使用RTS服务。UrlSource urlSource = new UrlSource(); urlSource.setUri("artc://xxxx"); aliyunVodPlayer.setDataSource(urlSource);
- 设置显示的view。
如果源有画面,需要设置显示的view(支持SurfaceView和TextureView)到播放器中,用来显示画面。本文以SurfaceView举例说明,如下所示:
surfaceView = (SurfaceView) findViewById(R.id.playview); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { aliyunVodPlayer.redraw(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(null); } });
- 播放控制。
用户自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、暂停、停止、拖动(seek),其中seek功能仅对点播有效;直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。使用示例如下所示:
//准备,在准备完成的回调接口中,调用start()可以开始播放 aliyunVodPlayer.prepare(); //开始播放 aliyunVodPlayer.start(); //暂停播放 aliyunVodPlayer.pause(); //停止播放 aliyunVodPlayer.stop(); //跳转到(不精准) aliyunVodPlayer.seekTo(long position); //重置 aliyunVodPlayer.reset(); //释放(释放后播放器将不可再被使用) aliyunVodPlayer.release();
- 参数配置。
参数配置如下所示,可以更好的发挥低延迟优势。
//获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //设置最大延迟为1秒,延迟控制由ARTC控制 config.mMaxDelayTime = 1000; //设置播放器启播缓存为10毫秒,数据控制由ARTC控制。 config.mHighBufferDuration = 10; config.mStartBufferDuration = 10; ....//其他设置 //给播放器加载配置 mAliyunVodPlayer.setConfig(config);
- 加载库。
在合适的Activity内加入
System.loadLibrary("RtsSDK");
。static { System.loadLibrary("RtsSDK"); }
- 创建播放器。
iOS平台集成
- 阿里云播放器SDK集成RTS SDK作为插件。
移动端APP依赖阿里云播放器SDK的同时依赖RTS SDK和AliPlayerSDK_iOS_ARTC,播放器SDK自动将RTS SDK加载为插件。
- pod依赖
名称 版本号 相关代码 AliPlayerSDK_iOS_ARTC 5.2.1 pod 'AliPlayerSDK_iOS_ARTC'
RtsSDK 1.3.0 pod 'RtsSDK'
- 本地依赖
使用本地依赖,需要在SDK下载页面中获取framework,详情请参见SDK下载。
- pod依赖
- 客户工程集成阿里云播放器SDK和RTS SDK。
- pod依赖
名称 版本号 相关代码 阿里云播放器SDK 5.2.1 pod 'AliPlayerSDK_iOS'
使用pod方式打开终端,进入工程根目录运行pod init,在生成的podfile文件中输入如下文本(如需指定版本,请自行补充版本号),运行pod install。pod 'RtsSDK' pod 'AliPlayerSDK_iOS' pod 'AliPlayerSDK_iOS_ARTC' ```
- 本地依赖
使用本地依赖,请通过官网中版本的zip包中手动获取依赖文件,详情请参见iOS播放器SDK,播放器SDK集成请参见集成文档。
使用本地依赖方式,需将如下库文件拖到项目中,并在target的Gennel栏将各framework设置为Embed & Sign。
- pod依赖
- 调用阿里云播放器SDK接口。
- 初始化Aliplayer。
- (AliPlayer *)aliPlayer{ if (!_aliPlayer) { _aliPlayer = [[AliPlayer alloc] init]; _aliPlayer.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT; _aliPlayer.rate = 1; //如需实现AVPDelegate代理,添加此行 _aliPlayer.delegate = self; //设置播放的视图,将您的播放视图赋值给aliplayer _aliPlayer.playerView = self.basePlayerView.playerView; _aliPlayer.autoPlay = YES; } return _aliPlayer; }
- 设置播放URL。
AVPUrlSource *source = [[AVPUrlSource alloc] urlWithString:_url]; [self.aliPlayer setUrlSource:source];
- 设置播放参数。 使用阿里云播放器播放ARTC直播流,推荐配置如下所示:说明 播放器参数配置需要在调用
prepare
之前才能生效。AVPConfig *config = self.aliPlayer.getConfig; //直播最大延迟 [config setMaxDelayTime:1000]; //卡顿恢复时长 [config setHighBufferDuration:10]; //起播最大延迟 [config setStartBufferDuration:10]; //重连次数 [config setNetworkRetryCount:2]; //重连时长 [config setNetworkTimeout:15000]; [_aliPlayer setConfig:config]; //默认为硬解,如播放器在准备过程中发现硬解失败,会自动切换到软解 _aliPlayer.enableHardwareDecoder = YES;
- 打开日志。
[AliPlayer setEnableLog:YES]; [AliPlayer setLogCallbackInfo:LOG_LEVEL_DEBUG callbackBlock:nil];
- 播放控制。
[self.aliPlayer prepare]; [self.aliPlayer stop]; [self.aliPlayer destroy]; [self.aliPlayer reload];
- 初始化Aliplayer。
在文档使用中是否遇到以下问题
更多建议
匿名提交