IOS视频播放LSOEditPlayer类说明

一、视频播放LSOEditPlayer类

1

- (id)initWithUrlArray:(NSArray<NSURL *> *)urlArray ratio:(LSOSizeRatio)ratio

功能:
• 初始化这个类, 可以是一个图片或一个视频, 也可以是多个视频. 可以设置这个播放器的宽高比例, 当比例是原始时, 默认用数组中第一个url的宽高为默认宽高;
• 当初始化失败后, 返回nil, 大部分是没有授权文件时会失败;

参数:
• urlArray 用户选中的视频/图片
• ratio 容器的比例, 如果原始比例, 则填入LSOSizeRatio_ORIGINAL,比例系数;

2

- (void)setCompositionView:(LSODisplayView *)view;

功能:
• 增加预览的显示窗口;
• 和AVPlayer类似, 视频播放器和播放view是分开的, 你在创建好此对象后, 需要拿到对象的compositionSize,然后布局LSODisplayView, 再设置到此;
• LSODisplayView 继承自UIView,是一个显示控件;显示窗口一定要和合成(容器)的宽高成比例, 可以不相等. 我们提供最简单的集成方法, 方便您参考;

参数:
• view 显示窗口

3

@property(readonly,atomic) CGFloat compDurationS

功能:
• 当前播放器的总时长.单位秒;
(当你设置每个图层的时长后, 此属性会改变. 只读, 不可写入)

4

@property (nonatomic,readonly) CGSize compositionSize

功能:
• 您在init的时候, 设置的合成宽高. 或设置的比例;
• 当在运行中, 调整播放器的比例后, 此宽高是调整后的宽高

5

@property (nonatomic,assign) CGFloat frameRate

功能:
• 设置帧率,
• [可选],范围是10--60

6

@property (nonatomic,assign) int exportBitRate

功能:
• 设置码率, 单位字节,
• [可选],最低是300*1024

7

@property(nonatomic, readonly) CGFloat currentTimeS

功能:
• 获取,当前播放的时间点,单位秒

8

@property (strong,atomic, readonly) NSMutableArray *overlayLayerArray

功能:
• 当前内部有多少个叠加层;
• 如果你获取使用此变量, 则会拷贝一份新的NSMutableArray返回.
• 注意: 请不要一直拷贝

9

@property (strong,atomic, readonly) NSMutableArray *concatLayerArray

功能:
当前内部有多少个拼接层;
   如果你获取使用此变量, 则会拷贝一份新的NSMutableArray返回.
注意: 请不要一直拷贝

10

@property (strong,atomic, readonly) NSMutableArray *audioLayerArray

功能:
• 当前有多少个音频层;
• 如果你获取使用此变量, 则会拷贝一份新的NSMutableArray
• 注意: 请不要一直拷贝

11

@property (nonatomic, readwrite) LSOLayer *selectedLayer

功能:
• 设置一个图层为选中状态;
• 当用户通过界面点击别的图层时,这个状态会被改变;
• 可以设置, 如果设置不选中, 则设置为nil

12

- (void)setBackGroundVideoLayerWithURL:(NSURL *)url completedHandler:(void (^)(LSOLayer *videoLayer))handler

功能:
• 设置一个背景视频;背景视频默认循环;

参数:
• url 背景视频的路径
• handler 背景视频设置完成时的回调

13

- (LSOLayer *)setBackGroundImageLayerWithImage:(UIImage *)image

功能:
• 设置一个背景图片

14

- (void)removeBackGroundLayer

功能:
• 删除背景图层

15

- (LSOLayer *)addVideoLayerWithURL:(NSURL *)url atTime:(CGFloat)startTimeS

功能:
• 增加一个视频叠加层. 叠加层是在拼接层的上面;

参数:
• url 视频的Url路径;
• startTimeS   atStartTime 在合成的指定时间开始增加

16

- (LSOLayer *)addImageLayerWithImage:(UIImage *)image atTime:(CGFloat)startTimeS

功能:
• 叠加一张图片图层;

参数:
• image 图片对象
• startTimeS 在播放器中的开始叠加时间

17

- (LSOLayer *)addGifLayerWithURL:(NSURL *)url atTime:(CGFloat)startTimeS

功能:
• 叠加一个gif图层

参数:
•   url gif的完整url路径
• startTimeS 在播放器中的开始叠加时间

18

- (LSOLayer *)addMVWithColorURL:(NSURL *)colorUrl maskUrl:(NSURL *) maskUrl atTime:(CGFloat)startTimeS

功能:
• 叠加一个透明动画视频, 我们的透明动画是两个视频合并而成的. 一个是彩色视频/一个是黑白视频;

