一、相关接口类
| 接口类名 | 描述 |
| TAVEditor | SDK 操作入口类。 |
| ITAVPipManager | 画中画操作接口类。 |
| TAVMediaPipItem | 画中画数据模型类。 |
| ITAVPipViewDataSource | 自定义画中画视图的数据源协议。 |
| TAVPipContextObserver | 画中画视图变化观察者协议。 |
二、接口方法汇总
| 方法 | 参数 | 返回值 | 说明 |
| setPipViewDataSource: | dataSource:遵守 ITAVPipViewDataSource 的对象。 | void | 设置自定义画中画视图数据源。 |
| createPipItem:mediaType: | filePath:画中画路径。mediaType:0 为视频,1 为图片。 | TAVMediaPipItem * | 创建画中画对象。 |
| loadPip: | pipItem:画中画对象。 | void | 加载画中画。 |
| removePip: | pipItem:画中画对象。 | void | 移除指定画中画。 |
| removeCurrentPip | – | void | 移除当前画中画。 |
| removeAllPip | – | void | 移除所有画中画。 |
| getAllPipItems | – | NSArray<TAVMediaPipItem *> * | 获取所有画中画对象。 |
| getCurrentPipItem | – | TAVMediaPipItem * | 获取当前画中画对象。 |
| addPipObserver: / removePipObserver: | observer:观察者。 | void | 添加/移除画中画变化监听。 |
| activePip: / resignPip: | pipItem:画中画对象。 | void | 激活/注销画中画。 |
| resignCurrentPip | – | void | 注销当前画中画。 |
| fetchPipView: | pipItem:画中画对象。 | TAVPipView * | 取画中画对应的视图。 |
三、获取画中画操作接口
/// 获取画中画操作类- (id<ITAVPipManager>)getPipManager;
四、创建画中画对象
/// 创建画中画/// – Parameters:/// – filePath: 画中画路径/// – mediaType: 资源类型,0为视频,1为图片- (TAVMediaPipItem *)createPipItem:(NSString *)filePath mediaType:(NSInteger)mediaType;
创建后通过 timeRange 设置画中画的显示时间区间。
五、加载画中画
/// 添加画中画/// – Parameter pipItem: 画中画对象- (void)loadPip:(TAVMediaPipItem *)pipItem;
六、移除画中画
/// 删除指定画中画- (void)removePip:(TAVMediaPipItem *)pipItem;/// 删除当前画中画- (void)removeCurrentPip;/// 删除所有画中画- (void)removeAllPip;
七、监听画中画变化
TAVPipContextObserver(协议方法全部为 @optional)用于监听画中画视图的显示状态变化:
| 回调 | 参数 | 说明 |
| didShowPipView: | TAVPipView * | 画中画视图已显示。 |
| didHidePipView: | TAVPipView * | 画中画视图已隐藏。 |
| didRemovePipView: | TAVPipView * | 画中画视图已移除。 |
| didActivePipView: | TAVPipView * | 画中画视图被激活。 |
| didResignPipView: | TAVPipView * | 画中画视图被注销。 |
[pipManager addPipObserver:self];// 不再需要时注销[pipManager removePipObserver:self];
八、自定义画中画视图
@protocol ITAVPipViewDataSource <NSObject>/// 根据画中画对象返回画中画视图,可继承自 TAVPipView 自定义控件/// 不实现默认使用 SDK 自带的- (TAVPipView *)pipViewWithPipItem:(TAVMediaPipItem *)pipItem;@end
[pipManager setPipViewDataSource:self];#pragma mark – ITAVPipViewDataSource- (TAVPipView *)pipViewWithPipItem:(TAVMediaPipItem *)pipItem { return [[MyPipView alloc] initWithPipItem:pipItem];}
九、使用示例
// 获取画中画操作接口id<ITAVPipManager> pipManager = [editor getPipManager];// 创建画中画对象(0为视频 / 1为图片)TAVMediaPipItem *pipItem = [pipManager createPipItem:@"/path/to/video.mp4" mediaType:0];// 设置显示区间 0 ~ 5spipItem.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(5, 600));// 加载画中画[pipManager loadPip:pipItem];// 查询全部画中画NSArray<TAVMediaPipItem *> *pips = [pipManager getAllPipItems];// 移除画中画[pipManager removePip:pipItem];
注意:说明:
注意:加载/移除画中画后需调用 flushImmediately 刷新预览。