从1.x.x SDK迁移到2.x.x版本指南

Android Media SDK在2.0.0版本对接口、方法和类进行了大幅改动。如果您正在使用2.0.0以下版本,建议通过本文提供的方法升级至2.0.0以上版本。

说明

1.x.x版本文档详细内容,请参见Android应用端接入

重要变化

功能项

1.x.x版本

2.x.x版本

渲染组件支持

支持TextureViewGLSurfaceView两种组件。

只提供TextureView,不再支持GLSurfaceView组件。

直播播放器

LivePlayer

改名为LVLivePlayer

点播播放器

卡录像点播播放器为VodPlayer

云存录像播放器为HlsPlayer

不再区分卡录像点播和云存录像点播,统一为LVVodPlayer,自动识别设置的数据源来完成相应的转换。

语音对讲

LiveIntercomV2

改名为LVLiveIntercom

升级步骤

gradle集成方式与版本类似,修改版本号即可,混淆配置无变化。

说明

从2.0.0开始,linkvisual-media不再默认依赖ExoPlayer,如果您还需要使用继续使用ExoPlayer请在依赖中添加如下代码。

implementation('com.google.android.exoplayer:exoplayer-core:2.10.5')
implementation('com.google.android.exoplayer:exoplayer-ui:2.8.3')
implementation('com.google.android.exoplayer:exoplayer-hls:2.10.5')

混淆配置中添加如下代。

-dontwarn com.google.android.exoplayer2.**

API变化细节(建议通过文本搜索来定位)

全局组件

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

com.aliyun.iotx.linkvisual.media.LinkVisualMedia

com.aliyun.iotx.linkvisual.media.LVMedia

更新包名与类名。

直播播放器

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

com.aliyun.iotx.linkvisual.media.video.player.LivePlayer

com.aliyun.iotx.linkvisual.media.player.LVLivePlayer

更新包名与类名。

设置加密的直播数据源中设置的decryptIvdecryptKey从Base64解码后的二进制数据改为解码器前的字符串。

void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey)

LVPlayerCode setDataSource(String url, boolean isEncrypted, String decryptIvBase64, String decryptKeyBase64)

重要

将Base64解码去除,由SDK内部来完成对Base64字符串的解码。

接口移除:移除prepare步骤。

  1. prepare()

  2. void setOnPreparedListener(OnPreparedListener listener)

  3. com.aliyun.iotx.linkvisual.media.video.listener.OnPreparedListener

无。

设置数据源后,在播放start()前无需再调用prepare()

指令接口,如setDataSource()/start()/stop()/release()等增加返回值。

无。

返回值枚举:

enum LVPlayerCode{ /** 执行成功 */ LV_PLAYER_SUCCESS = 0, /** 执行失败, 通用错误 */ LV_PLAYER_ERROR_FAILED = -1, /** 错误的输入参数 */ LV_PLAYER_ERROR_INVALID_PARAMETER = -2, /** 不支持的接口 */ LV_PLAYER_ERROR_UNSUPPORTED = -3, };

可以通过判断返回值作为接口操作是否成功的判断。

新增接口:获取当前码流的宽高。

无。

  1. int getVideoWidth()

  2. int getVideoHeight()

无。

类名变更:解码器策略和解码器类型枚举。

  1. com.aliyun.iotx.linkvisual.media.video.HardwareDecoderable.DecoderStrategy

  2. com.aliyun.iotx.linkvisual.media.video.HardwareDecoderable.DecoderType

  1. com.aliyun.iotx.linkvisual.media.player.bean.LVDecoderStrategy

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVDecoderType

修改类名。

接口变更:取消设置音量接口改为静音和取消静音接口。

  1. void setVolume(float audioVolume)

  2. float getVolume()

  1. LVPlayerCode mute(boolean isMute)

  2. boolean isMute()

不支持应用内单独控制播放音量,音量控制统一交由系统音量来完成。

新增接口:增加音频焦点接口。

无。

  1. LVPlayerCode audioFocus()

  2. boolean isAudioFocus()

从2.0.0开始,SDK不再支持多路音频同时播放,最多只有一路音频播放。当存在多路观看(如NVR多分屏)场景时,请由用户来调用播放器的audioFocus()接口来完成多路播放器之间声音播放的切换。

接口移除:移除音频播放流通道设置接口。

void setAudioStreamType(final int streamType)

无。

直播播放器始终使用 AudioManager.STREAM_MUSIC通道,不再支持切换。

接口移除:移除对GLSurfaceView的支持。

  1. void setSurfaceView(SurfaceView mSurfaceView)

  2. void clearSurfaceView()

无。