参数:
• colorUrl 透明动画视频中的彩色视频
• maskUrl 透明动画视频中的黑白视频
• startTimeS 从播放器中的开始叠加时间

19

- (LSOAudioLayer *)addAudioLayerWithURL:(NSURL *)url atTime:(CGFloat)startTimeS

功能:
• 增加一个声音图层;

参数:
• url url路径
• startTimeS 开始时间

20

- (void)removeAudioLayer:(LSOAudioLayer *)audioLayer

功能:
• 删除声音图层

参数:
• audioLayer 声音图层对象

21

-(BOOL)setOverlayerLayerPosition:(LSOLayer *)layer index:(int)index

功能:
• 设置叠加层的位置

参数:
• layer 图层对象
• index 位置, 最里层是0

22

-(BOOL)setConcatLayerPosition:(LSOLayer *)layer index:(int)index

功能:
• 设置拼接层的位置.

参数:
• layer 拼接的图层
• index 图层的index, 从前到后, 第一个层是0; 最后面的是: _concatLayerArray.count-1;

23

- (CGSize)updateCompositionRatio:(LSOSizeRatio)ratio

功能:
• 设置合成的比例

参数:
• ratio 设置的比例

24

- (void)prepareConcatLayerAsync:(void (^)(NSArray *layerAray))handler

功能:
• 调用流程是, 在init创建好此对象后, 在需要播放时,调用prepare内部会根据输入的图片和视频数量, 创建好对应的图层对象, 在这个handler中返回;

25

- (void)insertConcatLayerWithImageArray:(NSArray<UIImage *> *)imageArray completedHandler:(void (^)(NSArray *layerAray))handler

功能:
• 增加拼接图片图层; 可以是一张图片, 或多张图片

参数:
• imageArray <#imageArray description#>
• handler 返回的layerAray :是当前新增加的图层对象数组

26

- (void)insertConcatLayerWithArray:(NSArray<NSURL *> *)urlArray atTime:(CGFloat)compTimeS   completedHandler:(void (^)(NSArray *layerArray,BOOL insertBefore))handler;

功能:
• 在容器的指定位置增加资源
• 在容器的指定时间点插入, 时间点在图层前半部分,插入图层前,反之插入到图层后

参数:
• urlArray url数组
• compTimeS 在容器的指定时间点插入,
• handle 完成后的回调,是当前新增加的图层对象数组

27

- (void)insertConcatLayerWitImageArray:(NSArray<UIImage *> *)imageArray atTime:(CGFloat)compTimeS   completedHandler:(void (^)(NSArray *layerArray,BOOL insertBefore))handler

功能:
• 在容器的指定位置增加图片数组

参数:
• imageArray 图片数组
• compTimeS 指定时间点插入
• handler 完成后的回调,是当前新增加的图层对象数组

28

- (void)replaceConcatLayerWithLayer:(LSOLayer *)currentLayer replaceUrl:(NSURL *)url completedHandler:(void (^)(LSOLayer *replacedLayer))handler

功能:
• 替换一个图层

参数:
• currentLayer 当前要替换的图层
• url 要替换的路径 NSURL 格式
• handler 替换完成后的回调

29

-(void)splitConcatLayerByTime:(CGFloat)compTimeS layer:(LSOLayer *)layer

功能:
• 分割图层

参数:
• compTimeS 从容器的相对时间点开始分割
• layer 要分割的图层对象, 分割后的图层, 会放到到拼接图层数组中, 分离后需要更新时间轴

30

-(void)copyConcatLayerByLayer:(LSOLayer *)layer complete:(void(^)(void))completeBlock

功能:
• 复制一个拼接图层

参数:
• layer 要复制的图层
• completeBlock 复制完毕后的回调; 复制后的图层会放到到拼接图层数组中, 分离后需要更新时间轴

31

-(LSOLayer *)copyVideoLayerByLayer:(LSOLayer *)layer

功能:
• 复制一个图层

参数:
• layer 复制的图层对象

32

- (BOOL)removeLayer:(nullable LSOLayer *)layer

功能:
• 删除一个图层.

33

- (void)removeLayerArray:(nullable NSArray<LSOLayer *> *)layers

功能:
• 删除一组图层

参数:
• layers 图层数组

34

- (BOOL)removeLayerByCompTime:(CGFloat )compTimeS

功能:
• 根据合成中的一个时间点, 删除对应的图层

参数:
• compTimeS 在合成中的时间,单位秒

35

-(LSOLayer *)getCurrentConcatLayerByTime:(CGFloat)compTimeS

功能:
• 根据当前在合成中的时间点, 来获取一个图层对象;
• 当前返回的是 LSOLayer对象

36

- (void)applicationDidEnterBackground

功能:
• APP 进入后台时的回调;
• 当用户从下向上滑动, 让整个APP进入后台的时候,
• 你可以调用整个方法, 让合成线程进入后台

