CDN加速

Android播放器

更新时间:2021-10-18 17:41:13

!注意:Android播放器免费提供,不再提供技术支持

Android播放器SDK下载地址

第一章 产品概述

  NCMediaPlayer SDK是一个功能齐全、易于集成的视频播放器SDK,支持点播和直播。支持设置缓冲时间、延时追等来降低直播时延,支持后台播放时不解码视频以降低cpu消耗。
  SDK以工程库的方式提供,见“2_Demo/CNCMediaPlayer/CNCMediaPlayerSDK”,这其中分为2部分:libs目录下是核心的jar包和so动态库;src目录是非核心的代码(包括UI部分和手势操作等功能部分),必要时可自行修改。
  SDK内嵌鉴权模块,必须鉴权成功才能正常使用。
  SDK接口与系统播放器MediaPlayer接口几乎保持一致,零学习成本接入。

1、支持格式

  点播:MP4、FLV、MPEG-TS、HLS、AVI、RMVB、DASH 等。
  直播:RTMP、Http FLV、HLS、MP4。

2、运行环境

  支持Android系统:4.0以上。
  支持芯片架构:armv5 / armv7a / arm64 / x86 / x86_64。

3、开发环境

  Android Studio。

4、完整版和直播版

  SDK的代码文件和jar包只有一份,而底层库分为2个版本:完整版(full)和直播版(live)。直播版仅保证支持RTMP、HTTP、HTTPS、 FLV、HLS,so库体积较小。而完整版不仅支持直播,还支持点播的各种格式,so库体积较大。可根据自身业务情况选择相应的so库。

5、主要功能点

  ✓ 支持播放截屏
  ✓ 支持自定义亮度音量调节
  ✓ 支持视频画面缩放模式
  ✓ 支持直播延时追赶
  ✓ 支持静音播放
  ✓ 支持软硬解
  ✓ 支持H.265/HEVC播放
  ✓ 支持首屏加速
  ✓ 支持后台不解码,更节约性能
  ✓ 支持后台播放
  ✓ 支持多种格式录制(mp4,flv,gif)
  ✓ 支持sock4 sock5 http https代理
  ✓ 支持更精准的缓存控制
  ✓ 支持opensles音频加速
  ✓ 支持点播本地缓存
  ✓ 支持点播循环播放
  ✓ 支持获取原始视频的yuv数据和pcm数据
  ✓ 支持点播精准seek
  ✓ 支持cache内seek
  ✓ 支持点播HLS码率自适应
  ✓ 支持直播低延迟
  ✓ 支持多开播放器
  ✓ 支持分辨率重建
  ✓ 支持局部录屏
  ✓ 支持mp4、hls解密播放
  ✓ 支持dash播放及手动码率切换
  ✓ 支持DNS缓存失效时间设置
  ✓ 支持连接超时设置
  ✓ 支持预加载
  ✓ 支持CC字幕
  ✓ 支持DASH-DRM的widevine解密播放

第二章 嵌入SDK

  以下是简要步骤,具体可参考工程CNCMediaPlayerDemo。

1、CNCMediaPlayerDemo及嵌入的简要说明

  网宿再度登榜“2020中国互联网综合实力百家企业”

  CNCMediaPlayerDemo是通过调用CNCMediaPlayerSDK的接口实现的播放器功能展示。
  CNCMediaPlayerSDK是通过CNCMediaPlayerSDKLib提供的接口封装成方便使用的播放器接口,该SDK包代码开源,用户可以直接使用该SDK或者参考该SDK对CNCMediaPlayerSDKLib自行封装。其libs库如下

  网宿再度登榜“2020中国互联网综合实力百家企业”

  Full是完整版支持更多的格式,live为直播库支持较少的格式库更小,Superres是包含超分功能的库,用户可以根据需求自行选择。

2、嵌入步骤

2.1 gradle配置

  • 同时使用full和live两种库,gradle配置参考demo配置
  • 若只使用其中一种库,以full库为例

  拷贝full中所有so库以及 auth_sdkv1.0.2.jar和CNCMediaPlayerSDKLib_Vx.x.x.jar包拷贝到工程中。
  若想直接使用demo的CNCMediaPlayerSDK的则将CNCMediaPlayerSDK中源码一并拷贝到工程中使用。若自行封装,参考该文档,调用相关的API。

2.2 基本调用示例

1)假设直接使用demo的CNCMediaPlayerSDK包

1、添加布局
  在FrameLayout布局下添加CNCVideoViewEx和CNCMediaController,用于渲染播放器的播放界面和控制界面:

<FrameLayout
    android:id="@+id/video_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black">

    <com.cnc.mediaplayer.sdk.CNCVideoViewEx
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"/>

    <com.cnc.mediaplayer.sdk.controller.CNCMediaController
        android:id="@+id/media_controller"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

2、修改AndroidManifest.xml
添加权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_LOGS" />

修改相应Activity的configChanges:

android:configChanges="keyboardHidden|orientation|screenSize"

修改相应Activity的screenOrientation锁定竖屏,避免Android系统自带的自动翻转:

android:screenOrientation="portrait"

3、混淆
混淆时,注意添加以下代码:

-keep class cnc.cad.validsdk.** {
    *;
}
-keep class com.cnc.mediaplayer.sdk.lib.** {
    *;
}
-keep class tv.danmaku.ijk.media.player.** {
    *;
}
-keep class com.cnc.mediaplayer.screencapture.** {
    *;
}

//如果使用到CNCMediaPlayerSDK包,添加以下这行
-keep class com.cnc.mediaplayer.sdk.**{
    *;
}

4、使用CNCVideoViewEx调用流程

1、调用鉴权,建议在app启动时调用,理论上一个自然日内只会发起一次网络鉴权。
void requestAuth(Context context, String appId, String authKey, ValidListener listener);

2、设置配置(具体配置参考接口CNCSDKSetting的接口说明)
CNCSDKSettings mSDKSettings = new CNCSDKSettings(); mSDKSettings.setEnableBackgroundPlay(true);//运行后台播放 mSDKSettings.setUsingMediaCodec(true);//使用硬解 ...

3、播放界面初始化
setContentView(R.layout.activity_cnc_mediaplayer);
mCNCVideoViewEx = findViewById(R.id.video_view);
mCNCMediaController = findViewById(R.id.media_controller);
//关联CNCVideoViewEx和CNCMediaController mCNCVideoViewEx.setMediaController(mCNCMediaController);

4、监听视频事件
private IMediaEventsListener mMediaEventsListener =
new IMediaEventsListener() {
@Override public void onMediaPause() {
 //视频暂停回调
}
@Override public void onMediaStart() {
 //视频开始播放回调
}
@Override public void onBufferingStart() {
//视频开始缓冲回调
}
@Override public void onBufferingEnd() {
 //视频结束缓冲回调
}
@Override public void onMediaCompletion() {
//视频播放结束回调
}
@Override public void onMediaPrepared() {
//视频准备完成回调
}
@Override public void onMediaError(int what, int extra) {
//视频播放过程中错误回调
}
@Override public void onMediaInfo(int what, int extra) {
//视频播放过程中一些提示信息回调
}
};
mCNCVideoViewEx.setOnMediaEventsListener(mMediaEventsListener);

