Link Visual App端SDK提供了音视频播放、语音对讲等功能。
依赖SDK | 概述 |
---|---|
API通道 | 提供API通道能力 |
初始化
在初始化Link Visual视频Media SDK前,需要正确集成安全图片。详细请参见集成安全图片。
依赖引入
// 1. 在根目录下的build.gradle中添加Aliyun Maven仓库的引用
allprojects {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
}
// 2. App build.gradle中添加依赖
implementation('com.aliyun.iotx:linkvisual-media:1.2.21-ilop')
更多版本发布信息请看Link Visual SDK更新记录。
混淆配置
# keep and don't warn Link Visual
-dontwarn com.aliyun.iotx.linkvisual.**
-dontwarn com.google.android.exoplayer2.**
-keep class com.aliyun.iotx.linkvisual.media.** { *; }
使用方式
视频播放器按功能分为三种。
- 直播播放器
- 用于RTMP直播源,具有时延低的特点。
- 支持P2P(需使用接入Link Visual设备端SDK的摄像头)。
- 设备录像点播播放器
用于设备录像回放的播放,可调整播放进度。
- HLS播放器
- 用于基于HLS的云端录像回放的播放,支持MPEG-TS和fMP4容器,AES-128加密方式。
- 提供两种HLS播放器供选择:自研HLS播放器和基于ExoPlayer封装的播放器。
功能 | 直播播放器 | 设备录像点播播放器 | HLS播放器(自研) | HLS播放器(ExoPlayer) |
---|---|---|---|---|
视频播放 | ✓ | ✓ | ✓ | ✓ |
音频播放 | ✓ | ✓ | ✓ | ✓ |
暂停/恢复 | x | ✓ | ✓ | ✓ |
跳至指定位置播放 | x | ✓ | ✓ | ✓ |
总时长 | x | ✓ | ✓ | ✓ |
当前播放进度 | x | ✓ | ✓ | ✓ |
播放器状态变更通知 | ✓ | ✓ | ✓ | ✓ |
设置播放音量 | ✓ | ✓ | ✓ | ✓ |
变速播放 | x | ✓ | ✓ | ✓ |
循环播放 | x | x | x | ✓ |
单帧步进 | x | ✓ | ✓ | x |
画面缩放模式设置 | ✓ | ✓ | ✓ | ✓ |
播放器截图 | ✓ | ✓ | ✓ | ✓ |
截图到文件 | ✓ | ✓ | ✓ | x |
边播边录 | ✓ | ✓ | ✓ | x |
硬解码 | ✓ | ✓ | ✓ | ✓ |
数字变焦 | ✓ | ✓ | ✓ | ✓ |
提供YUV数据 | ✓ | ✓ | ✓ | x |
提供SEI数据 | ✓ | ✓ | ✓ | x |
播放器的使用样例代码如下:
- 直播播放器
// 构造播放器实例 LivePlayer player = new LivePlayer(getApplicationContext()); // 设置textureview player.setTextureView(textureView); // 设置必要的状态监听 player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() { @Override public void onPlayerStateChange(int playerState) { Log.d(TAG, "play state= " + playerState); switch (playerState) { case Player.STATE_BUFFERING: break; case Player.STATE_IDLE: break; case Player.STATE_READY: break; case Player.STATE_ENDED: break; default: break; } } }); // 设置错误监听 player.setOnErrorListener(new OnErrorListener() { @Override public void onError(PlayerException exception) { makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage()); } }); // 设置RTMP地址 player.setDataSource("rtmp://xx.xx.xx.xx/live"); // 设置数据源就绪监听器 player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared() { // 数据源就绪后开始播放 player.start(); } }); player.prepare(); ... // 停止播放 player.stop(); ... // 释放播放器资源 player.release();
- 设备录像点播播放器
// 构造播放器实例 VodPlayer player = new VodPlayer(getApplicationContext()); // 设置textureview player.setTextureView(textureView); // 设置必要的状态监听 player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() { @Override public void onPlayerStateChange(int playerState) { Log.d(TAG, "play state= " + playerState); switch (playerState) { case Player.STATE_BUFFERING: break; case Player.STATE_IDLE: break; case Player.STATE_READY: break; case Player.STATE_ENDED: break; default: break; } } }); // 设置错误监听 player.setOnErrorListener(new OnErrorListener() { @Override public void onError(PlayerException exception) { makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage()); } }); // 设置支持点播的RTMP地址 player.setDataSource("rtmp://xxxx"); // 设置数据源就绪监听器 player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared() { // 数据源就绪后开始播放 player.start(); } }); player.prepare(); ... // 暂停播放 player.pause(); ... // 恢复播放 player.start(); ... // 停止播放 player.stop(); ... // 释放播放器资源 player.release();
- HLS云存录像播放器(自研)
HlsPlayer player = new HlsPlayer(getApplicationContext()); // 设置textureview player.setTextureView(textureView); // 设置错误监听 player.setOnErrorListener(new OnErrorListener() { @Override public void onError(PlayerException exception) { makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage()); } }); // 设置状态监听 player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() { @Override public void onPlayerStateChange(int playerState) { switch (playerState) { case Player.STATE_BUFFERING: break; case Player.STATE_IDLE: break; case Player.STATE_READY: break; case Player.STATE_ENDED: break; default: break; } } }); // 设置m3u8地址 player.setDataSource("http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear3/prog_index.m3u8"); // 设置数据源就绪监听器 player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared() { // 数据源就绪后开始播放 player.start(); } }); player.prepare(); ... // 暂停播放 player.pause(); ... // 恢复播放 player.start(); ... // 停止播放 player.stop(); ... // 释放播放器资源 player.release(); ...
- HLS云存录像播放器(ExoPlayer)推荐使用自研播放器
ExoHlsPlayer player = new ExoHlsPlayer(getApplicationContext()); // 设置textureview player.setTextureView(textureView); // 也可以使用Exo的SimpleExoPlayerView来作为播放器的UI组件 // simpleExoPlayerView.setPlayer(player.getExoPlayer()); // simpleExoPlayerView.requestFocus(); // 设置错误监听 player.setOnErrorListener(new OnErrorListener() { @Override public void onError(PlayerException exception) { makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage()); } }); // 设置状态监听 player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() { @Override public void onPlayerStateChange(int playerState) { switch (playerState) { case Player.STATE_BUFFERING: break; case Player.STATE_IDLE: break; case Player.STATE_READY: break; case Player.STATE_ENDED: break; default: break; } } }); // 设置m3u8地址 player.setDataSource("http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear3/prog_index.m3u8"); // 设置数据源就绪监听器 player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared() { // 数据源就绪后开始播放 player.start(); } }); player.prepare(); ... // 暂停播放 player.pause(); ... // 恢复播放 player.start(); ... // 停止播放 player.stop(); ... // 释放播放器资源 player.release(); ... // 截图 textureview.getBitmap();
播放器状态介绍
通过设置播放器状态监听器,可接收到状态变更事件,用于相关UI元素的变更。
状态变更事件如:播放中发生错误、主动停止播放等。
- IDLE:播放器没有任何内容播放时的状态。
- BUFFERING:播放器正在缓冲,当前的位置还不可以播放。状态变更事件如:开始播放时缓冲、seek后重新缓冲。
- READY:播放器已经有内容在播放。状态变更事件如:首帧数据已经渲染、seek缓冲完成开始播放新内容。对于点播播放器,若已seek或播放到文件结尾,则会回调
OnCompletionListener.onCompletion()
方法,状态不会切换到ENDED。 - ENDED:播放器已结束播放。播放出错或stop后会切换到该状态。
接口说明
- LinkVisualMedia
说明 LinkVisualMedia用于实现预建连,若无预建连优化直播首帧出图速度需求,可忽略
- 获取单例方法
LinkVisualMedia getInstance();
- 初始化方法
/** * 全局资源初始化方法,SDK内部自动完成初始化,无需再调用 * @Deprecated */ void init();
- 为IPC设备请求播放预建连
/** * 尝试与IPC设备进行预建连,一旦预建连成功会加快直播的出图速度,需在播放前提前调用 * @param 已经在线的IPC设备的iotId */ void preConnectByIotId(String iotId);
- 获取单例方法
- LivePlayer
- 构造方法
/** * 构造方法 * @param applicationContext ApplicationContext */ LivePlayer(Context applicationContext);
- 设置非加密播放源
/** * 设置播放源 * @param url RTMP地址 */ void setDataSource(String url) throws IllegalArgumentException;
- 设置加密播放源
/** * 设置加密播放源(仅适配Link Visual云提供的RTMP地址) * @param url RTMP源地址 * @param isEncrypted 是否是加密源 * @param decryptIv 解密向量,16 byte array * @param decryptKey 解密密钥,16 byte array * @throws IllegalArgumentException */ void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
- 设置IPC直播数据源,该接口已开启加密和强制I帧
/** * 设置IPC直播数据源,该接口已开启加密和强制I帧 * @param iotId IPC设备的iotId * @param streamType 流的类型,若有多路码流请关注该参数,C.STREAM_TYPE_MAJOR表示主码流;C.STREAM_TYPE_MINOR表示辅码流 */ void setIPCLiveDataSource(String iotId, int streamType);
- 设置IPC直播数据源,该接口已开启加密和强制I帧
/** * 设置IPC直播数据源,该接口已开启加密和强制I帧 * @param iotId IPC设备的iotId * @param streamType 流的类型,若有多路码流请关注该参数,C.STREAM_TYPE_MAJOR表示主码流;C.STREAM_TYPE_MINOR表示辅码流 * @param cacheDurationInMs 云端缓存的视频长度,若有数据,该数据将会被加速快放,单位ms,该值建议不超过1个GOP * void setIPCLiveDataSource(String iotId, int streamType, int cacheDurationInMs);
- 设置IPC直播数据源
/** * 设置IPC直播数据源. * * @param iotId 设备的iotId * @param streamType 流的类型,若有多路码流请关注该参数,C.STREAM_TYPE_MAJOR表示主码流;C.STREAM_TYPE_MINOR表示辅码流 * @param relayEncrypted 云转是否加密,建议开启 * @param relayEncryptType 云转加密类型 * @param forceIFrame 是否需要强制I帧,建议开启 * @param cacheDurationInMs 云端缓存的视频长度,若有数据,该数据将会被加速快放,单位ms,该值建议不超过1个GOP */ void setIPCLiveDataSource(String iotId, int streamType, boolean relayEncrypted, int relayEncryptType, boolean forceIFrame, int cacheDurationInMs)
- 校验和准备数据
/** * 校验和准备数据 */ void prepare();
- 开始播放视频
/** * 开始播放视频 */ void start();
- 停止播放
/** * 停止播放 */ void stop();
- 重置播放器
/** * 重置播放器 */ void reset();
- 释放播放器资源
/** * 释放播放器资源 */ void release();
- 设置重连次数
/** * 设置重连次数 * 只针对发生{@link PlayerException#SUB_CODE_UNEXPECTED_PULL_STREAM_ERROR}错误时做重连 * @param count 默认为0,建议不超过3次 */ void setReconnectCount(int count);
- 截图
/** * 当前视频画面截图 * @return 如果当前无画面则返回 null */ Bitmap snapShot();
- 截图到文件
/** * 当前视频画面截图 * @param jpegFile 保存截图jpeg的文件 * @return true - 文件保存成功 */ boolean snapShotToFile(File jpegFile);
- 开始录屏
/** * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中 * 文件名后缀必须为.mp4 * 须在{@link PlayerState#STATE_READY}时调用有效 * @param contentFile * @return 操作成功与否 */ boolean startRecordingContent(File contentFile) throws IOException;
- 获取当前录制的视频时长
/** * 获取当前录制的视频时长 * @return 单位ms */ long getCurrentRecordingContentDuration();
- 结束录屏
/** * 停止记录播放内容 * @return 操作成功与否 */ boolean stopRecordingContent();
- 设置播放器音量
/** * 设置播放器音量 * @param audioVolume 取值范围:0~1,0为静音 */ void setVolume(float audioVolume);
- 设置音频流通道类型
/** * 设置音频流通道类型,see {@link android.media.AudioManager},默认使用AudioManager.STREAM_MUSIC * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿 * @param audioStreamType */ void setAudioStreamType(int audioStreamType);
- 设置画面缩放模式
/** * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} * @param videoScalingMode 参见: * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT} * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} */ void setVideoScalingMode(int videoScalingMode);
- 设置软硬解策略
/** * 设置解码器策略,全局生效 * 默认使用强制软解 * * @param decoderStrategy * HARDWARE_FIRST - 硬解优先 * FORCE_SOFTWARE - 强制软解 */ void setDecoderStrategy(DecoderStrategy decoderStrategy)
- 获取当前播放的软硬解类型
/** * 获取当前流的解码器类型,软解或硬解 * * @return 若当前未开流,则返回null * HARDWARE - 硬解码 * SOFTWARE - 软解码 */ DecoderType getDecoderType()
- 设置播放停止时画面绘制策略
/** * 设置播放停止时画面绘制策略 * @param playerStoppedDrawingMode * ALWAYS_KEEP_LAST_FRAME 播放停止时始终保留最后一帧画面 * KEEP_LAST_FRAME_WITHOUT_ERROR 播放停止时只有未出现错误时才保留最后一帧画面(默认是此模式) * ALWAYS_BLACK 播放停止时始终显示黑色 */ void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)
- 设置播放器固定缓存帧数
/** * 设置播放器固定缓存帧数 * @param frameCount 播放器固定缓存帧数,取值范围:0帧~50帧,数值越大播放器延迟越大,流畅性越好,默认5帧 */ void setBufferedFrameCount(int frameCount);
- 设置播放器抗抖动最大缓冲区时长
/** * 设置播放器抗抖动最大缓冲区时长,默认1000ms,范围200-3000ms * @param jitterBufferSizeInMs */ void setMaxJitterBufferSizeInMs(int jitterBufferSizeInMs);
- 设置surfaceview
/** * 设置SurfaceView, 必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView * 注意:GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法; * GLSurfaceView及其容器不可设置背景色 * @param surfaceview */ void setSurfaceView(SurfaceView surfaceview);
- 清除surfaceview
/** * 清除surfaceview */ void clearSurfaceView();
- 设置textureview
/** * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照 * @param textureview */ void setTextureView(TextureView textureView);
- 清除textureview
/** * 清除textureview */ void clearTextureView();
- 设置是否由外部来完成YUV数据的渲染
说明 该模式为高级模式,一旦开启后,播放器内部将不再进行画面渲染,需要自行设置对YUV数据变化的监听,并及时通过YUV数据获取接口取出暂存的YUV数据帧立刻渲染
/** * 设置是否由外部来完成YUV数据的渲染 * @param useExternalRender true为由外部渲染,false为由内部渲染 */ void setUseExternalRender(boolean useExternalRender);
- 获取是否使用外部渲染
/** * 获取是否使用外部渲染 * @return true为由外部渲染,false为由内部渲染 */ boolean useExternalRender();
- 设置播放质量和网络监听器
/** * 设置播放质量和网络监听器 * @param onExternalRenderListener */ void setOnVideoQualityListener(OnVideoQualityListener listener); public interface OnVideoQualityListener { /** * 当缓冲区中持续一段时间无数据后回调该方法,一般由网络不稳定引起,可考虑提示降低清晰度 */ void onVideoJitterBufferEmpty(); }
- 设置外部渲染监听器
/** * 设置外部渲染监听器 * @param onExternalRenderListener */ void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener { public interface OnExternalRenderListener { /** * 通知已经有YUV数据帧需要被渲染 * @param width 视频帧宽 * @param height 视频帧高 * @param timestamp 时间戳,单位为ms */ void onVideoFrameUpdate(int width, int height ,long timestamp); }
- 获取YUV帧数据用于渲染
/** * 获取YUV帧数据用于渲染,只在外部渲染模式下有效 * @return Yuv420p格式视频帧 */ Yuv420pFrame getYuvFrame();
- 设置SEI信息监听器
/** * 设置SEI信息监听器 * * @param seiInfoBuffer 创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃 * @param onSeiInfoListener */ void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener); interface OnSeiInfoListener { /** * 当SEI信息更新时回调 * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据 * @param seiInfoBuffer */ void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer); }
- 设置数据源准备就绪事件监听器
/** * 设置数据源准备就绪事件监听器 * @param listener */ void setOnPreparedListener(OnPreparedListener listener); public interface OnPreparedListener { /** * 数据源准备就绪回调 */ void onPrepared(); }
- 设置播放器错误事件监听器
/** * 设置播放器错误事件监听器,错误类型参见: * {@link PlayerException.SOURCE_ERROR} * {@link PlayerException.RENDER_ERROR} * {@link PlayerException.UNEXPECTED_ERROR} * @param listener */ void setOnErrorListener(OnErrorListener listener); public interface OnErrorListener { /** * 播放器错误回调,参见 * {@link PlayerException} * @param exception */ void onError(PlayerException exception); }
- 设置播放状态变更事件监听器
/** * 设置播放状态变更事件监听器,请参见状态图 * @param listener */ void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener); public interface OnPlayerStateChangedListener { /** * 播放器状态变更回调 * * @param playerState 参见 * {@link PlayerState#STATE_IDLE} * {@link PlayerState#STATE_BUFFERING} * {@link PlayerState#STATE_READY} * {@link PlayerState#STATE_ENDED} */ void onPlayerStateChange(int playerState); }
- 设置首帧被渲染事件监听器
/** * 设置首帧被渲染事件监听器 * @param listener */ void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener); public interface OnRenderedFirstFrameListener { /** * 首帧被渲染回调 */ void onRenderedFirstFrame(); }
- 设置视频内容宽高变更回调
/** * 设置视频内容宽高变更回调 * @param listener */ void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener); public interface OnVideoSizeChangedListener { /** * 内容宽高改变时的回调 * * @param width 视频内容宽,单位像素 * @param height 视频内容高,单位像素 */ void onVideoSizeChanged(int width, int height); }
- 获取音量
/** * 获取音量 * @return 取值范围:0~1,0为静音 */ float getVolume();
- 获取播放器状态
/** * 获取播放状态 * @return 状态枚举: * {@link PlayerState#STATE_IDLE} 播放器初始状态 * {@link PlayerState#STATE_BUFFERING} 缓冲中状态 * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态 * {@link PlayerState#STATE_ENDED} 播放完成状态 */ int getPlayState();
- 获取播放器当前流的连接类型
/** * 获取播放器当前流的连接类型 * 播放器状态为{@link PlayerState#STATE_READY}后过5S调用能准确反映当前使用的流类型 * * @return {@link StreamConnectType} */ StreamConnectType getStreamConnectType();
- 获取播放器当前的帧率/码率等信息
/** * 获取播放器当前的帧率/码率等信息 * 播放器状态为{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效 * @return 包含帧率/码率等信息的json string */ PlayInfo getCurrentPlayInfo();
- 构造方法
- VodPlayer
- 构造方法
/** * 构造方法 * @param applicationContext ApplicationContext */ VodPlayer(Context applicationContext);
- 设置非加密播放源
/** * 设置播放源 * @param url RTMP地址 */ void setDataSource(String url) throws IllegalArgumentException;
- 设置加密播放源
/** * 设置加密播放源(仅适配Link Visual云提供的RTMP地址) * @param url RTMP源地址 * @param isEncrypted 是否是加密源 * @param decryptIv 解密向量,16 byte array * @param decryptKey 解密密钥,16 byte array * @throws IllegalArgumentException */ void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
- 设置播放源为IPC录像(按录像文件名) ,该接口已开启加密
/** * 设置播放源为IPC录像(按录像文件名),该接口已开启加密 * * @param iotId 设备iotId * @param fileName 录像文件名 */ void setDataSourceByIPCRecordFileName(String iotId, String fileName); /** * 设置播放源为IPC录像(按录像文件名),该接口已开启加密 * * @param iotId 设备iotId * @param fileName 录像文件名 * @param seekToPositionInMs 相对文件头的初始偏移量,单位ms */ void setDataSourceByIPCRecordFileName(String iotId, String fileName, long seekToPositionInMs);
- 设置播放源为IPC录像(按录像时间段)
/** * 设置播放地址为已接入生活物联网平台的IPC设备,指定录像时间段的本地录像文件地址 * 该接口已开启加密 * see {@link #setDataSourceByIPCRecordTime(String, int, int, boolean, int, long)} * * @param iotId 设备iotId * @param beginTimeInS 录像开始时间,1970年1月1日开始的秒数 * @param endTimeInS 录像结束时间,1970年1月1日开始的秒数 * @param seekToPositionInMs 相对于beginTime的播放偏移量,单位为ms */ void setDataSourceByIPCRecordTime(String iotId, int beginTimeInS, int endTimeInS, long seekToPositionInMs) /** * 设置播放地址为已接入生活物联网平台的IPC设备,指定录像时间段的本地录像文件地址 * 该接口已开启加密 * see {@link #setDataSourceByIPCRecordTime(String, int, int, boolean, int, long)} * * @param iotId 设备iotId * @param beginTimeInS 录像开始时间,1970年1月1日开始的秒数 * @param endTimeInS 录像结束时间,1970年1月1日开始的秒数 * @param seekToPositionInMs 相对于beginTime的播放偏移量,单位为ms * @param recordType 录像类型: 0(表示计划录像);1(表示报警录像) */ void setDataSourceByIPCRecordTime(String iotId, int beginTimeInS, int endTimeInS, long seekToPositionInMs, int recordType) /** * 设置播放地址为已接入生活物联网平台的IPC设备,指定录像时间段的本地录像文件地址 * * @param iotId 设备iotId * @param beginTimeInS 录像时间段开始时间,UTC时间,1970年1月1日开始的秒数 * @param endTimeInS 录像时间段结束时间,UTC时间,1970年1月1日开始的秒数 * @param encrypted 是否流需要加密,强烈建议开启,对于出海产品,务必保持开启 * @param encryptType 加密类型:目前只支持C.ENCRYPTE_AES_128(AES-128)加密方式 * @param seekToPositionInMs 相对于beginTimeInS的播放偏移量,单位为ms * @param recordType 录像类型: 0(表示计划录像);1(表示报警录像) * 出于安全要求,无特殊情况,请尽量开启加密 */ void setDataSourceByIPCRecordTime(String iotId, int beginTimeInS, int endTimeInS, boolean encrypted, int encryptType, long seekToPositionInMs, int recordType)
- 校验和准备数据
/** * 校验和准备数据 */ void prepare();
- 开始或恢复播放视频
/** * 开始播放或恢复播放视频 */ void start();
- 暂停播放
/** * 暂停播放,调用start()恢复播放 */ void pause();
- seek到指定位置
/** * seek到指定位置 * @param position 毫秒 */ void seekTo(long positionInMs);
- 逐帧播放
/** * 逐帧播放,恢复请调用start() * @return 是否调用成功 */ boolean playFrameByFrame();
- 停止播放
/** * 停止播放 */ void stop();
- 重置播放器
/** * 重置播放器 */ void reset();
- 释放播放器资源
/** * 释放播放器资源 */ void release();
- 截图
/** * 当前视频画面截图 * @return 如果当前无画面则返回 null */ Bitmap snapShot();
- 截图到文件
/** * 当前视频画面截图 * @param jpegFile 保存截图jpeg的文件 * @return true - 文件保存成功 */ boolean snapShotToFile(File jpegFile);
- 开始录屏
/** * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中 * 文件名后缀必须为mp4 * 须在{@link PlayerState#STATE_READY}时调用有效 * @param contentFile * @return 操作成功与否 */ boolean startRecordingContent(File contentFile) throws IOException;
- 获取当前录制的视频时长
/** * 获取当前录制的视频时长 * @return 单位ms */ long getCurrentRecordingContentDuration();
- 结束录屏
/** * 停止记录播放内容 * @return 操作成功与否 */ boolean stopRecordingContent();
- 设置播放器音量
/** * 设置播放器音量 * @param audioVolume 取值范围:0~1,0为静音 */ void setVolume(float audioVolume);
- 设置音频流通道类型
/** * 设置音频流通道类型,参见{@link android.media.AudioManager} * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿 * @param audioStreamType */ void setAudioStreamType(int audioStreamType);
- 设置画面缩放模式
/** * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} * @param videoScalingMode 参见: * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT} * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} */ void setVideoScalingMode(int videoScalingMode);
- 设置软硬解策略
/** * 设置解码器策略,全局生效 * 默认使用强制软解 * * @param decoderStrategy * HARDWARE_FIRST - 硬解优先 * FORCE_SOFTWARE - 强制软解 */ void setDecoderStrategy(DecoderStrategy decoderStrategy)
- 获取当前播放的软硬解类型
/** * 获取当前流的解码器类型,软解或硬解 * * @return 若当前未开流,则返回null * HARDWARE - 硬解码 * SOFTWARE - 软解码 */ DecoderType getDecoderType()
- 设置播放停止时画面绘制策略
/** * 设置播放停止时画面绘制策略 * @param playerStoppedDrawingMode * ALWAYS_KEEP_LAST_FRAME 播放停止时始终保留最后一帧画面 * KEEP_LAST_FRAME_WITHOUT_ERROR 播放停止时只有未出现错误时才保留最后一帧画面(默认是此模式) * ALWAYS_BLACK 播放停止时始终显示黑色 */ void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)
- 设置surfaceview
/** * 设置SurfaceView,必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView * 注意GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法 * GLSurfaceView及其容器不可设置背景色 * @param surfaceview */ void setSurfaceView(SurfaceView surfaceview);
- 清除surfaceview
/** * 清除surfaceview */ void clearSurfaceView();
- 设置textureview
/** * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照 * @param textureview */ void setTextureView(TextureView textureView);
- 清除textureview
/** * 清除textureview */ void clearTextureView();
- 设置是否由外部来完成YUV数据的渲染
/** * 设置是否由外部来完成YUV数据的渲染 * @param useExternalRender true为由外部渲染,false为由内部渲染 */ void setUseExternalRender(boolean useExternalRender);
- 获取是否使用外部渲染
/** * 获取是否使用外部渲染 * @return true为由外部渲染,false为由内部渲染 */ boolean useExternalRender();
- 设置外部渲染监听器
/** * 设置外部渲染监听器 * @param onExternalRenderListener */ void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener { public interface OnExternalRenderListener { /** * 通知已经有YUV数据帧需要被渲染 * @param width 视频帧宽 * @param height 视频帧高 * @param timestamp 时间戳,单位为ms */ void onVideoFrameUpdate(int width, int height ,long timestamp); }
- 获取YUV帧数据用于渲染
/** * 获取YUV帧数据用于渲染,只在外部渲染模式下有效 * @return Yuv420p格式视频帧 */ Yuv420pFrame getYuvFrame();
- 设置SEI信息监听器
/** * 设置SEI信息监听器 * * @param seiInfoBuffer 创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃 * @param onSeiInfoListener */ void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener); interface OnSeiInfoListener { /** * 当SEI信息更新时回调 * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据 * @param seiInfoBuffer */ void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer); }
- 设置数据源准备就绪事件监听器
/** * 设置数据源准备就绪事件监听器 * @param listener */ void setOnPreparedListener(OnPreparedListener listener); interface OnPreparedListener { /** * 数据源准备就绪回调 */ void onPrepared(); }
- 设置播放器错误事件监听器
/** * 设置播放器错误事件监听器,错误类型参见: * {@link PlayerException.SOURCE_ERROR} * {@link PlayerException.RENDER_ERROR} * {@link PlayerException.UNEXPECTED_ERROR} * @param listener */ void setOnErrorListener(OnErrorListener listener); interface OnErrorListener { /** * 播放器错误回调,参见 * {@link PlayerException} * @param exception */ void onError(PlayerException exception); }
- 设置播放状态变更事件监听器
/** * 设置播放状态变更事件监听器 * @param listener */ void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener); interface OnPlayerStateChangedListener { /** * 播放器状态变更回调 * * @param playerState 参见 * {@link PlayerState#STATE_IDLE} * {@link PlayerState#STATE_BUFFERING} * {@link PlayerState#STATE_READY} * {@link PlayerState#STATE_ENDED} */ void onPlayerStateChange(int playerState); }
- 设置首帧被渲染事件监听器
/** * 设置首帧被渲染事件监听器 * @param listener */ void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener); interface OnRenderedFirstFrameListener { /** * 首帧被渲染回调 */ void onRenderedFirstFrame(); }
- 设置视频内容宽高变更回调
/** * 设置视频内容宽高变更回调 * @param listener */ void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener); interface OnVideoSizeChangedListener { /** * 内容宽高改变时的回调 * * @param width 视频内容宽,单位像素 * @param height 视频内容高,单位像素 */ void onVideoSizeChanged(int width, int height); }
- 设置播放到内容结束事件监听器
/** * 设置播放到内容结束事件监听器 * 收到该事件后,需要调用stop,播放器状态才会切到STATE_END * @param listener */ void setOnCompletionListener(OnCompletionListener listener); interface OnCompletionListener { /** * 播放到文件末尾回调 */ void onCompletion(); }
- 获取当前播放进度
/** * 获取当前播放进度,相对于开始位置的偏移量 * 播放器状态为{@link PlayerState#STATE_READY}时调用有效 * @return 单位ms */ long getCurrentPosition();
- 获取视频总时长
/** * 获取视频总时长 * 播放器状态为{@link #STATE_READY}时调用有效 * @return 单位ms */ long getDuration();
- 设置回放速率
/** * 设置播放速率,需要设备支持倍速功能 * 须在{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效 * 非1倍速率下默认关闭声音 * @param speed只支持1/16、1/8、1/4、1/2、1、2、4、8、16倍速 */ void setPlaybackSpeed(float speed)
- 获取音量
/** * 获取音量 * @return 取值范围:0~1,0为静音 */ float getVolume();
- 获取播放器状态
/** * 获取播放状态 * @return 状态枚举: * {@link PlayerState#STATE_IDLE} 播放器初始状态 * {@link PlayerState#STATE_BUFFERING} 缓冲中状态 * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态 * {@link PlayerState#STATE_ENDED} 播放完成状态 */ int getPlayState();
- 获取播放器当前流的连接类型
/** * 获取播放器当前流的连接类型 * 播放器状态为{@link PlayerState#STATE_READY}时调用有效 * @return {@link StreamConnectType} */ StreamConnectType getStreamConnectType();
- 获取播放器当前的帧率/码率等信息
/** * 获取播放器当前的帧率/码率等信息 * 播放器状态为{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效 * @return 包含帧率/码率等信息的json string */ PlayInfo getCurrentPlayInfo();
- 构造方法
- HlsPlayer
- 构造方法
/** * 构造方法 * @param applicationContext ApplicationContext */ HlsPlayer(Context applicationContext);
- 设置播放地址
/** * 设置播放源 * @param url HLS点播地址 */ void setDataSource(String url) throws IllegalArgumentException;
- 设置播放地址为已接入生活物联网平台的IPC设备指定录像名的云端录像文件地址
/** * 设置播放地址为已接入生活物联网平台的IPC设备指定录像名的云端录像文件地址 * * @param iotId 设备iotId * @param fileName 录像文件名 */ void setDataSourceByIPCRecordFileName(String iotId, String fileName)
- 设置播放地址为已接入生活物联网平台的IPC设备指定录像名的云端录像文件地址
/** * 设置播放地址为已接入生活物联网平台的IPC设备指定录像名的云端录像文件地址 * * @param iotId 设备iotId * @param fileName 录像文件名 * @param seekToPositionInMs起始偏移量,单位ms */ void setDataSourceByIPCRecordFileName(String iotId, String fileName, long seekToPositionInMs)
- 校验和准备数据
/** * 校验和准备数据 */ void prepare();
- 开始或恢复播放视频
/** * 开始播放或恢复播放视频 */ void start();
- 暂停播放
/** * 暂停播放,调用start()恢复播放 */ void pause();
- seek到指定位置
/** * seek到指定位置 * @param position 毫秒 */ void seekTo(long positionInMs);
- 逐帧播放
/** * 逐帧播放,恢复请调用start() * @return 是否调用成功 */ boolean playFrameByFrame();
- 停止播放
/** * 停止播放 */ void stop();
- 重置播放器
/** * 重置播放器 */ void reset();
- 释放播放器资源
/** * 释放播放器资源 */ void release();
- 截图
/** * 当前视频画面截图 * @return 如果当前无画面则返回null */ Bitmap snapShot();
- 截图到文件
/** * 当前视频画面截图 * @param jpegFile 保存截图jpeg的文件 * @return true表示文件保存成功 */ boolean snapShotToFile(File jpegFile);
- 开始录屏
/** * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中 * 文件名后缀必须为mp4 * 须在{@link PlayerState#STATE_READY}时调用有效 * @param contentFile * @return 操作成功与否 */ boolean startRecordingContent(File contentFile) throws IOException;
- 获取当前录制的视频时长
/** * 获取当前录制的视频时长 * @return 单位ms */ long getCurrentRecordingContentDuration();
- 结束录屏
/** * 停止记录播放内容 * @return 操作成功与否 */ boolean stopRecordingContent();
- 设置回放速率
/** * 设置播放速率 * 须在{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效 * 非1倍速率下默认关闭声音 * @param speed只支持1/16、1/8、1/4、1/2、1、2、4、8、16倍速 */ void setPlaybackSpeed(float speed)
- 设置播放器音量
/** * 设置播放器音量 * @param audioVolume 取值范围:0~1,0为静音 */ void setVolume(float audioVolume);
- 设置音频流通道类型
/** * 设置音频流通道类型,参见{@link android.media.AudioManager} * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿 * @param audioStreamType */ void setAudioStreamType(int audioStreamType);
- 设置画面缩放模式
/** * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} * @param videoScalingMode 参见: * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT} * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} */ void setVideoScalingMode(int videoScalingMode);
- 设置软硬解策略
/** * 设置解码器策略,全局生效 * 默认使用强制软解 * * @param decoderStrategy * HARDWARE_FIRST - 硬解优先 * FORCE_SOFTWARE - 强制软解 */ void setDecoderStrategy(DecoderStrategy decoderStrategy)
- 获取当前播放的软硬解类型
/** * 获取当前流的解码器类型,软解或硬解 * * @return 若当前未开流,则返回null * HARDWARE - 硬解码 * SOFTWARE - 软解码 */ DecoderType getDecoderType()
- 设置播放停止时画面绘制策略
/** * 设置播放停止时画面绘制策略 * @param playerStoppedDrawingMode * ALWAYS_KEEP_LAST_FRAME 播放停止时始终保留最后一帧画面 * KEEP_LAST_FRAME_WITHOUT_ERROR 播放停止时只有未出现错误时才保留最后一帧画面(默认是此模式) * ALWAYS_BLACK 播放停止时始终显示黑色 */ void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)
- 设置surfaceview
/** * 设置SurfaceView,必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView * 注意GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法 * GLSurfaceView及其容器不可设置背景色 * @param surfaceview */ void setSurfaceView(SurfaceView surfaceview);
- 清除surfaceview
/** * 清除surfaceview */ void clearSurfaceView();
- 设置textureview
/* * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照 * @param textureview */ void setTextureView(TextureView textureView);
- 清除textureview
/** * 清除textureview */ void clearTextureView();
- 设置是否由外部来完成YUV数据的渲染
/** * 设置是否由外部来完成YUV数据的渲染 * @param useExternalRender true为由外部渲染,false为由内部渲染 */ void setUseExternalRender(boolean useExternalRender);
- 获取是否使用外部渲染
/** * 获取是否使用外部渲染 * @return true为由外部渲染,false为由内部渲染 */ boolean useExternalRender();
- 设置外部渲染监听器
/** * 设置外部渲染监听器 * @param onExternalRenderListener */ void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener { public interface OnExternalRenderListener { /** * 通知已经有YUV数据帧需要被渲染 * @param width 视频帧宽 * @param height 视频帧高 * @param timestamp 时间戳,单位为ms */ void onVideoFrameUpdate(int width, int height ,long timestamp); }
- 获取YUV帧数据用于渲染
/** * 获取YUV帧数据用于渲染,只在外部渲染模式下有效 * @return Yuv420p格式视频帧 */ Yuv420pFrame getYuvFrame();
- 设置SEI信息监听器
/** * 设置SEI信息监听器 * * @param seiInfoBuffer 创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃 * @param onSeiInfoListener */ void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener); interface OnSeiInfoListener { /** * 当SEI信息更新时回调 * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据 * @param seiInfoBuffer */ void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer); }
- 设置数据源准备就绪事件监听器
/** * 设置数据源准备就绪事件监听器 * @param listener */ void setOnPreparedListener(OnPreparedListener listener); interface OnPreparedListener { /** * 数据源准备就绪回调 */ void onPrepared(); }
- 设置播放器错误事件监听器
/** * 设置播放器错误事件监听器,错误类型参见: * {@link PlayerException.SOURCE_ERROR} * {@link PlayerException.RENDER_ERROR} * {@link PlayerException.UNEXPECTED_ERROR} * @param listener */ void setOnErrorListener(OnErrorListener listener); interface OnErrorListener { /** * 播放器错误回调,参见 * {@link PlayerException} * @param exception */ void onError(PlayerException exception); }
- 设置播放状态变更事件监听器
/** * 设置播放状态变更事件监听器 * @param listener */ void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener); interface OnPlayerStateChangedListener { /** * 播放器状态变更回调 * * @param playerState 参见 * {@link PlayerState#STATE_IDLE} * {@link PlayerState#STATE_BUFFERING} * {@link PlayerState#STATE_READY} * {@link PlayerState#STATE_ENDED} */ void onPlayerStateChange(int playerState); }
- 设置首帧被渲染事件监听器
/** * 设置首帧被渲染事件监听器 * @param listener */ void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener); interface OnRenderedFirstFrameListener { /** * 首帧被渲染回调 */ void onRenderedFirstFrame(); }
- 设置视频内容宽高变更回调
/** * 设置视频内容宽高变更回调 * @param listener */ void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener); interface OnVideoSizeChangedListener { /** * 内容宽高改变时的回调 * * @param width 视频内容宽,单位像素 * @param height 视频内容高,单位像素 */ void onVideoSizeChanged(int width, int height); }
- 设置播放到内容结束事件监听器
/** * 设置播放到内容结束事件监听器 * 收到该事件后,需要调用stop,播放器状态才会切到STATE_END * @param listener */ void setOnCompletionListener(OnCompletionListener listener); interface OnCompletionListener { /** * 播放到文件末尾回调 */ void onCompletion(); }
- 获取当前播放进度
/** * 获取当前播放进度,相对于开始位置的偏移量 * 播放器状态为{@link PlayerState#STATE_READY}时调用有效 * @return 单位ms */ long getCurrentPosition();
- 获取视频总时长
/** * 获取视频总时长 * 播放器状态为{@link #STATE_READY}时调用有效 * @return 单位ms */ long getDuration();
- 获取音量
/** * 获取音量 * @return 取值范围:0~1,0为静音 */ float getVolume();
- 获取播放器状态
/** * 获取播放状态 * @return 状态枚举: * {@link PlayerState#STATE_IDLE} 播放器初始状态 * {@link PlayerState#STATE_BUFFERING} 缓冲中状态 * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态 * {@link PlayerState#STATE_ENDED} 播放完成状态 */ int getPlayState();
- 获取播放器当前流的连接类型
/** * 获取播放器当前流的连接类型 * 播放器状态为{@link PlayerState#STATE_READY}时调用有效 * @return {@link StreamConnectType} */ StreamConnectType getStreamConnectType();
- 获取播放器当前的帧率/码率等信息
/** * 获取播放器当前的帧率/码率等信息 * 播放器状态为{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效 * @return 包含帧率/码率等信息的json string */ PlayInfo getCurrentPlayInfo();
- 构造方法
- ExoHlsPlayer
- 构造方法
ExoHlsPlayer(Context context);
- 设置m3u8播放地址
/** * 设置播放源 * @param url m3u8地址 */ void setDataSource(String url);
- 设置播放地址为IPC云存录像(按文件名)
/** * 设置播放地址为IPC云存录像(按文件名) * @param iotId 设备iotId * @param fileName 录像文件名 */ void setDataSourceByIPCRecordFileName(String iotId, String fileName);
- 校验和准备数据
/** * 校验和准备数据 */ void prepare();
- 开始或恢复播放视频
/** * 开始播放或恢复播放视频 */ void start();
- 暂停播放
/** * 暂停播放,调用start()恢复播放 */ void pause();
- seek到指定位置
/** * seek到指定位置 * @param position 毫秒 */ void seekTo(long positionInMs);
- 停止播放
** * 停止播放 */ void stop();
- 重置播放器
/** * 重置播放器 */ void reset();
- 释放播放器资源
/** * 释放播放器资源 */ void release();
- 设置是否循环播放
/** * 设置是否循环播放 * @param circlePlay true为循环播放 */ void setCirclePlay(boolean circlePlay);
- 设置回放速率
/** * 设置回放的播放速率 * @param speed 速率因子,取值范围:(0,2],1为正常速率 */ void setPlaybackSpeed(float speed);
- 设置播放器音量
/** * 设置播放器音量 * @param audioVolume 取值范围:0~1,0为静音 */ void setVolume(float audioVolume);
- 设置音频流通道类型
/** * 设置音频流通道类型,参见{@link android.media.AudioManager} * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿 * @param audioStreamType */ void setAudioStreamType(int audioStreamType);
- 设置画面缩放模式
/** * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} * @param videoScalingMode 参见: * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT} * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} */ void setVideoScalingMode(int videoScalingMode);
- 设置surfaceview
/** * 设置SurfaceView * @param surfaceview */ void setSurfaceView(SurfaceView surfaceview);
- 清除surfaceview
/** * 清除surfaceview */ void clearSurfaceView();
- 设置textureview
/** * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照 * @param textureview */ void setTextureView(TextureView textureView);
- 清除textureview
/** * 清除textureview */ void clearTextureView();
- 设置数据源准备就绪事件监听器
/** * 设置数据源准备就绪事件监听器 * @param listener */ void setOnPreparedListener(OnPreparedListener listener); interface OnPreparedListener { /** * 数据源准备就绪回调 */ void onPrepared(); }
- 设置播放器错误事件监听器
/** * 设置播放器错误事件监听器,错误类型参见: * {@link PlayerException.SOURCE_ERROR} * {@link PlayerException.RENDER_ERROR} * {@link PlayerException.UNEXPECTED_ERROR} * @param listener */ void setOnErrorListener(OnErrorListener listener); interface OnErrorListener { /** * 播放器错误回调,参见 * {@link PlayerException} * @param exception */ void onError(PlayerException exception); }
- 设置播放状态变更事件监听器
/** * 设置播放状态变更事件监听器 * @param listener */ void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener); interface OnPlayerStateChangedListener { /** * 播放器状态变更回调 * * @param playerState 参见 * {@link PlayerState#STATE_IDLE} * {@link PlayerState#STATE_BUFFERING} * {@link PlayerState#STATE_READY} * {@link PlayerState#STATE_ENDED} */ void onPlayerStateChange(int playerState); }
- 设置首帧被渲染事件监听器
/** * 设置首帧被渲染事件监听器 * @param listener */ void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener); interface OnRenderedFirstFrameListener { /** * 首帧被渲染回调 */ void onRenderedFirstFrame(); }
- 设置视频内容宽高变更回调
/** * 设置视频内容宽高变更回调 * @param listener */ void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener); interface OnVideoSizeChangedListener { /** * 内容宽高改变时的回调 * * @param width 视频内容宽,单位像素 * @param height 视频内容高,单位像素 */ void onVideoSizeChanged(int width, int height); }
- 获取当前播放进度
/** * 获取当前播放进度,相对于开始位置的偏移量 * 播放器状态为{@link PlayerState#STATE_READY}时调用有效 * @return 单位ms */ long getCurrentPosition();
- 获取视频总时长
/** * 获取视频总时长 * 播放器状态为{@link #STATE_READY}时调用有效 * @return 单位ms */ long getDuration();
- 获取音量
/** * 获取音量 * @return 取值范围:0~1 */ float getVolume();
- 获取播放器状态
/** * 获取播放状态 * @return 状态枚举: * {@link PlayerState#STATE_IDLE} 播放器初始状态 * {@link PlayerState#STATE_BUFFERING} 缓冲中状态 * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态 * {@link PlayerState#STATE_ENDED} 播放完成状态 */ int getPlayState();
- 构造方法
- ZoomableTextureView
- 设置画面放大倍数上限
/** * 设置画面放大倍数上限 * 默认为4倍 * * @param scale倍数 */ void setMaxScale(float scale);
- 将画面缩放比重置为1
/** * 缩放比重置为1 * * @param smooth是否带有平滑变化效果 */ void zoomOut(boolean smooth);
- 获取当前缩放比
/** * 获取当前缩放比 * * @return 未放缩时为1.0f */ float getScale();
- 设置监听器
/* 设置监听器 * @param listener */ void setOnZoomableTextureListener(OnZoomableTextureListener listener); public interface OnZoomableTextureListener { /** * 当画面缩放比例发生变化时回调 * * @param zoomableTextureView * @param scale 画面缩放比例 */ void onScaleChanged(ZoomableTextureView zoomableTextureView, float scale); /** * view双击事件回调 * * @param zoomableTextureView * @param e MotionEvent * @return 事件是否被处理,如果返回false,则会启用内部缩放逻辑 */ boolean onDoubleTap(ZoomableTextureView zoomableTextureView, MotionEvent e); /** * view单击事件回调 * * @param zoomableTextureView * @param e MotionEvent * @return 事件是否被处理 */ boolean onSingleTapConfirmed(ZoomableTextureView zoomableTextureView, MotionEvent e); /** * view长按事件回调 * * @param zoomableTextureView * @param e MotionEvent */ void onLongPress(ZoomableTextureView zoomableTextureView, MotionEvent e); }
- 设置边缘监听器
void setOnViewEdgeListener(OnViewEdgeListener listener) interface OnViewEdgeListener { /** * 当第一次拖动到view的边缘 */ void onViewEdgeFirstTouched(); /** * 当拖动到view下边缘,持续拖动会持续回调 * * @param zoomableTextureView * @param delta 持续处于边缘时触摸移动相对上次的差值 */ void onBottomEdge(ZoomableTextureView zoomableTextureView, float delta); /** * 当拖动到view上边缘,持续拖动会持续回调 * * @param zoomableTextureView * @param delta 持续处于边缘时触摸移动相对上次的差值 */ void onTopEdge(ZoomableTextureView zoomableTextureView, float delta); /** * 当拖动到view右边缘,持续拖动会持续回调 * * @param zoomableTextureView * @param delta 持续处于边缘时触摸移动相对上次的差值 */ void onRightEdge(ZoomableTextureView zoomableTextureView, float delta); /** * 当拖动到view左边缘,持续拖动会持续回调 * * @param zoomableTextureView * @param delta 持续处于边缘时触摸移动相对上次的差值 */ void onLeftEdge(ZoomableTextureView zoomableTextureView, float delta); }
- 设置画面放大倍数上限
错误列表
错误主码 | 描述 | 子码 | 描述 |
---|---|---|---|
SOURCE_ERROR | 数据源相关错误 | SUB_CODE_SOURCE_STREAM_CONNECT_ERROR(1005) | 与数据源建立连接失败 |
SUB_CODE_SOURCE_INVALID_DECRYPTE_KEY(1006) | 无效的解密密钥 | ||
SUB_CODE_SOURCE_INVALID_RTMP_URL(1007) | 无效的播放地址 | ||
SUB_CODE_SOURCE_PARAMETER_ERROR(1008) | 错误的数据源参数 | ||
SUB_CODE_SOURCE_QUERY_URL_FAILED(1009) | 请求播放地址失败 | ||
RENDER_ERROR | 渲染相关错误 | SUB_CODE_RENDER_DECODE_ERROR(1000) | 解码错误 |
UNEXPECTED_ERROR | 不符合预期错误 | SUB_CODE_UNEXPECTED_PULL_STREAM_ERROR(1100) | 拉流失败,8S未拉取到流或连接被异常断开 |
语音对讲
提供App和IPC设备之间端到端的单/双向实时对讲能力。
- 单讲:App端采集并发送音频数据到设备端进行播放,App端采集音频期间手机保持声音静默。
- 双讲:App端和设备端都需要同时做采音和放音,设备端必须支持AEC,否则不建议使用该方案。
支持以下格式的音频。
类型 | 采样率 | 编码 | 解码 |
---|---|---|---|
G711A | 8Khz/16Khz | ✓ | ✓ |
G711U | 8Khz/16Khz | ✓ | ✓ |
使用指南
语音对讲集成分为以下几个步骤。
接口说明
- LiveIntercomV2
- 构造方法
/** * 创建对讲实例 * * @param context application context * @param iotId iotId * @param liveIntercomMode 对讲模式,单讲SingleTalk、双讲DoubleTalk * @param audioParams 音频参数(采样率、通道数、采样位宽、编码格式) */ LiveIntercomV2(Context context, final String iotId, final LiveIntercomMode liveIntercomMode, final AudioParams audioParams);
- 开始语音对讲
/** * 开始语音对讲 */ void start();
- 关闭语音对讲
/** * 关闭语音对讲,停止录音,关闭对讲通道,停止播放 */ void stop();
- 释放对讲实例
/** * 释放对讲实例 */ void release();
- 设置静音
/** * 设置静音 * * @param mute true为静音,false为取消静音 */ void setMute(boolean mute)
- 当前对讲是否静音
/** * 当前对讲是否静音 * * @return */ boolean isMute()
- 设置增益水平
/** * 设置增益水平 * * @param gainLevel */ void setGainLevel(int gainLevel)
- 设置是否开启对蓝牙耳机和线控耳机的支持
/** * 设置是否开启对蓝牙和有线耳机外设的支持,开启后优先使用外设进行录放音,默认支持 * @param supportExternalHeadset 是否支持 */ void setSupportExternalHeadset(boolean supportExternalHeadset);
- 设置使用并实现三方变声算法
/** * 设置变声外部实现,设置后{@link #setVoiceChangeType(LiveIntercomVoiceType)} 和{@link #getLiveIntercomVoiceType()}接口将失效. * @param voiceChangeImpl 外部实现变声接口 */ void setExternalVoiceChangeImpl(IVoiceChange voiceChangeImpl) interface IVoiceChange { /** * 对即将发给对端的音频做变声处理,该接口不允许阻塞 * 音频采样率/位宽/通道数见{@link com.aliyun.iotx.linkvisual.media.audio.LiveIntercomV2#LiveIntercomV2(Context, String, LiveIntercomV2.LiveIntercomMode, AudioParams)}传入的一致 * @param pcm 待变声的PCM数据,请直接修改内容,始终为PCM格式 * @param offset 偏移量 * @param length 数据长度 * @return 处理成功返回true, 处理失败返回false */ boolean onChangeVoice(byte[] pcm, int offset, int length); }
- 设置对讲监听器
/** * 设置对讲监听器 * * @param listener */ void setLiveIntercomV2Listener(LiveIntercomV2Listener listener); interface LiveIntercomV2Listener { /** * 语音对讲对端就绪 */ void onTalkReady(); /** * 语音对讲发生错误 * @param error */ void onError(LiveIntercomException error); /** * 开始录音 */ void onRecordStart(); /** * 结束录音 */ void onRecordEnd(); /** * 接收录音数据 * @param buffer * @param offset * @param size */ void onRecordBufferReceived(byte[] buffer, int offset, int size); }
- 构造方法
错误列表
错误枚举 | 描述 |
---|---|
LiveIntercomException.INVALID_AUDIO_PARAMS | 无效的语音对讲音频参数(对端上报的音频参数SDK不支持) |
LiveIntercomException.START_LIVE_INTERCOM_REQUEST_FAILED | 启动语音对讲失败 |
LiveIntercomException.CONNECTION_STREAM_FAILED | 语音流建立失败(5S未建立成功会超时) |
LiveIntercomException.SEND_STREAM_DATA_FAILED | 发送语音流数据失败 |
LiveIntercomException.RECEIVE_STREAM_DATA_FAILED | 接收语音流数据失败 |
LiveIntercomException.INIT_RECORD_FAILED | 录音机初始化失败 |
LiveIntercomException.START_RECORD_FAILED | 录音机启动错误 |
LiveIntercomException.READ_RECORD_BUFFER_FAILED | 录音数据读取错误 |
LiveIntercomException.INIT_AUDIO_PLAYER_FAILED | 音频播放器创建失败 |