37

- (void)applicationDidBecomeActive

功能:
• APP 从后台恢复时的回调;
• 当用户从 后台的状态下, 恢复到当前界面, 则调用这个APP,恢复合成的运行

38

@property(nullable, nonatomic,copy)   UIColor *backgroundColor

功能:
• 设置合成容器的背景颜色
• 当前暂时导出无用

39

-(BOOL)startPreview

功能:
• 播放预览

40

-(void)pause

功能:
• 暂停

41

-(void)resume

功能:
• 恢复播放

42

- (void)seekToTimeS:(CGFloat)timeS

功能:
• 定位到具体的时间戳;
• 在调用后, 会暂停当前界面的执行;
• 你需要在完成seek后, 调用resume来播放
• 预览有效

43

@property (readonly) BOOL isRunning

功能:
• 当前是否在运行

44

@property (readonly) BOOL isPausing

功能:
• 是否暂停

45

-(void)startExportWithRatio:(LSOExportSize)ratioType

功能:
• 开始导出

46

@property (readonly) BOOL   isExporting

功能:
• 当前是否正在导出

47

-(void)cancel

功能:
• 取消整个合成线程
• 包括预览和导出, 都取消

48

@property(nonatomic, copy) void(^playProgressBlock)(CGFloat progress,CGFloat percent)

功能:
• 进度回调,
• 当在编码的时候, 等于当前视频图层的视频播放进度 时间单位是秒;;
• 工作在其他线程,
• 如要工作在主线程,请使用:
   progress: 当前正在播放总合成的时间点,单位秒;
   percent: 当前总合成的时间点对应转换为的百分比;
• 进度则是: progress/_duration;
dispatch_async(dispatch_get_main_queue(), ^{
});

49

@property(nonatomic, copy) NSString *_Nullable(^mergeAVBlock)(NSString *video, NSString *audio)

功能:
• 适配ios13的export类问题

50

@property(nonatomic, copy) void(^playCompletionBlock)(void)

功能:
• 在异步线程执行此block; 请用一下代码后调用;
dispatch_async(dispatch_get_main_queue(), ^{
});

51

@property(nonatomic, copy) void(^exportProgressBlock)(CGFloat progress,CGFloat percent)

功能:
• 导出进度回调;
• 在异步线程执行此block; 请用一下代码后调用;
dispatch_async(dispatch_get_main_queue(), ^{
});

52

@property(nonatomic, copy) void(^exportCompletionBlock)(NSString *_Nullable dstPath)

功能:
• 编码完成回调, 完成后返回生成的视频路径;
• 注意:生成的dstPath目标文件, 我们不会删除.
• 在异步线程执行此block; 请用一下代码后调用;
dispatch_async(dispatch_get_main_queue(), ^{
});

53

@property(nonatomic, copy) void(^userSelectedLayerBlock)(LSOLayer *layer)

功能:
• 当前用户选中的图层回调;
• 在异步线程执行此block; 请用一下代码后调用;
dispatch_async(dispatch_get_main_queue(), ^{
});

54

@property(nonatomic, copy) void(^ _Nullable userTouchDownLayerBlock)(LSOLayer * _Nullable layer)

功能:
• 用户点击事件; 用户手指按下.
• 中间不需要增加 dispatch_async(dispatch_get_main_queue()

55

@property(nonatomic, copy) void(^ _Nullable userTouchMoveLayerBlock)(CGPoint point)

功能:
• 用户移动图层

56

@property(nonatomic, copy) void(^ _Nullable userTouchScaleLayerBlock)(CGSize size)

功能:
• 用户缩放图层事件

57

@property(nonatomic, copy) void(^ _Nullable userTouchRotationLayerBlock)(CGFloat rotation)

功能:
• 用户旋转图层

58

@property(nonatomic, copy) void(^ _Nullable userTouchUpLayerBlock)(void)

功能:
• 用户手指抬起

59

@property(nonatomic, copy) void(^compositionDurationChangedBlock)(CGFloat durationS)

功能:
• 合成容器时间改变回调;
• 当整个容器的合成时间改变了, 则触发回调;
• 比如你对视频做裁剪,则会触发这里.
• 在异步线程执行此block; 请用一下代码后调用;
dispatch_async(dispatch_get_main_queue(), ^{
});

60

@property (nonatomic, assign) BOOL disableTouchEvent

功能:
• 禁止图层的touch事件


地址:杭州市余杭区文一西路1324号利尔达物联网科技园6号楼2001
咨询1:15158022550      邮箱:chenbuqing@lansongai.com
咨询2:18006716739      邮箱:support@lansongtech.com
咨询3:13819483824      邮箱:yangchaowei@lansongai.com