5、启动播放器
 mCNCVideoViewEx.play(url);

2)CNCMediaPlayerSDK封装示例

  CNCMediaPlayerSDK包通过调用CNCVideoView封装成CNCVideoViewEx,其主要流程如下,具体可以参考CNCMediaPlayerSDK的CNCVideoViewEx的封装:

1、 CNCVideoViewEx继承CNCVideoView
CNCVideoViewEx extends CNCVideoView

2、设置监听
private IMediaEventsListener mOnMediaEventsListener;
/** * 设置回调,把CNCVideoView的一些事件通过回调传递给CNCVideoViewEx */ setMediaEventsListener(new IMediaEventsListener() {
@Override public void onMediaPause() {
    if (mOnMediaEventsListener != null) {
        mOnMediaEventsListener.onMediaPause();
    }
}
@Override public void onMediaStart() {
    if (mOnMediaEventsListener != null) {
        mOnMediaEventsListener.onMediaStart();
    }
}
@Override public void onBufferingStart() {
    if (mOnMediaEventsListener != null){
        mOnMediaEventsListener.onBufferingStart();
    }
}
 @Override public void onBufferingEnd() {
    if (mOnMediaEventsListener != null){
        mOnMediaEventsListener.onBufferingEnd();
    }
}
@Override public void onMediaCompletion() {
    if (mOnMediaEventsListener != null){
        mOnMediaEventsListener.onMediaCompletion();
    }
}
 @Override public void onMediaPrepared() {
    if (mOnMediaEventsListener != null) {
        mOnMediaEventsListener.onMediaPrepared();
    }
}
@Override public void onMediaError(int what, int extra) {
if (mOnMediaEventsListener != null) {
    mOnMediaEventsListener.onMediaError(what, extra);
    }
}
 @Override public void onMediaInfo(int what, int extra) {
 if (mOnMediaEventsListener != null) {
    mOnMediaEventsListener.onMediaInfo(what, extra);
 }
}
});

3、调用CNCVideoView的SetVideoPath和start()接口实现play接口
public void play(String url) {
    setVideoPath(url);
    start();
}

第三章 基本类介绍

1、CNCGlobalSDKSetting

  CNCMediaPlayer SDK的全局配置类,是一个静态类,设置全局属性都在这个类里面,提供的接口见后面。

2、CNCSDKSettings

  创建播放器的配置类,一个播放器对应一个配置,播放器的配置参数都在这个类里面,提供的接口见后面。

3、CNCVideoViewEx

  播放器的显示布局,代码公开,提供了生命周期处理接口、基本播放控制接口、事件回调接口、获取媒体信息的接口等。

4、CNCMediaController

  播放器的控制界面布局,代码公开,可根据自身业务需要修改布局UI等。

第四章 功能介绍

1、鉴权说明

SDK内部会检查鉴权结果,请求鉴权的接口为:

void requestAuth(Context context, String appId, String authKey, ValidListener listener);

理论上一个自然日内只会发起一次网络鉴权(可能较耗时),为避免在SDK内部发起网络鉴权请求,建议在app启动时调用:

CNCMediaPlayerAuthentication.requestAuth(getApplicationContext(), mAuthAppId, mAuthKey, null);

分辨率重建,请求鉴权的接口为:

void requestInitIvie(final Context context, String devKey)//devKey为鉴权key

普通鉴权几种可能的鉴权结果如下:

AuthEvent.AUTHORIZING = 2001 //鉴权中
AuthEvent.SDK_EXPIRED = 2101 // 鉴权过期
AuthEvent.VERSION_OLD = 2102 // 版本太旧
AuthEvent.SDK_UNMATCHED = 2103 //鉴权sdk不匹配
AuthEvent.APPID_UNMATCHED = 2104 //id不匹配
AuthEvent.APPKEY_UNMATCHED = 2105 // key不匹配
AuthEvent.AUTH_NETWORK_ERROR = 2106// 鉴权错误
AuthEvent.RESP_ERROR = 2151 //服务端返回错误
AuthEvent.UNKNOWN_ERROR = 2199 //未知错误
AuthEvent.SUPERRES_AUTH_INVALID = 2200 //分辨率重建(即超分)鉴权无效

2、点播和直播

  需手动配置告知播放器将要播放的视频类型是点播或者直播,从而有不同的布局和不同的控制逻辑,如下配置为点播:

mSDKSettings.setLive(false);

3、手势控制

手势控制的功能包括:

  • 控制音量大小
  • 控制屏幕亮度
  • 划屏拖拉进度条
  • 双击切换画面比例

4、后台播放

  可设置播放器是否允许后台播放。
  如果设置为true,当按手机home键切换播放器至后台时,仍然继续在后台解码播放。
  如果设置为false,则播放器进入后台时暂停播放。切换回前台时,点播视频从暂停的时间点继续播放,而直播视频因为延时追赶的作用会追至较新的时间点并开始播放。

mSDKSettings.setEnableBackgroundPlay(true);

注意:setEnableBackgroundPlay仅仅是置标志位,具体的处理是在SDK提供的onPause和onResume等生命周期函数中实现的,因此还需要在Activity的声明周期函数中调用对应SDK生命周期函数,才能实现上述效果。

  • 后台播放不解码
    当使用软解播放时,进入后台默认解码视频,在后台时仍然占用较多的cpu,SDK支持设置后台不解码以降低cpu的消耗。
mSDKSettings.setDisableDecodeVideoInBackground(bundle.getBoolean(BasePlayerActivity.DISABLE_DECODE_VIDEO_IN_BACKGROUND));

5、直播延时追赶

  直播对于视频延时比较敏感,SDK提供延时追赶的功能,默认关闭,如下配置开启:

if (mSDKSettings.isLive()) {
    //设置直播延时追赶
    mSDKSettings.setUsingCatchLiveDelay(true);
}
  • 延时追赶阈值
      SDK默认延时超过6000ms开始追赶,这个阈值可配置(最小1000,最大10000):
mSDKSettings.setCatchLiveDelayTimeInMs(6000);

6、缓冲阈值

  缓冲,是指在网络条件较差等情况下导致的接收不到足够的数据进行播放时,播放器等待接收到足够的数据后再继续播放的过程。
  缓冲阈值,单位是毫秒,即当播放器缓冲直至视频数据时长到达设定的阈值时,返回播放状态。缓冲阈值默认0,最小值是0,最大值是5000。当设为0时即认为不缓冲,可以一定程度降低延时。

mSDKSettings.setBufferingTimeInMs(500);
mSDKSettings.setBufferingTimeInBytes(2*1024*1024);

注意,直播的延时追赶阈值必须大于缓冲阈值,否则会造成频繁缓冲,建议相差1000ms以上。设置缓冲时长与设置缓冲字节是互斥的,若一方为0另一方不为0,则不为0的生效,若同时不为0,则以缓冲时长为主。

7、首屏加速

默认开启,设置方法:

mSDKSettings.setEnableFirstScreenAcceleration(true);

