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

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

说明

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

重要变化

重要变化

1.x.x版本

2.x.x版本

播放器和语音对讲拆分。

所有类型播放器和对讲功能都封装在IMSLinkVisualPlayerViewController中。

按功能拆分为:

  • 直播LVLivePlayer

  • 点播LVVodPlayer

  • 语音对讲LVLiveIntercom

播放器与ViewController分离。

播放器和语音对讲所有功能都封装在IMSLinkVisualPlayerViewController中。

不再提供ViewController,提供设置LVGlkView的接口。

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

全局组件

变更细节

1.x.x

2.x.x

修改建议

新增全局LVMedia组件。

无。

LVMedia

更新包名与类名。

接口新增:日志级别设置。

无。

(void) setLogLevel:(IMSLinkVisualMediaLogLevel)level;

全局日志级别设置接口。

直播播放器

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

IMSLinkVisualPlayerViewController

LVLivePlayer

更新包名与类名。

播放器不再提供ViewController

IMSLinkVisualPlayerViewController封装了GLKView,用于渲染。

播放器与渲染View解耦合。

需要在VC中创建LVGlkView,并在VC的viewDidAppear时调用 (LVPlayerCode) setWindow:(LVGlkView *_Nullable)view设置给播放器。

接口新增:设置为加密的rtmp直播地址。

无。

(LVPlayerCode) setDataSource:(NSString *_Nonnull)url

无。

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

(BOOL)setDataSource_Live:(NSString *_Nullable)rtmpPathneedEncrypt:(BOOL)needEncryptiv:(NSData *_Nullable)ivkey:(NSData *_Nullable)key;

(LVPlayerCode) setDataSource:(NSString *_Nonnull)url isEncrypted:(BOOL)isEncrypted decryptIvBase64:(NSString *_Nullable)decryptIvBase64 decryptKeyBase64:(NSString *_Nullable)decryptKeyBase64;

重要

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

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

无。

返回值枚举:

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

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

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

无。

  1. (NSInteger) getVideoWidth;

  2. (NSInteger) getVideoHeight;

无。

类名与方法名变更:设置解码器策略和获取解码器类型。

  1. (IMSLinkVisualPlayerDecodeMode)getDecoderStrategy;

  2. (BOOL)setDecoderStrategy:(IMSLinkVisualPlayerDecodeMode)decodeMode

  1. (LVPlayerCode) setDecoderStrategy:(LVDecoderStrategy)decoderStrategy;

  2. (LVDecoderType) getDecoderType;

修改类名与方法名。

接口移除:P2P全局初始化和释放。

  1. (void)initP2P;

  2. (void)deallocP2P;

无。

不需要该动作。

接口移除:所有播放器触发stop动作。

(void)stopAllPlayer;

无。

从2.0.0开始,自行停止对应的播放器即可,该接口有替代实现,无需有该动作。

属性移除:激活音频管理器。

activeAudioManager;

无。

从2.0.0开始,SDK因为将对讲与播放器剥离,只有在使用对应功能时才会触发录音权限,该接口已无意义。

接口变更:音频焦点接口。

(void)activePlayer;

  1. (LVPlayerCode) audioFocus;

  2. (BOOL)isAudioFocus;

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

接口名调整:设置播放器缓存。

  1. (void)setDisplayBuffer;

  2. (NSInteger)bufferCount;

  1. (LVPlayerCode) setBufferedFrameCount;

  2. (NSInteger)frameCount;

接口名调整。

接口名调整:设置播放器抗抖动最大缓冲区时长。

  1. (void)setMaxJitterBufferSizeInMs;

  2. (NSInteger)jitterBufferSizeInMs;

  1. (LVPlayerCode) setMaxJitterBufferSizeInMs;

  2. (NSInteger)jitterBufferSizeInMs;

接口名调整。

接口移除:VC中屏蔽语音对讲。

(instancetype_Nonnull)initDisableIntercom;

无。

从2.0.0开始,播放器和语音对讲已按功能做了拆分,不再耦合,该接口已无意义。

接口名调整:截图。

(UIImage * __nullable)videoSnapshot;

(UIImage *_Nullable) snapShot;

接口名调整。

接口新增:截图到文件。

无。

  1. (LVPlayerCode) snapShotToFile;

  2. (NSString *_Nonnull)jpegFilePath;

无。

接口名调整:边播边录。

  1. (BOOL)startRecordVideoWithfilePath:(NSString *_Nullable)filePath;

  2. (BOOL)stopRecordVideo;

  3. (NSTimeInterval)getRecordMP4Duratio;

  1. (LVPlayerCode) startRecordingContent:(NSString *_Nonnull)contentFilePath;

  2. (LVPlayerCode) stopRecordingContent;

  3. (NSInteger) getCurrentRecordingContentDurationInMs;