请替换为TextureView,相比GLSurfaceView有以下优势:

  1. 支持硬件加速,可随View移动不产生黑边。

  2. 支持电子变焦(请使用SDK提供ZoomableTextureView)。

  3. 支持多窗口播放。

接口变更:设置画面缩放模式接口参数调整。

void setVideoScalingMode(int mVideoScalingMode)

LVPlayerCode setVideoScalingMode(LVVideoScalingMode videoScalingMode)

com.aliyun.iotx.linkvisual.media.player.bean.LVVideoScalingMode { //保持宽高 LV_VIDEO_SCALING_MODE_FIT, //强制填充 LV_VIDEO_SCALING_MODE_FILL; }

修改参数名和类名。

接口变更:边播边录。

  1. boolean startRecordingContent(File contentFile)

  2. boolean stopRecordingContent()

  3. long getCurrentRecordingContentDuration()

  1. LVPlayerCode startRecordingContent(String contentFilePath)

  2. LVPlayerCode stopRecordingContent()

  3. long getCurrentRecordingContentDurationInMs()

  1. 开始录制参数类型由File改为String

  2. 获取录制时长接口名调整。

接口移除:设置播放停止时画面行为接口。

  1. void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)

  2. PlayerStoppedDrawingMode getPlayerStoppedDrawingMode()

无。

无。

接口变更:获取播放状态接口。

int getPlayState()

  1. LVPlayerState getPlayerState()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVPlayerState

播放器状态由int改为枚举值,方便理解和维护。

接口变更:获取当前流连接类型接口。

StreamConnectType getStreamConnectType()

  1. LVStreamConnectType getStreamConnectType()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVStreamConnectType

修改类名。

接口变更:获取当前播放帧率或码率信息接口。

PlayInfo getCurrentPlayInfo()

  1. LVPlayInfo getCurrentPlayInfo()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVPlayInfo

修改类名。

接口变更:设置直播播放器回调接口。

  1. void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener)

  2. void setOnErrorListener(OnErrorListener listener)

  3. void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener)

  4. void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener)

  5. void setOnVideoQualityListener(OnVideoQualityListener listener)

  6. void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener)

LVPlayerCode setPlayerListener(ILVPlayerListener listener)

com.aliyun.iotx.linkvisual.media.player.listener.ILVPlayerListener { void onError(LVPlayerError error); void onPlayerStateChange(LVPlayerState state); void onRenderedFirstFrame(int elapsedTimeInMs); void onVideoSizeChanged(int width, int height); void onSeiInfoUpdate(byte[] buffer, int length, long timeStamp); void onVideoJitterBufferEmpty(); }

将多个Listener合并为一个。

接口变更:设置使用外部渲染接口。

  1. void setUseExternalRender(boolean mUseExternalRender)

  2. void setOnExternalRenderListener

  3. boolean useExternalRender()

LVPlayerCode setUseExternalRender(boolean useExternalVideoRender, boolean useExternalAudioRender, ILVPlayerExternalRenderListener listener)

com.aliyun.iotx.linkvisual.media.player.listener.ILVPlayerExternalRenderListener { void onVideoFrameUpdate(int width, int height, long timestampInMs); void onAudioHeader(int audioBitPerSample, int audioSamplesPerSec, int audioChannel); boolean onAudioData(byte[] buffer, int offset, int length); }

从2.0.0开始,除了支持视频YUV数据回调之外,还支持音频PCM回调。

接口变更:获取一帧YUV数据接口。

Yuv420pFrame getYuvFrame()

Yuv420pFrame getYuv420pFrame()

修改接口名。

点播播放器

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更.

  1. com.aliyun.iotx.linkvisual.media.video.player.VodPlayer

  2. com.aliyun.iotx.linkvisual.media.video.player.HlsPlayer

com.aliyun.iotx.linkvisual.media.player.LVVodPlayer

更新包名与类名。从2.0.0开始,SDK将设备卡录像点播播放器和云存播放器统一为一种播放器。

设置加密的设备卡录像点播数据源中设置的decryptIvdecryptKey从Base64解码后的二进制数据改为解码器前的字符串。

void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey)

LVPlayerCode setDataSource(String url, boolean isEncrypted, String decryptIvBase64, String decryptKeyBase64)

重要

将Base64解码去除,由SDK内部来完成对Base64字符串的解码。

接口移除:移除prepare步骤。

  1. prepare()

  2. void setOnPreparedListener(OnPreparedListener listener)

  3. com.aliyun.iotx.linkvisual.media.video.listener.OnPreparedListener

无。

设置数据源后,在播放start()前无需再调用prepare()

指令接口,如setDataSource()/start()/stop()/release()等增加返回值。

无。

返回值枚举:

enum LVPlayerCode{ /** 执行成功 */ LV_PLAYER_SUCCESS = 0, /** 执行失败, 通用错误 */ LV_PLAYER_ERROR_FAILED = -1, /** 错误的输入参数 */ LV_PLAYER_ERROR_INVALID_PARAMETER = -2, /** 不支持的接口 */ LV_PLAYER_ERROR_UNSUPPORTED = -3, };

可以通过判断返回值作为接口操作是否成功的判断。

新增接口:增加单独的播放恢复接口。

void start()

LVPlayerCode resume()

从2.0.0 SDK开始,点播播放恢复接口不再与start()接口复用。

接口名调整:获取点播播放时长。

  1. long getDuration()

  2. long getCurrentPosition()

  1. long getDurationMs()

  2. long getCurrentPositionMs()

修改接口名。

新增接口:获取当前码流的宽高。

无。

  1. int getVideoWidth()

  2. int getVideoHeight()

无。

类名变更:解码器策略和解码器类型枚举。

  1. com.aliyun.iotx.linkvisual.media.video.HardwareDecoderable.DecoderStrategy

  2. com.aliyun.iotx.linkvisual.media.video.HardwareDecoderable.DecoderType

  1. com.aliyun.iotx.linkvisual.media.player.bean.LVDecoderStrategy

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVDecoderType

修改类名。

接口变更:取消设置音量接口改为静音和取消静音接口。

  1. void setVolume(float audioVolume)

  2. float getVolume()

  1. LVPlayerCode mute(boolean isMute)

  2. boolean isMute()

不支持应用内单独控制播放音量,音量控制统一交由系统音量来完成。

新增接口:增加音频焦点接口。

无。

  1. LVPlayerCode audioFocus()

  2. boolean isAudioFocus()

从2.0.0开始,SDK不再支持多路音频同时播放,至多只有一路音频播放。当存在多路观看(如NVR多分屏)场景时,请交由用户来调用播放器的audioFocus()接口来完成多路播放器之间声音播放的切换。

接口移除:移除音频播放流通道设置接口。

void setAudioStreamType(final int streamType)

无。

直播播放器始终使用 AudioManager.STREAM_MUSIC通道,不再支持切换。

接口移除:移除对GLSurfaceView的支持。

  1. void setSurfaceView(SurfaceView mSurfaceView)

  2. void clearSurfaceView()

无。

请替换为TextureView,相比GLSurfaceView有以下优势:

  1. 支持硬件加速,可随View移动不产生黑边。

  2. 支持电子变焦(请使用SDK提供ZoomableTextureView)

  3. 支持多窗口播放。

接口变更:设置画面缩放模式接口参数调整。

void setVideoScalingMode(int mVideoScalingMode)

LVPlayerCode setVideoScalingMode(LVVideoScalingMode videoScalingMode)

com.aliyun.iotx.linkvisual.media.player.bean.LVVideoScalingMode { //保持宽高 LV_VIDEO_SCALING_MODE_FIT, //强制填充 LV_VIDEO_SCALING_MODE_FILL; }

修改参数名和类名。

接口变更:边播边录。

  1. boolean startRecordingContent(File contentFile)

  2. boolean stopRecordingContent()

  3. long getCurrentRecordingContentDuration()

  1. LVPlayerCode startRecordingContent(String contentFilePath)

  2. LVPlayerCode stopRecordingContent()

  3. long getCurrentRecordingContentDurationInMs()

  1. 开始录制参数类型由File改为String

  2. 获取录制时长接口名调整。

接口移除:设置播放停止时画面行为接口。

  1. void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)

  2. PlayerStoppedDrawingMode getPlayerStoppedDrawingMode()

无。

无。

接口变更:获取播放状态接口。

int getPlayState()

  1. LVPlayerState getPlayerState()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVPlayerState

播放器状态由int改为枚举值,方便理解和维护。

接口变更:获取当前流连接类型接口。

StreamConnectType getStreamConnectType()

  1. LVStreamConnectType getStreamConnectType()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVStreamConnectType

修改类名。

接口变更:获取当前播放帧率或码率信息接口。

PlayInfo getCurrentPlayInfo()

  1. LVPlayInfo getCurrentPlayInfo()

  2. com.aliyun.iotx.linkvisual.media.player.bean.LVPlayInfo

修改类名。

接口变更:设置点播播放器回调接口。

  1. void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener)

  2. void setOnErrorListener(OnErrorListener listener)

  3. void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener)

  4. void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener)

  5. void setOnVideoQualityListener(OnVideoQualityListener listener)

  6. void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener)

  7. void setOnCompletionListener(OnCompletionListener listener)