8、录制

  支持将直播或点播视频流录制成Mp4或Gif文件。
  支持3种模式的录制:录视频源模式、模拟录屏模式和自由录屏模式。前两种模式都是录制视频源,不同之处在于:
  1)录视频源模式侧重还原视频源本身。
  2)模拟录屏模式侧重还原实际观看到的场景,比如播放过程中的卡顿也会体现在录制结果中。
  3)模拟录屏模式支持指定区域录屏,可以录制包含动态信息区、按钮区的内容。

录制的相关接口为:

boolean startFileRecoding(String filename, String format);
boolean startFileRecoding(String filename, String format, int mode);
boolean startFileRecoding(String filename, String format, int mode, int fileRecodingGifScale);
boolean stopFileRecoding();
void stopFileRecodingAsync();
boolean isFileRecoding();
boolean isFileRecodingStoping();

9、截屏

支持基于TextureView的截屏,截图的Api接口为:

void takeScreenShot();

10、静音播放

支持播放器静音而不影响外部系统音量。调用示例:

mCNCVideoViewEx.setMute(isMute);

11、H265适配

  启用该功能时,若手机支持H265硬解,将硬解H265视频;若不支持硬解H265,则切换到H264硬解码。若手机不支持H264硬解,则软解h264。

开启方法为:

mSDKSettings.setUsingHWHevcAvc(true);

当上述方法启用后,需要调用下面2个接口,以完成H265适配功能:

void checkHevcSupportFromServer();
void setH264VideoUrl(String h264VideoUrl);

具体见接口说明。

12、代理

  支持设置socks5/sock4/http/https代理,如果设置这四种代理之一,客户端将不直接与流媒体服务器交互,而是通过代理服务器间接和流媒体服务器交互。四种代理的接口一致,并且同一时刻只能设置一种代理模式。

设置示例:

mSDKSettings.setUsingHWHevcAvc(true);

// 设置sock5代理示例代码:
mSDKSettings.setUsingSocks5(true);
mSDKSettings. setProxyHostname("xxx.xxx.xxx.xxx");//socks5服务器地址
mSDKSettings. setProxyPort (xxx);//socks5服务器端口
mSDKSettings. setProxyUsername ("xxx");
mSDKSettings. setProxyPassword ("xxx");

// 设置sock4代理示例代码:
mSDKSettings.setUsingSocks4(true);
mSDKSettings. setProxyHostname("xxx.xxx.xxx.xxx");//socks4服务器地址
mSDKSettings. setProxyPort (xxx);//socks4服务器端口

// 设置http代理示例代码:
mSDKSettings. setUsingHttp(true);
mSDKSettings. setProxyHostname("xxx.xxx.xxx.xxx");//http服务器地址
mSDKSettings. setProxyPort (xxx);//http服务器端口
mSDKSettings. setProxyUsername ("xxx");//如果有设置用户名才需要设置
mSDKSettings. setProxyPassword ("xxx");//如果有设置密码才需要设置

// 设置https代理示例代码:
mSDKSettings. setUsingHttps(true);
mSDKSettings. setProxyHostname("xxx.xxx.xxx.xxx");//https服务器地址
mSDKSettings. setProxyPort (xxx);//https服务器端口
mSDKSettings. setProxyUsername ("xxx");//如果有设置用户名才需要设置
mSDKSettings. setProxyPassword ("xxx");//如果有设置密码才需要设置

具体见接口说明。

13、时移回看

  支持网宿时移回看的直播视频源,在url后面加上特定参数后访问即可回看。目前只支持相对时移,精确到秒。具体url规则参见BasePlayerActivity.java中的doRelativeTimeShift。

14、变速播放

  支持网宿点播倍速播放,SDK支持自定(0,32]倍速播放。启用变速时建议不要使用录制/录屏,该功能对手机性能要求高。变速播放,对应录屏和录制,音视频速度也是变的。

mSDKSettings.setUsingSpeedPlay(true);//设置播放加速
mCNCVideoViewEx.setSpeed(speed);

15、SEI支持

  支持h264数据的sei扩展字段。可解析推流段的SEI数据,并在收到sei数据的时候回调OnSeiTextListener接口,完成将数据通知给应用层的操作。

16、本地点播缓存

  mSDKSettings.setUsingLocalCache(true),设置为true为开启点播缓存状态,另外需要配置下参数,具体如下:

设置示例:

获取单例LocalCacheManager mLocalCacheManager = LocalCacheManager.getSingleton();
配置缓存:

mLocalCacheManager.newInstance(mContext);
默认配置参数,路径在/sdcard/Android/data/packagename/cache/video-cache,缓存默认设置为个数,大小为10个

mLocalCacheManager.newInstance(mContext,cacheParams.mVideoCachePath);
配置缓存路径,缓存个数为10个

mLocalCacheManager.newInstance(mContext, cacheParams.mVideoCachePath, cacheParams.mMaxCacheCount);
配置缓存路径,配置缓存个数

mLocalCacheManager.newInstance(mContext, cacheParams.mVideoCachePath, cacheParams.mMaxCacheSize);
配置缓存路径,配置缓存大小单位M

LocalCacheManager.getSingleton().cleanCache();
退出,清理缓存

17、循环播放

支持点播的循环播放,提供了一些两个接口

public void setLooping(boolean looping) //设置是否循环播放,该接口通过调用下面接口实现的
public void setLooping(int loopTimes) //设置循环播放次数,1为不循环,0为循环播放,大于1为循环播放次数

另外在SDKSettings类记录了循环播放的相关信息,由于在SDK内部没有使用到,只是方便接入使用,以下两个接口可用可不用

public void setUsingCyclePlay(boolean mUsingCyclePlay);//记录了是否启用循环播放
public void setCyclePlayTimes(int mCyclePlayTimes) ;//记录了设置的循环播放次数

18、精准seek

精准支持点播精准seek,在SDKSettings设置即可实现

setUsingAccurateSeek(boolean mUsingAccurateSeek);//在SDKSettings设置类中调用

19、HLS码率自适应

  支持点播HLS码率自适应,会根据当前的网络变化来自动播放适用的码率;当手动设置播放码率时,自适应功能自动关闭,这种情况下,若当前的网络不适合播放设置的码率时,会发出建议降低码率的通知。
  通知的状态码(在OnStatusCodeEventListener 获取):

PlayEvent.MULTI_STREAM_CURRENT_VIDEO_BITRATE_CHANGED//开始播放新的码率
PlayEvent.MULTI_STREAM_ADAPTION_NOTIFY_NETWORK_BAD//当前网络差,建议降低码率

使用示例如下:

//启用码率自适应1,2步骤
//1.在SDKSettings设置类中设置参数
public void setUsingHlsAdaptation(boolean mUsingHlsAdaptation)//启用HLS码率自适应
public void setInitBitrate(int mInitBitrate);//设置初始播放码率,0为默认最低码率
//2.设置相关监听,获取相应数据
public void setOnHlsCurrentBitrateListener(IHlsCurrentBitrate listener);//获取当前播放码率
public void setOnHlsBitrateListListener(IHlsBitrateList listener);//获取解析到码率播放列表,可用于手动切换码率
public void setOnHlsStatusListener(IHlsStatusListener listener);//监听播放过程中码率变化

