美摄SDK For iOS
3.14.0
|
视频轨道,视频片段的集合 更多...
#import <NvsVideoTrack.h>
额外继承的成员函数 | |
![]() | |
NvsTrackType | type |
轨道类型 更多... | |
unsigned int | index |
轨道索引 更多... | |
int64_t | duration |
轨道长度(单位微秒) 更多... | |
unsigned int | clipCount |
轨道上的片段数量 更多... | |
视频轨道,视频片段的集合
视频轨道是容纳视频片段的实体,可以添加、插入、删移多个视频片段。视频轨道随着片段的增加不断延展,而片段与片段之间可进行视频转场设置。 视频轨道添加的视频片段源可以是视频或图片。如果片段源选择的是图片,建议优先给出相册里的路径(localIdentifier)。加载的图片分辨率不能高于1920 * 1080,否则在Live Window 上渲染不出来。 如果加载的图片出现黑屏等现象,此时需考虑缩小分辨率再加载。添加包裹转场时,都得先安装,安装成功后获取packageId才能使用,而内建转场(builtin)只需获取转场名称即可使用。
注:视频片段的索引都是从0开始。
- (NvsTrackAnimatedSticker *) addAnimatedSticker: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
animatedStickerPackageId: | (NSString *) | animatedStickerPackageId | |
在轨道上添加动画贴纸
inPoint | 动画贴纸在轨道上的入点(单位微秒) |
duration | 动画贴纸的显示时长(单位微秒) |
animatedStickerPackageId | 动画贴纸包Id |
- (NvsTrackVideoFx *) addBuiltinTrackVideoFx: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
videoFxName: | (NSString *) | videoFxName | |
在轨道上添加内嵌的轨道视频特效
inPoint | 轨道视频特效在时间线上的入点(单位微秒) |
duration | 轨道视频特效显示的时长(单位微秒) |
videoFxName | 内嵌的轨道视频特效名字 |
- (NvsTrackVideoFx *) addBuiltinTrackVideoFx: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
videoFxName: | (NSString *) | videoFxName | |
flags: | (int) | flags | |
在轨道上添加内嵌的轨道视频特效
inPoint | 轨道视频特效在时间线上的入点(单位微秒) |
duration | 轨道视频特效显示的时长(单位微秒) |
videoFxName | 内嵌的轨道视频特效名字 |
flags | 标志字段,如无特殊需求,请填写0。请参见 NvsTrackAddFxFlags |
- (NvsTrackCaption *) addCaption: | (NSString *) | captionText | |
inPoint: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
captionStylePackageId: | (NSString *) | captionStylePackageId | |
在轨道上添加字幕
captionText | 字幕的文字 |
inPoint | 字幕在轨道上的起点(单位微秒) |
duration | 字幕显示时长(单位微秒) |
captionStylePackageId | 字幕样式包Id,不存在的话,可以传空字符串或者null |
- (NvsVideoClip *) addClip: | (NSString *) | filePath | |
inPoint: | (int64_t) | inPoint | |
添加片段
filePath | 片段路径 |
IOS中,对于导入的音视频片段的路径,有四种方式:
a. 通过IPod Library库的MPMediaQuery实例导入,片段路径格式如下:"ipod-library://item/item.mp3?id=1217463725835578132";
b. 通过沙河路径路径导入,片段路径格式如下:"/var/mobile/Containers/Data/Documents/tmp/video20170406101714.mp4";
c. 通过PHAsset实例导入,片段路径如下:"file:///var/mobile/Media/DCIM/100APPLE/IMG_0646.MP4"。
inPoint | 片段在时间线上的入点(单位微秒) |
对于片段在时间线上的入点与出点的理解,具体请参见裁剪入点与出点(trimIn and trimOut)专题。
- (NvsVideoClip *) addClip: | (NSString *) | filePath | |
inPoint: | (int64_t) | inPoint | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
添加指定长度的片段
filePath | 片段路径。对于片段路径方式,请参见addClip:inPoint的参数filePath。 |
inPoint | 片段在时间线上的入点(单位微秒) |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
使用addClip:inPoint:添加片段时,待添加的片段会在时间线上指定的入点分割当前片段,再从当前指定的入点起,在轨道上按待添加片段的长度删除对应长度的位置里面所包含的片段,然后添加指定时长的片段。如果在对应位置上有空隙,则直接覆盖。
示例如下:
如上图,轨道上有三个视频片段C1、C2、C3,以及待添加的片段C4。C4片段上箭头所指处即为片段裁剪的的入点和出点,轨道上箭头所指即为片段在时间线上的入点,裁剪后指定长度的片段将添加到轨道上。代码实现如下:
NvsVideoTrack *videoTrack; //videoTrack这里省略创建 [videoTrack addClip:filepath inPoint:inPoint trimIn:trimIn trimOut:trimOut];//filepath为片段C4的路径,inPoint为图中轨道上箭头所指位置的值,trimIn和trimOut为上图C4片段上箭头所指位置处的值
添加后结果如下:
- (NvsTrackCompoundCaption *) addCompoundCaption: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
compoundCaptionPackageId: | (NSString *) | compoundCaptionPackageId | |
在轨道上添加字幕
inPoint | 字幕在轨道上的起点(单位微秒) |
duration | 字幕显示时长(单位微秒) |
captionStylePackageId | 字幕样式包Id,不存在的话,可以传空字符串或者null |
- (NvsTrackAnimatedSticker *) addCustomAnimatedSticker: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
animatedStickerPackageId: | (NSString *) | animatedStickerPackageId | |
customImagePath: | (NSString *) | customImagePath | |
在轨道上添加自定义动画贴纸
inPoint | 自定义动画贴纸在轨道上的入点(单位微秒) |
duration | 自定义动画贴纸的显示时长(单位微秒) |
animatedStickerPackageId | 自定义动画贴纸包Id |
customImagePath | 自定义动画贴纸图像路径(可以是jpg、png图像,或者美摄sdk内部支持的动态caf格式图像) |
- (NvsTrackAnimatedSticker *) addCustomPanoramicAnimatedSticker: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
animatedStickerPackageId: | (NSString *) | animatedStickerPackageId | |
customImagePath: | (NSString *) | customImagePath | |
在轨道上添加自定义全景图动画贴纸
inPoint | 动画贴纸在轨道上的起点(单位微秒) |
duration | 动画贴纸的显示时长(单位微秒) |
animatedStickerPackageId | 动画贴纸资源包ID |
customImagePath | 自定义动画贴纸图像路径(可以是jpg、png图像,或者美摄sdk内部支持的动态caf格式图像) |
- (NvsTrackVideoFx *) addCustomTrackVideoFx: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
customVideoFxRender: | (id< NvsCustomVideoFxRenderer >) | customVideoFxRender | |
在轨道上添加自定义轨道视频特效
inPoint | 轨道视频特效在时间线上的入点(单位微秒) |
duration | 轨道视频特效的时长(单位微秒) |
customVideoFxRender | 用户实现的自定义视频特效渲染器接口 |
- (NvsTrackCaption *) addModularCaption: | (NSString *) | captionText | |
inPoint: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
在轨道上添加模块字幕
captionText | 字幕的文字 |
inPoint | 字幕在轨道上的起点(单位微秒) |
duration | 字幕显示时长(单位微秒) |
- (NvsTrackVideoFx *) addPackagedTrackVideoFx: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
videoFxPackageId: | (NSString *) | videoFxPackageId | |
在轨道上添加资源包形式的轨道视频特效
inPoint | 轨道视频特效在时间线上的入点(单位微秒) |
duration | 轨道视频特效显示的时长(单位微秒) |
videoFxPackageId | 轨道视频特效资源包Id |
- (NvsTrackVideoFx *) addPackagedTrackVideoFx: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
videoFxPackageId: | (NSString *) | videoFxPackageId | |
flags: | (int) | flags | |
在轨道上添加资源包形式的轨道视频特效
inPoint | 轨道视频特效在时间线上的入点(单位微秒) |
duration | 轨道视频特效显示的时长(单位微秒) |
videoFxPackageId | 轨道视频特效资源包Id |
flags | 标志字段,如无特殊需求,请填写0。请参见 NvsTrackAddFxFlags |
- (NvsTrackAnimatedSticker *) addPanoramicAnimatedSticker: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
animatedStickerPackageId: | (NSString *) | animatedStickerPackageId | |
在轨道上添加全景图动画贴纸
inPoint | 动画贴纸在轨道上的起点(单位微秒) |
duration | 动画贴纸的显示时长(单位微秒) |
animatedStickerPackageId | 动画贴纸资源包ID |
- (NvsTrackCaption *) addPanoramicCaption: | (NSString *) | captionText | |
inPoint: | (int64_t) | inPoint | |
duration: | (int64_t) | duration | |
captionStylePackageId: | (NSString *) | captionStylePackageId | |
在轨道上添加全景图字幕
captionText | 字幕的文字 |
inPoint | 字幕在轨道上的入点(单位微秒) |
duration | 字幕的显示时长(单位微秒) |
captionStylePackageId | 字幕样式包Id,不存在的话,可以传空字符串或者null |
- (NvsVideoClip *) addTimelineClip: | (NvsTimeline *) | timeline | |
inPoint: | (int64_t) | inPoint | |
添加时间线片段
timeline | 待添加的时间线对象 |
inPoint | 片段在时间线上的入点(单位微秒) |
对于片段在时间线上的入点与出点的理解,具体请参见裁剪入点与出点(trimIn and trimOut)专题。
- (NvsVideoClip *) addTimelineClip: | (NvsTimeline *) | timeline | |
inPoint: | (int64_t) | inPoint | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
添加指定长度的片段
timeline | 待添加时间线对象 |
inPoint | 片段在时间线上的入点(单位微秒) |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
- (NvsVideoClip *) appendClip: | (NSString *) | filePath |
在视频轨道尾部追加片段
filePath | 片段路径。对于片段路径方式,请参见addClip:inPoint:的参数filePath。 |
示例如下:
上图中视频轨道上有三个片段C1、C2、C3, 如果在视频轨道尾部追加一个新的片段C4,实现代码:
NvsVideoTrack *videoTrack;//videoTrack这里省略创建 [videoTrack appendClip:filepath];//filepath为C4片段的视频文件路径
追加后的结果:
- (NvsVideoClip *) appendClip: | (NSString *) | filePath | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
在轨道尾部追加指定长度的片段
filePath | 片段路径。对于片段路径方式,请参见addClip:inPoint:的参数filePath。 |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
对于片段裁剪入点与出点的理解,具体请参见裁剪入点与出点(trimIn and trimOut)专题。
- (NvsVideoClip *) appendTimelineClip: | (NvsTimeline *) | timeline |
- (NvsVideoClip *) appendTimelineClip: | (NvsTimeline *) | timeline | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
在轨道尾部追加指定长度的时间线片段
timeline | 待追加的时间线对象 |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
对于片段裁剪入点与出点的理解,具体请参见裁剪入点与出点(trimIn and trimOut)专题。
- (NSArray *) getAnimatedStickersByTimelinePosition: | (int64_t) | timelinePos |
根据轨道上的位置获得动画贴纸列表
trackPos | 轨道上的位置(单位微秒) |
- (NSArray *) getCaptionsByTimelinePosition: | (int64_t) | timelinePos |
根据轨道上的位置获得字幕列表。
trackPos | 轨道上的位置(单位微秒) |
- (NvsVideoClip *) getClipWithIndex: | (unsigned int) | clipIndex |
通过索引获取片段对象
clipIndex | 片段索引。clipIndex的取值范围:[0,clipCount-1] |
- (NvsVideoClip *) getClipWithTimelinePosition: | (int64_t) | timelinePos |
- (NSArray<NvsTrackCompoundCaption*> *) getCompoundCaptionsByTimelinePosition: | (int64_t) | timelinePos |
根据轨道上的位置获得复合字幕列表
trackPos | 轨道上的复合位置(单位微秒) |
- (NvsTrackAnimatedSticker *) getFirstAnimatedSticker |
- (NvsTrackCaption *) getFirstCaption |
- (NvsTrackCompoundCaption *) getFirstCompoundCaption |
- (NvsTrackVideoFx *) getFirstTrackVideoFx |
获取轨道上第一个轨道视频特效
- (NvsTrackAnimatedSticker *) getLastAnimatedSticker |
- (NvsTrackCaption *) getLastCaption |
- (NvsTrackCompoundCaption *) getLastCompoundCaption |
- (NvsTrackVideoFx *) getLastTrackVideoFx |
获取轨道上最后一个轨道视频特效
- (NvsTrackAnimatedSticker *) getNextAnimatedSticker: | (NvsTrackAnimatedSticker *) | animatedSticker |
获取轨道当前动画贴纸的后一个动画贴纸
animatedSticker | 轨道动画贴纸对象 |
- (NvsTrackCaption *) getNextCaption: | (NvsTrackCaption *) | caption |
获取轨道上的当前字幕的前一个字幕
caption | 轨道上当前字幕对象 |
- (NvsTrackCompoundCaption *) getNextCompoundCaption: | (NvsTrackCompoundCaption *) | caption |
获取轨道上的当前复合字幕的前一个复合字幕
caption | 轨道上当前复合字幕对象 |
- (NvsTrackVideoFx *) getNextTrackVideoFx: | (NvsTrackVideoFx *) | videoFx |
获取轨道上某个轨道视频特效的下一个轨道视频特效
videoFx | 轨道视频特效对象 |
- (NvsTrackAnimatedSticker *) getPrevAnimatedSticker: | (NvsTrackAnimatedSticker *) | animatedSticker |
获取轨道当前动画贴纸的前一个动画贴纸
animatedSticker | 轨道动画贴纸对象 |
- (NvsTrackCaption *) getPrevCaption: | (NvsTrackCaption *) | caption |
获取轨道上的当前字幕的前一个字幕
caption | 轨道上当前字幕对象 |
- (NvsTrackCompoundCaption *) getPrevCompoundCaption: | (NvsTrackCompoundCaption *) | caption |
获取轨道上的当前复合字幕的前一个复合字幕
caption | 轨道上当前复合字幕对象 |
- (NvsTrackVideoFx *) getPrevTrackVideoFx: | (NvsTrackVideoFx *) | videoFx |
获取轨道上某个轨道视频特效的前一个轨道视频特效
videoFx | 轨道视频特效对象 |
- (NvsRational) getProxyScale |
获取当前轨道渲染的代理级别
- (NSArray *) getTrackVideoFxByPosition: | (int64_t) | pos |
根据轨道上的位置获得轨道视频特效列表
pos | 轨道上的位置(单位微秒) |
- (NvsVideoTransition *) getTransitionWithSourceClipIndex: | (unsigned int) | srcClipIndex |
通过源片段索引获取转场
srcClipIndex | 源片段索引。注意:如果srcClipIndex 大于等于clipCount - 1,返回对象为空。 |
- (NvsVideoClip *) insertClip: | (NSString *) | filePath | |
clipIndex: | (unsigned int) | clipIndex | |
在视频轨道上指定片段索引处插入片段
filePath | 片段路径。对于片段路径方式,请参见addClip:inPoint:的参数filePath。 |
clipIndex | 指定片段索引 |
调用insertClip:clipIndex:执行的是前插入即在clipIndex所表示的片段之前进行插入。示例如下:
上图中轨道上有三个视频片段C1、C2、C3,待插入的片段记为C4。如果在C1之前插入,则clipIndex值为0,其它以此类推。相应代码实现如下:
NvsVideoTrack *videoTrack; //videoTrack这里省略创建 [videoTrack insertClip:filepath clipIndex:0];//filepath为片段C4的路径,clipIndex取值为[0,clipCount-1]
插入后结果:
- (NvsVideoClip *) insertClip: | (NSString *) | filePath | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
clipIndex: | (unsigned int) | clipIndex | |
在轨道上指定片段索引处插入指定长度的片段
filePath | 片段路径。对于片段路径方式,请参见addClip:inPoint:的参数filePath。 |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
clipIndex | 指定片段索引 |
示例如下:
上图中轨道上有三个视频片段C1、C2、C3,以及待插入的片段C4。C4片段上箭头所指处即为片段裁剪的的入点和出点,裁剪后将对应片段插入到轨道上。注意:裁剪入点和出点值必须在此片段的时长范围里,且裁剪入点值必须小于裁剪出点值。实现代码如下:
NvsVideoTrack *videoTrack; //videoTrack这里省略创建 [videoTrack insertClip:filepath trimIn:trimIn trimOut:trimOut clipIndex:0];//filepath为片段C4的路径,trimIn和trimOut为上图C4片段上箭头所指位置处的值,clipIndex取值为[0,clipCount-1]
插入后结果:
- (NvsVideoClip *) insertTimelineClip: | (NvsTimeline *) | timeline | |
clipIndex: | (unsigned int) | clipIndex | |
在视频轨道上指定片段索引处插入片段
timeline | 待插入的时间线对象 |
clipIndex | 指定片段索引 |
- (NvsVideoClip *) insertTimelineClip: | (NvsTimeline *) | timeline | |
trimIn: | (int64_t) | trimIn | |
trimOut: | (int64_t) | trimOut | |
clipIndex: | (unsigned int) | clipIndex | |
在轨道上指定片段索引处插入指定长度的是时间线片段
timeline | 待插入的时间线对象 |
trimIn | 片段裁剪入点(单位微秒) |
trimOut | 片段裁剪出点(单位微秒) |
clipIndex | 指定片段索引 |
- (BOOL) isOriginalRender |
获取是否开启了原始比例渲染的模式
- (NvsTrackAnimatedSticker *) removeAnimatedSticker: | (NvsTrackAnimatedSticker *) | animatedSticker |
移除轨道上的动画贴纸
animatedSticker | 要移除的动画贴纸对象 |
- (NvsTrackCaption *) removeCaption: | (NvsTrackCaption *) | caption |
移除轨道上的字幕
caption | 要移除的轨道字幕对象 |
- (NvsTrackCompoundCaption *) removeCompoundCaption: | (NvsTrackCompoundCaption *) | caption |
移除轨道上的复合字幕
caption | 要移除的轨道复合字幕对象 |
- (NvsTrackVideoFx *) removeTrackVideoFx: | (NvsTrackVideoFx *) | videoFx |
移除轨道上的轨道视频特效
videoFx | 要移除的轨道视频特效对象 |
- (NvsVideoTransition *) setBuiltinTransition: | (unsigned int) | srcClipIndex | |
withName: | (NSString *) | transitionName | |
设置内嵌式转场
srcClipIndex | 源片段索引。注意:如果srcClipIndex 大于等于clipCount - 1,返回对象为空。 |
transitionName | 转场名称。获取视频转场名称,请参见getAllBuiltinVideoTransitionNames()或内建特效名称列表。 注意:转场名称若设为空字符串,则删除原有转场 |
示例如下:
设置视频转场的作用是为了片段与片段间的平缓过渡,避免视频预览时出现跳跃。转场必须设置在相互连接的片段间,而在有空隙的片段之间,则不能设置视频转场。 如上图中轨道上有四个视频片段C1、C、C3、C4,在C1和C2之间可以设置一个内嵌式转场,而C3和C4则不能设置视频转场。实现代码:
NvsVideoTrack *videoTrack; [videoTrack setBuiltinTransition:0 withName:transitionName];
设置转场后:
- (NvsVideoTransition *) setCustomVideoTransition: | (unsigned int) | srcClipIndex | |
withCustomRender: | (id< NvsCustomVideoTransitionRenderer >) | customVideoFxRender | |
设置自定义转场
srcClipIndex | 源视频片段索引。注意:如果srcClipIndex 大于等于clipCount - 1,返回对象为空。 |
customVideoTransitionRender | 用户自定义转场特效 |
- (void) setEnableOriginalRender: | (BOOL) | enable |
- (NvsVideoTransition *) setPackagedTransition: | (unsigned int) | srcClipIndex | |
withPackageId: | (NSString *) | packageId | |
设置包裹转场
srcClipIndex | 源片段索引。注意:如果srcClipIndex 大于等于clipCount - 1,返回对象为空。 |
packageId | 资源包ID。若packageId为空,则删除该视频片段处的转场;若packageId设为"theme",则该视频片段处的转场设为当前主题的转场。注意:若无主题,则删除该视频片段处的转场。 |
- (void) setProxyScale: | (NvsRational) | proxyScale |
设置当前轨道渲染的代理级别
proxyScale | 代理级别 |
- (void) updateAudioForTrackVideoFx |
更新当前轨道特效中携带的音频信息。