LVPlayerCode setPlayerListener(ILVPlayerListener listener)

com.aliyun.iotx.linkvisual.media.player.listener.ILVPlayerListener {
    void onError(LVPlayerError error);
    void onPlayerStateChange(LVPlayerState state);
    void onRenderedFirstFrame(int elapsedTimeInMs);
    void onVideoSizeChanged(int width, int height);
    void onSeiInfoUpdate(byte[] buffer, int length, long timeStamp);    void onVideoJitterBufferEmpty();
}

LVPlayerCode setVodCompletionListener(ILVVodPlayerCompletionListener listener)

com.aliyun.iotx.linkvisual.media.player.listener.ILVVodPlayerCompletionListener{
    void onCompletion();
}

将多个Listener合并为二个。

接口变更:设置使用外部渲染接口。

  1. void setUseExternalRender(boolean mUseExternalRender)

  2. void setOnExternalRenderListener

  3. boolean useExternalRender()

LVPlayerCode setUseExternalRender(boolean useExternalVideoRender, boolean useExternalAudioRender, ILVPlayerExternalRenderListener listener)

com.aliyun.iotx.linkvisual.media.player.listener.ILVPlayerExternalRenderListener {
    void onVideoFrameUpdate(int width, int height, long timestampInMs);
    void onAudioHeader(int audioBitPerSample, int audioSamplesPerSec, int audioChannel);
    boolean onAudioData(byte[] buffer, int offset, int length);
}

从2.0.0开始,不仅支持视频YUV数据回调,还支持音频PCM回调。

接口变更:获取一帧YUV数据接口。

Yuv420pFrame getYuvFrame()

Yuv420pFrame getYuv420pFrame()

修改接口名。

语音对讲

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

com.aliyun.iotx.linkvisual.media.audio.LiveIntercomV2

com.aliyun.iotx.linkvisual.media.liveintercom.LVLiveIntercom

更新包名与类名。

接口变更:初始化接口。

LiveIntercomV2(Context context, final String iotId, final LiveIntercomMode liveIntercomMode, final AudioParams audioParams)

LVLiveIntercom(Context context, AudioParams audioParams)

从2.0.0 SDK开始,iotId和对讲模式不在初始化阶段传入,分别在start()setLiveIntercomMode()接口中。

指令接口,如start()stop()release()等增加返回值。

无。

返回值枚举:

LVLiveIntercomCode { //执行成功 LV_LIVE_INTERCOM_SUCCESS, //执行失败, 通用错误 LV_LIVE_INTERCOM_ERROR_FAILED, //错误的输入参数 LV_LIVE_INTERCOM_ERROR_INVALID_PARAMETER, //不支持的接口 LV_LIVE_INTERCOM_ERROR_UNSUPPORTED }

可以通过判断返回值作为接口操作是否成功的判断。

新增接口:增加新的对讲模式。

无。

LVLiveIntercomCode setLiveIntercomMode(LVLiveIntercomMode liveIntercomMode)

从2.0.0 SDK开始增加DoubleTalkWithLive模式:App端和设备端都需要同时做采音和放音,设备端必须支持AEC,否则不建议使用该方案;将会使用设备直播通道的声音进行播放,要求必须有已开播的直播通道,可通过LVLivePlayer.audioFocus()方法在对讲开启前选择对应的已存在的直播通道。

接口变更:与指定设备(通过URL)进行对讲。

void startWithExternalRequest(LiveIntercomRequest liveIntercomRequest)

LVLiveIntercomCode start(String url, String decryptIvBase64, String decryptKeyBase64)

修改接口名,注意decryptIvBase64和decryptKeyBase64使用Base64编码的字符串。

接口变更:设置对讲监听器。

void setLiveIntercomV2Listener(LiveIntercomV2Listener listener)

LVLiveIntercomCode setLiveIntercomListener(ILVLiveIntercomListener listener)

ILVLiveIntercomListener { void onTalkReady(); void onRecorderStart(); void onRecorderEnd(); void onRecorderVolume(int volume); void onError(LVLiveIntercomError error); }

修改接口名。

接口变更:外部变声实现。

void setExternalVoiceChangeImpl(IVoiceChange voiceChangeImpl)

LVLiveIntercomCode setUseExternalVoiceChange(boolean useExternal, ILVLiveIntercomVoiceChangeListener listener)

ILVLiveIntercomVoiceChangeListener{ boolean onAudioData(byte[] pcm, int length); }

修改接口名。

接口变更:内部变声类型设置。

void setVoiceChangeType(LiveIntercomVoiceType voiceType)

LVLiveIntercomCode setVoiceChangeType(LVLiveIntercomVoiceType liveIntercomVoiceType)

修改接口名。