//其他接口
public void selectHlsBitrate(long bitrate);//可根据监听到的码率播放列表手动设置播放码率
public void closeHlsAdaptation();//手动关闭码率自适应

20、音视频数据获取

  支持视频及音频原始数据的获取,视频格式为yuv,音频格式为pcm,目前只支持软解。

调用接口示例

//1.在在SDKSettings设置类中设置相关参数
mSDKSettings.setInterceptAVData(true, getAVDataFastest);//第一个参数为是否要截获数据,第一个参数为是否为快速获取数据(高于播放的速度)
mSDKSettings.setFramedrop(CNCSDKSettings.MIN_FRAMEDROP);//尽量少丢帧
mSDKSettings.setEnhanceVideoDecodeQuality(true);//提供图像质量
mVideoView.setVideoPath(url);//设置视频url
mVideoView.setLooping(looping);//设置是否循环播放
mVideoView.start();//开始播放
//2.设置回调, 回调接口见接口说明
 public void setOnAudioDataListener(IjkMediaPlayer.OnAudioPCMListener listener);//设置获取音频回调
 public void setOnVideoDataListener(IjkMediaPlayer.OnVideoRawDataListener listener)//设置获取视频回调

21、直播低时延

在SDKSetting类中设置是否支持直播低延迟,其中直播低延迟和直播延时追赶互斥,二者只能生效其一,调用接口示例

public boolean isUsingCatchLiveLowDelay();//查询是否支持直播低延迟
public void setUsingCatchLiveLowDelay(boolean mUsingCatchLiveLowDelay);//设置直播低延迟

22、多开播放器

可以支持多个播放器同时使用,代码调用与调用单个播放器一样。

23、分辨率重建

可以将低分辨率视频实时重建成高分辨率视频,实现更好的显示效果。在SDKSetting类中设置是否支持分辨率重建。调用接口示例如下:

public boolean getIsSuperRes();//查询是否支持分辨率重建
public void setIsSuperRes(boolean mIsSuperRes);//设置分辨率重建

注意:分辨率重建需要增加请求鉴权,其接口为:

void requestInitIvie(final Context context, String devKey)//devKey为鉴权key

24、HlS解密播放

可以播放hls格式的加密视频。初始化配置时设置是否hls解密及解密ID。调用接口示例如下:

public void setUsingHls(boolean usingHls);  //设置是否开启hls解密
public void setHlsVideoId(String videoId);  //设置hls解密的videoId

public boolean isUsingHls();    //查询是否使用hls解密
public String getHlsVideoId();  //获取hls解密的videoId

25、MP4解密播放

可以播放mp4格式的加密视频。在SDKSetting设置即可实现。调用接口示例如下:

public void setUsingMp4Encryption(boolean usingMp4Encryption);//设置是否开启mp4解密
public boolean isUsingMp4Encryption();//是否使用mp4解密

26、DASH播放及手动切换码率

  默认可以支持dash播放,armeabi平台暂时不支持。若需要获取码率列表,设置初始化码率需要调用setUsingDashSwithBandwith 打开,只是播放不需要设置。

启用手动切换码率接口及调用示例:

//设置及获取是否开启手动码率控制
public boolean isUsingDashSwithBandwith();
public void setUsingDashSwithBandwith(boolean usingDashSwithBandwith);
//设置及获取初始化音视频码率
public int getInitDashVideoBandwidth();
public void setInitDashVideoBandwidth(int initDashVideoBandwidth);
public int getInitDashAudioBandwidth();
public void setInitDashAudioBandwidth(int initDashAudioBandwidth);

//手动控制视频码率
public void selectDashVideoBandwidth(int bandwidth);
//手动控制音频码率
public void selectDashAudioBandwidth(int bandwidth);
//设置监听视频码率列表
public void setOnDashVideoBandwidthList(IDashBandwidthList listener);
//设置监听音频码率列表
public void setOnDashAudioBandwidthList(IDashBandwidthList listener);
//设置码率变化回调通知,PlayEvent.MULTI_STREAM_CURRENT_VIDEO_BITRATE_CHANGED 收到的视频码率切换通知PlayEvent.MULTI_STREAM_CURRENT_AUDIO_BITRATE_CHANGED 收到的音频码率切换通知
public void setOnDashStatusListener(IDashStatusListener listener);

//调用示例:
//1.设置开关
mCNCSDKSetting.setUsingDashSwithBandwith(true);
//2.调用切换音视频码率
mCNCVideoViewEx.selectDashVideoBandwidth(mSelectCurrentDashVideoBandwidth);
mCNCVideoViewEx.selectDashAudioBandwidth(mSelectCurrentDashAudioBandwidth);

27、预加载

  预加载,可以设置url是否用于预加载,可以设置预加载的个数以及每个url预加载的大小,相关的方法在 PreloadManager中, PreloadManager为单例,

调用示例如下:

//1.在全局设置中打开预加载选项
CNCGlobalSDKSetting.getInstance().setUsingPreload(true);
//2.设置全局配置(可选),若不设置,默认预加载3个url,每个url加载500KB
public void setGlobalConfig(PreloadConfig config);
//preloadconfig 设置类定义如下
public class PreloadConfig extends CommonConfig{
public final int mPreloadCount;//设置预加载个数
public final int mPreloadCacheSize;//设置所有文件预加载缓存大小
//设置setting 为所有播放url的CNCSDKSetting,若不设置,则设置为默认属性
public PreloadConfig(CNCSDKSettings settings, int preloadCount, int cacheSize){
    super(settings);
    this.mPreloadCount = preloadCount;
    this.mPreloadCacheSize = cacheSize;
}
}
//3.设置需要预加载的url
public void preload(String url);
//增加播放url的播放器设置,即设置播放每个url的CNCSdkSetting
public void preload(String url, SingleConfig config);
//移除已经预加载过的url
public void remove(String url);
//4.设置url,及播放
mCNCVideoView.setVideoPath(url);
mCNCVideoView.start();
//5.不需要预加载功能或者程序退出时,调用资源释放
public void releaseResource();

28、DNS缓存失效时间设置

//设置dns缓存失效的时间,单位为ms, 此设置为全局设置,设置一次应用于整个应用的生命周期。
mCNCVideoView.setDnsCacheTimeout(60000);

29、连接超时设置

//此功能优先判断DNS连接的超时时间,dns连接上之后判断tcp连接的超时时间
mCNCVideoView.setOpenConnectTimeout(1000);

30、CC字幕

  字幕逻辑:字幕分为内置字幕和外置字幕,当有内置字幕时,优先显示内置,如果选择了外置字幕,此时,切换到外置字幕,关闭内置字幕。

调用接口:

//打开字幕
public void showSubtitle();
//关闭字幕
public void hidenSubtitle();
//切换内置字幕,当index>=0时,会去切换内置字幕,目前只支持切换默认的内置字幕。
public void selectInternalSubtitle(int index);
//切换外挂字幕,当index>=0时,会去切换相应的外挂字幕,index与getExternalSubtitleList返回的列表相对应。
public void selectExternalSubtitle(int index);
//获取当前加载的视频是否有字幕(包括内置字幕和外置字幕其中一个以上)
public boolean getSubtitleStatus();
//获取内置字幕列表,目前不支持列表,只支持返回一个字幕,只需要判断list不为空即可
public List<String> getInternalSubtitleList();
//获取成功加载之后的外挂字幕,目前只支持加载本地的外挂字幕
public List<String> getExternalSubtitleList();
//视频加载之后,获取的加载字幕信息,包括内置字幕和外挂字幕
public interface OnLoadSubtitlePreparedListener {
    void onLoadSubtitlePrepared(SubtitleManager.SubtitleType type);
}
//设置获取加载视频之后的字幕信息监听
public void setOnLoadSubtitlePreparedListener(OnLoadSubtitlePreparedListener listener);

调用示例:

//1、设置外挂字幕路径列表
settings.setSubtitlePathList(list);
//2 设置监听
mCNCVideoViewEx.setOnLoadSubtitlePreparedListener(new mCNCVideoView.OnLoadSubtitlePreparedListener() {
                @Override
                public void onLoadSubtitlePrepared(SubtitleManager.SubtitleType type) {
                    switch (type) {
                           //内置字幕
                        case INTERNAL:
                            mBtnCCSubtitle.setVisibility(View.VISIBLE);
                            mBtnCCSubtitle.setOnClickListener(mSettingListener);
                            //监听字幕列表
                            mInternalSubtitleList =                                     mCNCVideoViewEx.getInternalSubtitleList();
                            mCurrentSelectSubtitleIndex = 1;
                            break;
                            //外挂字幕
                        case EXTERNAL:
                            //监听字幕列表
                            mSubtitleList = mCNCVideoViewEx.getExternalSubtitleList();
                            //如果外挂字幕都加载成功则显示
                            if (mSubtitleList != null && mSubtitleList.size() > 0) {
                                mBtnCCSubtitle.setVisibility(View.VISIBLE);
                                mBtnCCSubtitle.setOnClickListener(mSettingListener);
                            }
                            //只有外挂字幕
                            if (mSubtitleList != null && mCurrentSelectSubtitleIndex != 1) {
                                mCurrentSelectSubtitleIndex = 1;
                            }

                            break;
                    }

                }
            });
//3 切换
//切换内置字幕
 mCNCVideoViewEx.selectInternalSubtitle(0);
//切换外挂字幕
 mCNCVideoViewEx.selectExternalSubtitle(index);

31、Dash-DRM播放

其设置流程如下,目前播放器只支持widevine的解密播放

1、打开DRM功能
 mCNCSDKSettings.setUsingDrmPlay(true);
2、拼接鉴权URL,并设置 ,其url的拼接规则,请联系网宿DRM的产品负责人
mCNCSDKSettings.setLa_Url(String mLa_Url)
3、播放DRM视频
mCNCVideoViewEx.play(url);

第五章 接口说明

1、生命周期

  在App的Activity生命周期的各阶段,希望对播放器能做一些处理,比如在“后台播放”小节所述的onPause和onResume的功能,又或者在onDestroy时销毁播放器以释放资源。
  这些功能都在CNCVideoViewEx中实现了,方法名与Activity的生命周期方法名对应。强烈建议在Activity的生命周期中调用相应的方法以达到更好体验效果。
  如在Activity的onResume中调用mCNCVideoViewEx.onResume:

@Override
protected void onResume() {
    Log.d(TAG, "onResume");
    super.onResume();
    if (mCNCVideoViewEx != null) {
        mCNCVideoViewEx.onResume();
    }
}

CNCMediaPlayer SDK提供下列跟生命周期相关的接口:

  • void onPause()
    Activity onPause时调用,当不允许后台播放时会暂停播放。
  • void onResume()
    Activity onResume时调用,当不允许后台播放时会恢复播放。
  • void onStart()
    Activity onStart时调用。
  • void onStop()
    Activity onStop时调用,绑定service来保证播放器在后台不被销。
  • void onDestroy()
    Activity onDestroy时调用,销毁播放器。
  • boolean onBackPressed()
    当触发Activity的onBackPressed时调用。会判断播放器是否处于全屏状态,如果是则退出全屏并返回true,否则返回false。建议Activity的onBackPressed按以下方式重载:
@Override
public void onBackPressed() {
    if (mCNCVideoViewEx != null && mCNCVideoViewEx.onBackPressed()) {
        return;
    }
    //退出Activity
    super.onBackPressed();
}

这样,当用户按下返回键时,如果正处于全屏状态,则会返回到非全屏状态,否则退出当前Activity。

2、播放控制

SDK的CNCVideoViewEx类提供常用的用于控制播放的接口:
1)void play(String url)
启动播放器并加载url进行播放。

  • void play(MediaPlayerVideoEpisode currentEpisode, List episodeList)
    启动播放器,传入当前剧集和剧集列表(当前剧集包含清晰度列表可用于切换清晰度,剧集列表用于切换下一集),并加载当前剧集中默认清晰度对应的url。
    currentEpisode:当前集,包含清晰度列表
    episodeList:剧集列表
  • void start()
    恢复播放。
  • void restart ()
    重新加载视频。
  • void pause()
    暂停播放。

2)int getDuration()
获取视频时长,单位ms。

3)int getCurrentPosition()
获取当前播放位置,单位ms。

4)void seekTo(int pos)
seek到指定时间点,单位ms。实际上会从邻近的关键帧开始播放。

5)boolean isPlaying()
判断是否处于播放状态。

6)int getBufferPercentage()
获取缓存时长与视频总时长的百分比。

7)void closePlayer()
销毁播放器。

8)void reconnect ()
重连(比如断网后恢复),点播情况下会恢复到之前的进度。

9)void setFullscreen(boolean fullscreen)
设置全屏或退出全屏。

10)void setAspectRatio(int ratio)
设置播放器显示的视频画面比例。
ratio:比例参数,5个可选值如下:

IRenderView.AR_ASPECT_FIT_PARENT //适应屏幕(默认)
IRenderView.AR_ASPECT_FILL_PARENT //填满窄边
IRenderView.AR_MATCH_PARENT //填满屏幕
IRenderView.AR_16_9_FIT_PARENT //16:9
IRenderView.AR_4_3_FIT_PARENT //4:3

11)void selectTrack(int track)
处理音频track或视频track。

12)void deselectTrack(int track)
禁用音频track或视频track。