接口名调整。

属性移除:取消后台切换自动恢复。

cancelForeground

无。

从2.0.0开始,因不再提供VC,相应的后台监听或恢复逻辑也移除,需要用户在自己的VC中按照需求处理后台切换。

属性变更:帧率或码率。

  1. frameRate

  2. bitRate

(LVPlayInfo) getCurrentPlayInfo;

属性改为接口。

属性变更:连接类型。

connectType

(LVStreamConnectType) getStreamConnectType;

属性改为接口。

接口变更:日志级别设置。

(void)setLogLevel:(IMSLinkVisualMediaLogLevel)logLevel decodeLog:(bool)bShow;

[LVMedia getInstance] (void) setLogLevel:(IMSLinkVisualMediaLogLevel)level;

从2.0.0开始,设置日志级别请用LVMedia全局对象的setLogLevel接口完成。

属性变更:静音。

mute

  1. (LVPlayerCode) mute:(BOOL)isMute;

  2. (BOOL) isMute;

由属性改为接口。

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

contentMode

(LVPlayerCode) setVideoScalingMode:(LVMediaVideoScalingMode)videoScalingMode;

LVVideoScalingMode{ //保持宽高 LV_VIDEO_SCALING_MODE_FIT, //强制填充 LV_VIDEO_SCALING_MODE_FILL; }

由属性改为接口,修改参数名和类名。

属性变更:播放器状态。

playerState

(LVPlayerState) getPlayerState;

属性改为接口,从2.0.0开始iOS的状态机发生了调整,详情请参见状态介绍

代理变更:IMSLinkVisualDelegate

IMSLinkVisualDelegate

  1. LVLivePlayerDelegate

  2. LVLivePlayerExternalRenderDelegate

  1. 移除linkVisualConnect

  2. linkVisualReady和linkVisualStopLVLivePlayerDelegateonLivePlayerStateChange来替代。

  3. linkVisual:withFrameLVLivePlayerExternalRenderDelegate的onLivePlayerVideoFrameUpdate来替代。

  4. linkVisualResolutionChangeLVLivePlayerDelegateonLivePlayerVideoSizeChanged来替代。

  5. linkVisual:frameRate bitRate移除,需要用户自行调用接口来获取。

  6. linkVisualVideoJitterBufferEmptyLVLivePlayerDelegateonLivePlayerVideoJitterBufferEmpty来替代。

属性变更:设置播放器内/外部渲染模式。

lvDisplayMode

(LVPlayerCode) setUseExternalRender;(BOOL)useExternalVideoRender useExternalAudioRender: (BOOL)useExternalAudioRender;

属性变更为接口,除了支持视频的外部渲染外还支持音频的外部播放。

新增接口:获取一帧YUV数据接口。

无。

  1. (LVPlayerCode) lockAndGetYuv420pFrame:(LVYuv420pFrame *_Nonnull)yuv420pFrame;

  2. (LVPlayerCode) unlockYuv420pFrame;

自定义渲染方式不再回调中返回数据,需要在渲染线程中来获取。

点播播放器

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

IMSLinkVisualPlayerViewController

LVVodPlayer

更新包名与类名。

播放器不再提供ViewController

IMSLinkVisualPlayerViewController封装了GLKView用于渲染。

播放器与渲染View解耦合。

需要在VC中创建LVGlkView,并在VC的viewDidAppear时调用 (LVPlayerCode) setWindow:(LVGlkView *_Nullable)view 设置给播放器。

接口新增:设置rtmp点播地址及HLS点播地址数据源。

无。

(LVPlayerCode) setDataSource:(NSString *_Nonnull)url

无。

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

(BOOL)setDataSource_Vod:(NSString *_Nullable)rtmpPathneedEncrypt:(BOOL)needEncryptiv:(NSData *_Nullable)ivkey:(NSData *_Nullable)key;

(LVPlayerCode) setDataSource:(NSString *_Nonnull)url isEncrypted:(BOOL)isEncrypted decryptIvBase64:(NSString *_Nullable)decryptIvBase64 decryptKeyBase64:(NSString *_Nullable)decryptKeyBase64;

重要

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

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

无。

返回值枚举:

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

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

接口名调整:恢复播放。

restore

resume

修改接口名。

接口名调整:逐帧播放。

nextFrame

playFrameByFrame

修改接口名。

接口名调整:seek到对应的时间。

seekToDuration

seekTo

修改接口名。

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

无。

  1. (NSInteger) getVideoWidth;

  2. (NSInteger) getVideoHeight;

无。

类名与方法名变更:设置解码器策略和获取解码器类型。

  1. (IMSLinkVisualPlayerDecodeMode)getDecoderStrategy;

  2. (BOOL)setDecoderStrategy:(IMSLinkVisualPlayerDecodeMode)decodeMode

  1. (LVPlayerCode) setDecoderStrategy:(LVDecoderStrategy)decoderStrategy;

  2. (LVDecoderType) getDecoderType;

修改类名与方法名。

接口移除:P2P全局初始化和释放。

  1. (void)initP2P;

  2. (void)deallocP2P;

无。

不需要该动作。

接口移除:所有播放器触发stop动作。

(void)stopAllPlayer;

无。

从2.0.0开始,自行停止对应的播放器即可,该接口有替代实现,不需要该动作。

属性移除:激活音频管理器。

activeAudioManager;

无。

从2.0.0开始,SDK因为将对讲与播放器剥离,只有在使用对应功能时才会触发录音权限,该接口已无意义。

接口变更:音频焦点接口。

(void)activePlayer;

  1. (LVPlayerCode) audioFocus;

  2. (BOOL)isAudioFocus;

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

接口移除:设置播放器缓存。

  1. (void)setDisplayBuffer;

  2. (NSInteger)bufferCount;

无。

该接口仅在直播播放器中支持,点播播放器移除。

接口移除:设置播放器抗抖动最大缓冲区时长。

  1. (void)setMaxJitterBufferSizeInMs;

  2. (NSInteger)jitterBufferSizeInMs;

无。

该接口仅在直播播放器中支持,点播播放器移除。

接口移除:VC中屏蔽语音对讲。

(instancetype_Nonnull)initDisableIntercom;

从2.0.0开始,播放器和语音对讲已按功能做了拆分,不再耦合,该接口已无意义。

接口名调整:截图。

(UIImage * __nullable)videoSnapshot;

(UIImage *_Nullable) snapShot;

接口名调整。

接口新增:截图到文件。

无。

  1. (LVPlayerCode) snapShotToFile;

  2. (NSString *_Nonnull)jpegFilePath;

无。

接口名调整:边播边录。

  1. (BOOL)startRecordVideoWithfilePath:(NSString *_Nullable)filePath;

  2. (BOOL)stopRecordVideo;

  3. (NSTimeInterval)getRecordMP4Duratio;

  1. (LVPlayerCode) startRecordingContent:(NSString *_Nonnull)contentFilePath;

  2. (LVPlayerCode) stopRecordingContent;

  3. (NSInteger) getCurrentRecordingContentDurationInMs;

接口名调整。

属性移除:取消后台切换自动恢复。

cancelForeground

无。

从2.0.0开始,因不再提供VC,相应的后台监听或恢复逻辑也移除,需要用户在自己的VC中按照需求处理后台切换。

属性变更:帧率或码率。

  1. frameRate

  2. bitRate

(LVPlayInfo) getCurrentPlayInfo;

属性改为接口。

属性变更:连接类型。

connectType

(LVStreamConnectType) getStreamConnectType;

由属性改为接口。

接口变更:日志级别设置。

(void)setLogLevel:(IMSLinkVisualMediaLogLevel)logLevel decodeLog:(bool)bShow;

[LVMedia getInstance] (void) setLogLevel:(IMSLinkVisualMediaLogLevel)level;

从2.0.0开始,设置日志级别请用LVMedia全局对象的setLogLevel接口完成。

属性变更:静音。

mute

  1. (LVPlayerCode) mute:(BOOL)isMute;

  2. (BOOL) isMute;

由属性改为接口。

属性变更:播放速度。

playSpeed

(LVPlayerCode) setPlaybackSpeed:(float)speed;

由属性改为接口。

属性变更:文件总时长和当前时长。

  1. duration

  2. currentDuration

  1. (NSInteger) getDurationMs;

  2. (NSInteger) getCurrentPositionMs;

由属性改为接口。

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

contentMode

(LVPlayerCode) setVideoScalingMode:(LVMediaVideoScalingMode)videoScalingMode;

LVVideoScalingMode{ //保持宽高 LV_VIDEO_SCALING_MODE_FIT, //强制填充 LV_VIDEO_SCALING_MODE_FILL; }

由属性改为接口,修改参数名和类名。

属性变更:播放器状态。

playerState

(LVPlayerState) getPlayerState;

属性改为接口,从2.0.0开始iOS的状态机发生了调整,详情请参见状态介绍

代理变更:IMSLinkVisualDelegate

IMSLinkVisualDelegate

  1. LVVodPlayerDelegate

  2. LVVodPlayerExternalRenderDelegate

  1. 移除linkVisualConnect;

  2. linkVisualReady、linkVisualStop、linkVisualReplaySeekReadyLVVodPlayerDelegateonLivePlayerStateChange来替代。

  3. linkVisual:withFrameLVVodPlayerExternalRenderDelegateonVodPlayerVideoFrameUpdate来替代。

  4. linkVisualResolutionChangeLVVodPlayerDelegateonVodPlayerVideoSizeChanged来替代。

  5. linkVisual:frameRate bitRate移除,需要用户自行调用接口来获取。

  6. linkVisualVideoJitterBufferEmptyLVVodPlayerDelegateonVodPlayerVideoJitterBufferEmpty来替代。

  7. 移除linkVisualRestore、linkVisualPause

  8. linkVisualPlayEndLVVodPlayerDelegateonVodPlayerCompletion来替代。

  9. linkVisualReplay:currentTime移除,需要用户自行调用接口来获取。

属性变更:设置播放器内或外部渲染模式。

lvDisplayMode

(LVPlayerCode) setUseExternalRender;(BOOL)useExternalVideoRender useExternalAudioRender: (BOOL)useExternalAudioRender;

属性变更为接口,除了支持视频的外部渲染外还支持音频的外部播放。

新增接口:获取一帧YUV数据接口。

无。

  1. (LVPlayerCode) lockAndGetYuv420pFrame:(LVYuv420pFrame *_Nonnull)yuv420pFrame;

  2. (LVPlayerCode) unlockYuv420pFrame;

自定义渲染方式不再回调中返回数据,需要在渲染线程中来获取。

语音对讲

变更细节

1.x.x

2.x.x

修改建议

包名与类名变更。

IMSLinkVisualPlayerViewController

LVLiveIntercom

更新包名与类名。

接口变更:初始化接口。

intercomEncodeParams

(id_Nonnull)create:(LVMediaAudioHeader)lvMediaAudioHeader;

从2.0.0 SDK开始,音频参数要求在创建对讲实例时传入。

接口变更:

与指定设备(通过URL)进行对讲。

(void)startIntercom:(IMSLinkVisualIntercomAudioMode)mode;

(LVLiveIntercomCode) start:(NSString *_Nonnull)url decryptIvBase64:(NSString *_Nonnull)decryptIvBase64 decryptKeyBase64:(NSString *_Nonnull)decryptKeyBase64;

从2.0.0 SDK开始对讲模式提供单独的接口来设置。

新增接口:对讲模式设置。

无。

(LVLiveIntercomCode) setLiveIntercomMode:(LVLiveIntercomMode)liveIntercomMode;

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

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

无。

返回值枚举:

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

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

新增接口:静音。

无。

  1. (LVLiveIntercomCode) mute:(BOOL)isMute;

  2. (BOOL) isMute;

无。

属性变更:增益和变声。

  1. gainLevel

  2. voiceChangeType

  1. (LVLiveIntercomCode) setGainLevel:(NSInteger)gainLevel;

  2. (LVLiveIntercomCode) setVoiceChangeType:(LVLiveIntercomVoiceType)liveIntercomVoiceType;

属性变为方法。

接口移除:发送设备端接收的录音数据。

(void)sendAudioData:(NSData *_Nullable)data;

无。

从2.0.0 开始,SDK内部会进行数据的发送,该接口无意义。

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

intercomDelegate

LVLiveIntercomDelegate

  1. 移除linkVisualIntercomConnect

  2. linkVisualIntercomReady替换为onLiveIntercomTalkReady

  3. 移除linkVisualIntercom:audioParams

  4. 移除linkVisualIntercom:audioData。

  5. 移除linkVisualIntercom:recordData,使用LVLiveIntercomVoiceChangeDelegate来代替。

  6. linkVisualIntercomStop替代为onLiveIntercomRecorderEnd

  7. 新增onLiveIntercomRecorderStart

  8. linkVisualIntercom:errorOccurred替代为onLiveIntercomError

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

通过在调用sendAudioData接口前完成对声音的处理。

  1. (LVLiveIntercomCode) setUseExternalVoiceChange:(BOOL)useExternal;

  2. LVLiveIntercomVoiceChangeDelegate

开启外部变声并且实现外部对讲变声代理的onLiveIntercomAudioData方法来实现。