13)boolean startFileRecoding(String filename, String format, int mode, int gifScale)
开始视频录制。
filename:保存的文件名(不包含.mp4、.gif等后缀),如果为空,则默认用当前时间戳作为文件名。
format:录制的视频格式,可以是"mp4"或"gif"。
mode:录制模式。两种模式可选:
IMediaPlayer.FILE_RECODING_MODE_NORMAL //录制视频源模式
IMediaPlayer.FILE_RECODING_MODE_RECODING_SCREEN //录屏模式
gifScale:录制gif动画的清晰度,默认清晰度可选范围为270-480p

  • boolean startFileRecoding(String filename, String format);
    录制视频源模式的录制。参见startFileRecoding(String filename, String format, int mode)。
  • boolean stopFileRecoding()
    同步结束录制,对手机性能较差或者片源分辨率较高的情况,可能比较耗时
  • boolean stopFileRecodingAsync()
    异步结束录制,避免阻塞线程,后续通过录制的相关事件回调获取结果。
  • boolean isFileRecoding()
    返回当前是否正在录制。
  • boolean isFileRecodingStoping()
    返回当前是否正在结束录制的过程中(有时结束录制会比较耗时)。

14)void takeScreenShot()
截图并保存成jpg文件,保存到默认路径下。

15)void checkHevcSupportFromServer()
从服务器支持列表中取得当前手机的H265支持情况。

16)void setH264VideoUrl(String h264VideoUrl)
设置用于适配H264播放的URL。此外默认输入框的输入作为H265链接。

17)void setMute(boolean mute)
设置播放器是否静音,不影响外部系统音量。

3、事件回调

1)void setOnStatusCodeEventListener(OnStatusCodeEventListener listener)
SDK提供状态码事件回调,可以获取不同的播放错误类型等状态码事件,具体的状态码分类详见附表。

2)void setOnFullscreenChangeListener(OnFullscreenChangeListener listener)
设置播放器全屏变化事件的监听。

3)void setOnMediaEventsListener(IMediaEventsListener listener)
设置视频相关事件的监听(暂停、播放、开始缓冲、结束缓冲、播放结束、视频准备就绪、播放错误、视频信息)。
IMediaEventsListener接口提供了多个播放器相关事件的回调方法。

  • void onMediaPause()
    当视频暂停时回调。
  • void onMediaStart()
    当视频开始播放时回调。
  • void onBufferingStart()
    当因缺少数据而开始缓冲时回调。
  • void onBufferingEnd()
    当缓冲结束时回调。
  • void onMediaCompletion()
    当播放结束时回调。
  • void onMediaPrepared()
    当视频进入prepared状态时回调。
  • void onMediaError(int what, int extra)
    当播放出错时回调。
    错误参数参考:
    int MEDIA_ERROR_UNKNOWN = 1;
    int MEDIA_ERROR_SERVER_DIED = 100;
    int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200;
    int MEDIA_ERROR_IO = -1004;
    int MEDIA_ERROR_MALFORMED = -1007;
    int MEDIA_ERROR_UNSUPPORTED = -1010;
    int MEDIA_ERROR_TIMED_OUT = -110;
  • void onMediaInfo(int what, int extra)
    当有视频信息日志时回调。
    info参数参考:
    int MEDIA_INFO_UNKNOWN = 1;
    int MEDIA_INFO_STARTED_AS_NEXT = 2;
    int MEDIA_INFO_VIDEO_RENDERING_START = 3;
    int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700;
    int MEDIA_INFO_BUFFERING_START = 701;
    int MEDIA_INFO_BUFFERING_END = 702;
    int MEDIA_INFO_NETWORK_BANDWIDTH = 703;
    int MEDIA_INFO_BAD_INTERLEAVING = 800;
    int MEDIA_INFO_NOT_SEEKABLE = 801;
    int MEDIA_INFO_METADATA_UPDATE = 802;
    int MEDIA_INFO_TIMED_TEXT_ERROR = 900;
    int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901;
    int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902;
    int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001;
    int MEDIA_INFO_AUDIO_RENDERING_START = 10002;
    int MEDIA_INFO_VIDEO_SIZE_CHANGED = 20000; //分辨率发生变化时,收到的监听
    int MEDIA_INFO_VIDEO_SIZE_WIDTH_CHANGED = 20001; //分辨率发生变化后,回调新的width
    int MEDIA_INFO_VIDEO_SIZE_HEIGHT_CHANGED = 20002; //分辨率发生变化后,回调新的height
//码率切换成功时,提示的播放码率
int CNC_FFP_MSG_DASH_CHANGE_VIDEO_BITRATE = 60007;
int CNC_FFP_MSG_DASH_CHANGE_AUDIO_BITRATE = 60008;
//刚开始播放时,播放的码率
int CNC_FFP_MSG_DASH_FIRST_PLAY_VIDEO_BITRATE = 60010;
int CNC_FFP_MSG_DASH_FIRST_PLAY_AUDIO_BITRATE = 60011;

4)void setFileRecodingEventsListener(IFileRecodingEventsListener listener)
设置视频录制相关事件的回调。

  • onFileRecodingStart(String filename)
    录制开始事件。
  • void onFileRecodingComplete(String filename, int timeLength, long fileSize)
    录制正常结束事件。
    filename:完整文件名(包含完整路径)。
    timeLength:录制后的视频时长,单位秒。
    fileSize:录制后的视频大小,单位字节。
  • void onFileRecodingEnd()
    录制结束事件,不管正常结束或异常结束,之后都会触发onFileRecodingEnd。

5)HLS 码率自适应相关回调

   /**
    * 返回当前播放码率的接口
    * bitrate为当前播放的码率,first判断是否是刚开始播放的码率
    */
   public interface IHlsCurrentBitrate {
       void hlsCurrentBitrateAvaliable(long bitrate, boolean first);
  }
   
   /**
    * 获取播放码率列表,当没有数据时,返回null
    */
   public interface IHlsBitrateList {
       void hlsBitrateList(long bitrateList[]);
  }

6)获取原始数据相关回调

   /**
     * 获取pcm音频数据
     */
    public interface OnAudioPCMListener {
        /**
         *
         * @param mp 播放器实例
         * @param byteBuffer 获取bufffer内容
         * @param len //数据大小
         * @param timesample //当前的时间戳,单位为ms
         * @param channels //音频通道数
         * @param sampleRate //采样率
         * @param sampleFormat //sample format 参考AVSampleFormat
         */
        void onAudioPCMAvailable(IMediaPlayer mp, ByteBuffer byteBuffer, int len, long timesample, int channels, int sampleRate, int sampleFormat);
    }

    /**
     * 获取yuv数据
     */
    public interface OnVideoRawDataListener {
        /**
         *
         * @param mp 播放器实例
         * @param byteBuffer 获取buffer内容
         * @param len 数据大小
         * @param timesample 当前的时间戳 单位为ms
         * @param width 视频的宽度
         * @param height 视频的高度
         * @param extend 如果能获取到的为视频的旋转角度,默认为0
         */
        void onVideoRawDataAvailable(IMediaPlayer mp, ByteBuffer byteBuffer, int len, long timesample, int width, int height, int extend);
    }

4、CNCGlobalSDKSetting配置

  CNCGlobalSDKSetting是CNCMediaPlayer的全局配置类,单例对象,通常要求在实例化CNCVideoViewEx和CNCMediaController之前对各个配置项进行配置,主要是配置鉴权,日志等全局相关设置:

    CNCGlobalSDKSetting.clear();
    mSDKSettings = CNCGlobalSDKSetting.getInstance();

1)String getAuthAppId()
获取设置的鉴权id。

2)void setAuthAppId(String authAppId)
设置鉴权id。

3)String getAuthKey()
获取设置的鉴权key。

4)void setAuthKey(String authKey)
设置鉴权key。

5)void setLogLevel(int logLevel)
logLevel:设置输出log等级,有种可选, LOG_LEVEL_ALL(输出全部)、LOG_LEVEL_DEBUG(输出debug级别以上)、LOG_LEVEL_INFO(输出info级别以上)、LOG_LEVEL_WARN(输出warning以上)、LOG_LEVEL_ERROR(输出error级别以上)和LOG_LEVEL_NONE(关闭log),默认为LOG_LEVEL_ALL。

6)int getLogLevel()
获取log输出等级。

7)boolean isLive()
判断是否为直播。

8)void setLive(boolean isLive)
设置是否直播。
isLive:true为直播,false为点播,默认为false。

9)int getGestureBrightnessVolume()
获取亮度和音量控制区域的设置。

10)void setGestureBrightnessVolume(int gestureBrightnessVolume)
设置手势控制时,控制亮度和音量的区域。前提是设置setUsingGestureController(true);
gestureBrightnessVolume: 默认为CNCSDKSettings.GESTURE_LEFT_BRIGHTNESS_RIGHT_VOLUME(左半边亮度,右半边音量),可以为:
CNCSDKSettings.GESTURE_LEFT_BRIGHTNESS_RIGHT_VOLUME 或 CNCSDKSettings.GESTURE_LEFT_VOLUME_RIGHT_BRIGHTNESS

11)boolean isUsingGestureController()
判断是否使用了手势控制。

12)void setUsingGestureController(boolean usingGestureController)
设置是否使用手势控制。

13)boolean isUsingSelectVideoQuality()
判断是否使用了“切换清晰度”功能。

14)void setUsingSelectVideoQuality(boolean usingSelectVideoQuality)
设置是否使用“切换清晰度”功能,若设为true,将在控制界面显示切换清晰度的按钮。

15)public boolean isUsingPreload()
判断是否使用了预加载

16)public void setUsingPreload(boolean mUsingPreload)
设置用于预加载,只有启用预加载的标志,预加载才能生效

5、CNCSDKSettings配置

  CNCSDKSettings是创建播放器的配置类,通常要求在实例化CNCVideoViewEx和CNCMediaController之前对各个配置项进行配置

    mSDKSettings = CNCSDKSettings.getInstance();

5.1 设置SurfaceView

1)setEnableSurfaceView(boolean enableSurfaceView)
设置是否使能SurfaceView,默认为true。

2)boolean isEnableSurfaceView()
获取是否使能SurfaceView。

5.2 设置TextureView

1)boolean isEnableTextureView()
获取是否使能TextureView。

2)void setEnableTextureView(boolean enableTextureView)
设置是否使能TextureView,默认为false。

5.3 设置AutoRotate

1)boolean isAutoRotate()
判断是否允许自动翻转。

2)void setAutoRotate(boolean autoRotate)
设置是否允许自动翻转。

5.4 设置Live

1)boolean isLive()
判断是否为直播。

2)void setLive(boolean isLive)
设置是否直播。
isLive:true为直播,false为点播,默认为false。

3)boolean isUsingNextEpisodeBtn()
判断是否使用“切换下一集”功能。

4)void setUsingNextEpisodeBtn(boolean usingNextEpisodeBtn)
设置是否使用“切换下一集”功能,设为true,将在控制界面显示切换下一集的按钮。

5.5 设置延迟追赶

1)boolean isUsingCatchLiveDelay()
判断是否使用延时追赶。

2)void setUsingCatchLiveDelay(boolean usingCatchLiveDelay)
设置是否使用延时追赶。

3)int getCatchLiveDelayTimeInMs()
获取触发追赶的延迟阈值,单位ms。

4)void setCatchLiveDelayTimeInMs(int catchLiveDelayTimeInMs)
设置触发追赶的阈值,单位ms。默认6000ms,最小1000ms,最大10000ms。 建议延时追赶阈值比缓冲阈值大1000ms以上。

5.6 设置后台播放

1)boolean isEnableBackgroundPlay()
判断是否允许后台播放。

2)void setEnableBackgroundPlay(boolean enableBackgroundPlay)
设置是否允许后台播放,默认为false。

5.7 设置后台不解码

1)boolean isDisableDecodeVideoInBackground()
判断是否后台播放时不解码视频。

2)void setDisableDecodeVideoInBackground(boolean disableDecodeVideoInBackground)
设置是否后台播放时不解码视频。

5.8 设置视频硬解

1)boolean isUsingMediaCodec()
判断是否使用视频硬解。

2)void setUsingMediaCodec(boolean usingMediaCodec)
设置是否使用视频硬解,默认为false。

5.9 设置OpenSLES

1)boolean isUsingOpenSLES()
判断是否使用OpenSL ES硬件音频加速。

2)void setUsingOpenSLES(boolean usingOpenSLES)
设置是否使用OpenSL ES硬件音频加速,默认为false。

5.10 设置OverlayFormat

1)String getOverlayFormat()
获取视频显示的像素格式。

2)void setOverlayFormat(String overlayFormat)
  设置视频显示的像素格式。
  pixelFormat:以下五种格式之一,默认为  CNCSDKSettings.RGB_565。
  CNCSDKSettings.RGB_565
  CNCSDKSettings.RGB_888
  CNCSDKSettings.RGBX_8888
  CNCSDKSettings.YV12
  CNCSDKSettings.OpenGL_ES2

5.11 设置缓冲

1)int getBufferingTimeInMs()
获取缓冲阈值。

2)boolean setBufferingTimeInMs(int bufferingTime)
设置缓冲阈值,单位ms。默认0,最小0(关闭缓冲),最大5000ms。

5.12 设置视频解码质量

1)boolean isEnhanceVideoDecodeQuality
获取是否提升视频解码质量。

2)void setEnhanceVideoDecodeQuality(boolean enhanceVideoDecodeQuality)
设置是否提升视频解码质量,降低马赛克(会消耗更多的cpu,正常情况下,不需要设置这个选项效果也足够好)。

5.13 设置tcp连接超时

1)int getConnectionTimeoutInSecond()
获取连接超时时间,单位 秒。

2)void setConnectionTimeoutInSecond(int connectionTimeout)
设置连接超时时间,单位 秒。不建议使用,默认的机制会比较灵活地判断超时。

5.14 设置丢帧

1)int getFramedrop()
获取cpu处理速度较慢时的丢帧参数。

2)void setFramedrop(int framedrop)
设置cpu处理速度较慢时的丢帧,最小值为-1,最大值为120,默认为3,数值越大丢帧越严重。

5.15 设置首屏加速

1)boolean isEnableFirstScreenAcceleration()
判断是否允许首屏加速,默认为true。

2)void setEnableFirstScreenAcceleration(boolean enableFirstScreenAcceleration)
设置是否首屏加速,默认为true。

5.16 录制

1)int getMinMp4RecodingTimeInMs()
获取设置的mp4录制时间最小值,单位ms。

2)void setMinMp4RecodingTimeInMs(int timeInMs)
设置mp4录制时间最小值,单位ms,最小3000,最大60000。

3)int getMaxMp4RecodingTimeInMs()
获取设置的mp4录制时间最大值,单位ms。

4)void setMaxMp4RecodingTimeInMs(int timeInMs)
设置mp4录制时间最大值,单位ms,最小3000,最大60000。

5)int getMinGifRecodingTimeInMs()
获取设置的gif录制时间最小值,100ms,不提供设置接口。

6)int getMaxGifRecodingTimeInMs()
获取设置的gif录制时间最大值,单位ms。

7)void setMaxGifRecodingTimeInMs(int timeInMs)
设置gif录制时间最大值,单位ms,最小100,最大3000。

8)String getFileRecodingPath()
获取设置的录制文件存放路径。

9)void setFileRecodingPath(String path)
设置录制文件存放路径,默认路径/sdcard/Android/data/包名/files/recoding/。

5.17 H265

1)boolean isUsingHWHevcAvc()
判断开启h265适配。

2)void setUsingHWHevcAvc(boolean isEnable)
设置开启h265适配。

5.18 代理

1)boolean isUsingSocks5()
判断是否使用socks5代理。

2)boolean isUsingSocks4()
判断是否使用socks4代理。

3)boolean isUsingHttp()
判断是否使用Http代理。

4)boolean isUsingHttps()
判断是否使用Https代理。

5)void setUsingSocks5(boolean usingSocks5)
设置是否使用socks5代理。

6)void setUsingSock4(boolean usingSocks4)
设置是否使用socks4代理。

7)void setUsingHttp(boolean usingHttp)
设置是否使用http代理。

8)void setUsingHttps(boolean usingHttps)
设置是否使用https代理。

9)String getProxyHostname()
获取代理服务器地址。

10)void setProxyHostname(String hostname)
设置代理服务器地址。

11)int getProxyPort()
获取代理服务器端口。

12)void setProxyPort(int hostPort)
设置代理服务器端口。

13)String getProxyUsername()
获取代理用户名。

14)void setProxyUsername(String username)
设置代理用户名。

15)String getProxyPassword()
获取代理密码。

16)void setProxyPassword(String password)
设置代理密码。

17)void setUsingSpeedPlay(Boolean isUsingSpeedPlay)
设置是否使用倍速播放

18)boolean isUsingSpeedPlay()
是否使用倍速播放

5.19 本地点播缓存设置相关

1)void setUsingLocalCache(boolean usingLocalCache)
设置是否使用点播缓存功能

2)boolean isUsingLocalCache()
获取是否使用点播缓存功能

5.20 分辨率重建

1)void setIsSuperRes(boolean mIsSuperRes)
设置是否分辨率重建

2)boolean getIsSuperRes()
查询是否分辨率重建

5.21 解密

1)void setUsingHls(boolean usingHls)
设置hls解密

2)boolean isUsingHls()
查询是否hls解密

3)void setHlsVideoId(String videoId)
设置hls解密的VideoId

4)String getHlsVideoId()
获取hls解密的VideoId

5)boolean isUsingMp4Encrytion()
查询是否mp4解密

6)void setUsingMp4Encryption(boolean usingMp4Encryption)
设置mp4解密

5.22 DASH相关设置

//设置及获取是否开启手动码率控制
public boolean isUsingDashSwithBandwith();
public void setUsingDashSwithBandwith(boolean usingDashSwithBandwith);

//设置及获取初始化音视频码率
public int getInitDashVideoBandwidth();
public void setInitDashVideoBandwidth(int initDashVideoBandwidth);
public int getInitDashAudioBandwidth();
public void setInitDashAudioBandwidth(int initDashAudioBandwidth);

5.23 DNS缓存失效时间

//设置dns缓存失效的时间,单位为ms
public int getDnsCacheTimeout();

public void setDnsCacheTimeout(int mDnsCacheTimeout);
//设置开启dns缓存失效的开关
public boolean isUsingDnsCacheTimeout() ;
public void setUsingDnsCacheTimeout(boolean mUsingDnsCacheTimeout);

5.24 连接超时设置

设置DNS和TCP的连接超时时间

//设置获取连接超时的时间,单位为ms,默认为0不设置
public int getOpenConnectTimeout();
public void setOpenConnectTimeout(int mOpenConnectTimeout);

5.25 字幕

//CNCSDKSetting 内置外挂字幕设置
//设置是否开启内置字幕解析, 默认已开启
public void setInternalSubtitleStatus(boolean mInternalSubtitle);
//获取当前是否开启内置字幕解析状态
public boolean isOpenInternalSubtitle();
//设置外挂字幕路径列表
public void setSubtitlePathList(List<String> pathList)
//获取外挂字幕路径列表
public List<String> getSubtitlePathList();

5.26 DASH-DRM

//CNCSDKSetting 设置
//设置开启DRM播放
public void setUsingDrmPlay(boolean mUsingDrm);
//设置拼接完成的鉴权url
public void setLa_Url(String mLa_Url);

6、媒体信息相关

  媒体信息相关的接口由CNCVideoViewEx提供,具体使用方法参考InfoHudViewHoldera和MediaInfoViewHolder类。

  • int getVideoDecoder()
    获取视频解码器类型(软解或硬解)。
  • float getVideoOutputFramesPerSecond()
    获取视频的显示帧率。
  • float getVideoDecodeFramesPerSecond()
    获取视频的解码帧率。
  • long getVideoCachedDuration()
    获取缓存的视频时长。
  • long getAudioCachedDuration()
    获取缓存的音频时长。
  • long getVideoCachedBytes()
    获取缓存的视频字节数。
  • long getAudioCachedBytes()
    获取缓存的音频字节数。
  • long getTcpSpeed()
    获取当前的拉流速度,单位为 字节/秒。
  • long getBitRate()
    获取码率,是整个视频的码率而非实时码率。
  • int getVideoWidth()
    获取视频的宽。
  • int getVideoHeight()
    获取视频的高。
  • int getDuration()
    获取视频的时长。
  • MediaMetaEntry getMediaMetaEntry()
    获取视频的元数据。

通过MediaMetaEntry可获取音视频的meta数据:

  • String getFormat()
    获取视频格式,如"flv"、"mp4"等。
  • String getVideoLanguage()
    获取视频language。
  • String getVideoCodecName()
    获取视频解码器名。
  • float getFps()
    获取视频帧率。
  • String getPixelFormat()
    获取视频像素格式。
  • String getAudioLanguage()
    获取音频language。
  • String getAudioCodecName()
    获取音频解码器名。
  • int getSampleRate()
    获取音频采样率,单位Hz。
  • String getChannel()
    获取音频通道类型,即"mono"、"stereo"等。
  • boolean setSpeed(float speed)
    设置播放速率
  • void setOnSeiTextListener(OnSeiTextListener var)
    设置获取到sei数据的监听。

第六章 状态码

网宿再度登榜“2020中国互联网综合实力百家企业”