版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.08.10 |
前言
针对短视频的上传、编辑等功能有很多的SDK,比如腾讯的SDK、七牛的SDK等,这里我就说一下我用过的美摄的SDK - 1.8.0,希望对大家有所帮助。感兴趣的可以看我上面几篇。
1. 美摄SDK的使用(一)—— 产品介绍
框架概览
我们先看一下这个框架的代码文件框架。
详细说明
下面我们就说一下每一个文件和类的作用。
1. NvsStreamingContext
/*!
* \brief 流媒体上下文
*
* 流媒体上下文类可视作整个SDK框架的入口。开发过程中,NvsStreamingContext类提供了静态sharedInstance()接口创建流上下文的唯一实例。
* 通过这个实例对象,我们可以开启采集设备录制视频,添加采集视频特效,设置拍摄时的各项参数,包括自动聚焦,自动曝光调节,开关换补光灯等。
* 同时,还能够创建时间线,并将时间线与实时预览窗口(Live Window)连接起来,实时预览播放已经拍摄完成的视频。整个视频制作完成后,要销毁流媒体上下文的对象实例。
*
* 注意: 视频录制和视频生成时只支持输出.mov格式的文件
*/
@interface NvsStreamingContext : NSObject
2. NvsVideoClip
/*!
\brief 视频片段,对视频文件的描述
视频片段源可以是视频或者图片。每个视频片段可以修改其裁剪入点、裁剪出点以及播放速度,也可以设置摇摄和扫描。编辑视频时,可以按特效类型的不同(内建特效,包裹式特效,美颜特效)添加或者插入多个视频特效。
*/
@interface NvsVideoClip : NvsClip
3. NvsAssetPackageManager
/*!
* \brief 资源包管理器,管理视频场景中的资源包
* 在SDK开发过中,资源包管理器统一对需要的各种特技资源包包括字幕,主题,动画贴纸等进行相应的安装,升级,卸载等操作。在安装,升级,卸载时,出现差错都会有相应的错误提示类型,以便快速定位和解决错误。
*/
@interface NvsAssetPackageManager : NSObject
4. NvsAVFileInfo
/*!
* \brief 音视频文件信息
*
* 显示音视频文件的信息,包括音视频文件的时长,数据速率,像素横纵比,音视频流数目等。
*
* 音视频文件信息
*/
@interface NvsAVFileInfo : NSObject
5. NvsTimelineVideoFx
/*!
\brief 时间线视频特效
*/
@interface NvsTimelineVideoFx : NvsFx
6. NvsTimeline
/*!
\brief 时间线,编辑场景的时间轴实体
时间线由轨道组成,可视作一系列音视频轨道的集合。在时间线上可添加或者移除多条视频轨道和音轨轨道,多条轨道之间是相互叠加合成的关系。
当编辑视频时,根据需要还会添加上时间线字幕,主题以及相应的动画贴纸,以制作出美观的视频。
注:时间线上时间单位都为微秒。
*/
@interface NvsTimeline : NvsObject
7. NvsVideoFrameReceiver
/*!
* \brief 视频帧接收器
*
* 对时间线进行定位或者播放的操作所渲染出来的视频帧会通过。
*/
@interface NvsVideoFrameReceiver : NSObject
8. NvsTimelineAnimatedSticker
/*!
\brief 时间线动画贴纸,带有动画效果的贴纸
时间线动画贴纸是视频编辑时使用的一种美化特效,叠加在视频上会产生一些特殊效果。编辑视频时,可通过时间线(Time Line)来添加和移除动画贴纸。如果添加的贴纸位置不合理,还可进行调整移动。
*/
@interface NvsTimelineAnimatedSticker : NvsFx
9. NvsTrack
/*!
\brief 轨道,容纳片段的实体
轨道可视作片段的集合,分为音频轨道(Audio Track)和视频轨道(Video Track)。创建时间线实例后,可添加或移除多条轨道。在每一条轨道上,可以添加多个要编辑的视音频片段,并对片段进行音量设置,也可以进行移除和位置移动。
*/
@interface NvsTrack : NvsObject
10. NvsCommonDef
#pragma once
#include <stdint.h>
/*!
* \brief 音频采样格式
*/
typedef enum {
NvsAudSmpFmt_None = -1,//!< \if ENGLISH None \else 无 \endif
NvsAudSmpFmt_U8, //!< \if ENGLISH unsigned 8 bit \else unsigned 8 bit \endif
NvsAudSmpFmt_S16, //!< \if ENGLISH signed 16 bit \else signed 16 bit \endif
NvsAudSmpFmt_S32, //!< \if ENGLISH signed 32 bit \else signed 32 bit \endif
NvsAudSmpFmt_FLT, //!< \if ENGLISH single precision float \else 单精度浮点数 \endif
NvsAudSmpFmt_DBL, //!< \if ENGLISH double precision float \else 双精度浮点数 \endif
NvsAudSmpFmt_U8P, //!< \if ENGLISH unsigned 8 bit,planer \else unsigned 8 bit 平面格式 \endif
NvsAudSmpFmt_S16P, //!< \if ENGLISH signed 16 bit,planer \else signed 16 bit 平面格式 \endif
NvsAudSmpFmt_S32P, //!< \if ENGLISH signed 32 bit,planer \else signed 32 bit 平面格式 \endif
NvsAudSmpFmt_FLTP, //!< \if ENGLISH single precision float,planar \else 单精度浮点数 平面格式\endif
NvsAudSmpFmt_DBLP, //!< \if ENGLISH double precision float,olanar \else 双精度浮点数 平面格式\endif
NvsAudSmpFmt_Count
} NvsAudioSampleFormat;
/*! \if ENGLISH \else \brief 文件类型 \endif*/
typedef enum {
NvsAVFileType_Unknown = -1, /*!< 未知(-1) */
NvsAVFileType_AudioVideo = 0, /*!< 视频(0) */
NvsAVFileType_Audio, /*!< 音频 */
NvsAVFileType_Image /*!< 图片*/
} NvsAVFileType;
/*! \if ENGLISH \else \brief 视频旋转角度 \endif*/
typedef enum
{
NvsVideoRotation_0 = 0,
NvsVideoRotation_90,
NvsVideoRotation_180,
NvsVideoRotation_270
} NvsVideoRotation;
/*! \if ENGLISH \else \brief 片段在主题中的角色 \endif */
typedef enum NvsRoleInTheme
{
NvsRoleInThemeGeneral, //!< \if ENGLISH \else 通用 \endif
NvsRoleInThemeTitle, //!< \if ENGLISH \else 片头 \endif
NvsRoleInThemeTrailer //!< \if ENGLISH \else 片尾 \endif
} NvsRoleInTheme;
/*! \if ENGLISH \else \brief 片段在主题中的类型 \endif */
typedef enum NvsCategory
{
NvsDefaultCategory, //!< \if ENGLISH \else 默认类型 \endif
NvsUserCategory, //!< \if ENGLISH \else 用户自定义类型 \endif
NvsThemeCategory //!< \if ENGLISH \else 主题类型 \endif
} NvsCategory;
/*! \if ENGLISH \else \brief 比例值 \endif*/
typedef struct {
int num; //!< \if ENGLISH Numerator \else 分子 \endif
int den; //!< \if ENGLISH Denominator \else 分母 \endif
} NvsRational;
typedef struct {
int width;
int height;
} NvsSize;
typedef struct {
float left;
float right;
float bottom;
float top;
} NvsRect;
/*! \if ENGLISH \else \brief 音频解析度 \endif */
typedef struct {
unsigned int sampleRate; //!< \if ENGLISH \else 采样率 \endif
NvsAudioSampleFormat sampleFormat; //!< \if ENGLISH \else 采样格式 \endif
unsigned int channelCount; //!< \if ENGLISH \else 声道数 \endif
} NvsAudioResolution;
/*! \if ENGLISH \else \brief 视频解析度 \endif */
typedef struct {
unsigned int imageWidth; //!< \if ENGLISH \else 图像宽度 \endif
unsigned int imageHeight; //!< \if ENGLISH \else 图像高度 \endif
NvsRational imagePAR; //!< \if ENGLISH \else 像素比(仅支持1:1)\endif
} NvsVideoResolution;
/*!
\brief 自定义颜色类
SDK中,NvsColor类属性r,g,b,a取值范围是[0,1],而非[0,255]。
*/
typedef struct {
float r, g, b, a;
} NvsColor;
/*! \if ENGLISH \else \brief 二维坐标结构 \endif */
typedef struct {
float x, y;
} NvsPosition2D;
/*! \if ENGLISH \else \brief 三维坐标结构 \endif */
typedef struct {
float x, y, z;
} NvsPosition3D;
11. NvsAudioTrack
/*!
* \brief 音频轨道,音频片段的集合
*
* 音频轨道是容纳音频片段的实体。每条音频轨道可以添加或者移除多个音频片段。一个音频片段播放到另一个音频片段时,需要进行音频转场设置,以便过渡衔接。
*
* 注:对于音频轨道的一系列接口及所其属参数含义,请参照视频轨道[NvsVideoTrack] (@ref NvsVideoTrack)的对应接口来对照理解。
*/
@interface NvsAudioTrack : NvsTrack
12. NvsVideoTrack
/*!
\brief 视频轨道,视频片段的集合
视频轨道是容纳视频片段的实体,可以添加、插入、删移多个视频片段。视频轨道随着片段的增加不断延展,而片段与片段之间可进行视频转场设置。
视频轨道添加的视频片段源可以是视频或图片。如果片段源选择的是图片,则图片分辨率不能高于1920 * 1080,否则在Live Window 上渲染不出来。
注:视频片段的索引都是从0开始。
*/
@interface NvsVideoTrack : NvsTrack
13. NvsTimelineCaption
/*!
\brief 时间线字幕
时间线字幕是视频上叠加的自定义文字。编辑视频时,可以添加和移除时间线字幕,并对字幕位置进行调整处理。添加完字幕,还可以进行样式设置,包括字体大小,颜色,阴影,描边等。
*/
@interface NvsTimelineCaption : NvsFx
14. NvsAudioClip
/*!
* \brief 音频片段,对音频文件的描述
*
* 音频片段既可以修改其裁剪入点和出点,播放速度等,还可以添加、插入、移除以及获取多个音频特效(Audio Fx)。
*/
@interface NvsAudioClip: NvsClip
15. NvsAudioFx
/*!
* \brief 音频特效
*
* 音频特效是叠加显示在音频片段上的特效,可以改变音频片段的声调和速率。获取音频片段(Audio Clip)对象实例后,根据需要来添加或者移除多个音频特效。
*
*/
@interface NvsAudioFx : NvsFx
16. NvsCaptureVideoFx
/*!
* \brief 采集视频特效
* 采集视频特效是一种应用在视频采集时的特效。获取流媒体上下文(Streaming Context)实例后,可按内建方式,包裹方式,美颜方式来添加或移除多个采集视频特效。
*
*/
@interface NvsCaptureVideoFx : NvsFx
17. NvsFx
/*!
* \brief 特效
*
* 特效类是视频特效(Video Fx),音频特效(Audio Fx),音频转场(Audio Transition),视频转场(Video Transition)等不同类型特效的基类。在SDK框架中,特效是很关键的一部分,
* 派生自NvsFx类的每种不同类型的特效,或通过片段实例,或时间线实例,或轨道实例来添加,移除和获取。同时,特效类中提供了不同的API接口来设置和获取特效参数类型。
*/
@interface NvsFx : NvsObject
18. NvsVideoFx
/*!
\brief 视频特效
视频特效是显示在视频片段上的特效,能够改变视频图像整体或者局部的颜色、亮度、透明度等,使视频显示出特殊的效果。在视频片段(Video Clip)上,可以添加、移除、获取多个视频特效。
*/
@interface NvsVideoFx : NvsFx
19. NvsVideoFrameRetriever
/*!
* \brief 视频帧提取
*
* 视频帧提取类,可以获取某一时刻的原始视频帧图像。
* \since 1.2.0
*/
@interface NvsVideoFrameRetriever : NSObject
20. NvsAudioTransition
/*!
* \brief 音频转场,音频片段间切换的特效
*
* 一般通过音频轨道(Audio Track)来设置和获取音频转场。目前默认音频转场是淡入淡出转场(fade)。
*
*/
@interface NvsAudioTransition : NvsFx
21. NvsClip
/*!
* \brief 片段,音视频文件的具体描述
*
* 片段是容纳音视频内容的实体,是对视频、音频文件的描述,分为音频片段(Audio Clip)和视频片段(Video Clip)。它定义了不同类型片段所拥有的共同属性和行为,
* 即派生的音频片段和和视频片段可根据需要修改各自的裁剪出入点,左右声道,播放速度等。在SDK框架中,在轨道(Track)上可添加相应的音频片段和视频片段。
*
*/
@interface NvsClip : NvsObject
22. NvsFxDescription
/*!
\brief 特效参数描述
在视频拍摄和编辑时会设置各种不同参数类型的特效,特效参数描述就是专门用来获取各种特效参数值的,以便查看和了解。
*/
@interface NvsFxDescription : NSObject
23. NvsLiveWindow
/*!
* \brief 实时拍摄预览窗口
*
* 在拍摄视频时,将实时预览窗口与采集预览连接,对拍摄场景进行实时预览。完成拍摄后,将实时预览窗口与创建的时间线
(Time Line)连接,对已完成拍摄的视频根据需要进行编辑,然后生成视频输出.mov格式的文件。
*/
@interface NvsLiveWindow : GLKView
24. NvsObject
/*!
* \brief NvsObject类,继承自object-c里的NSObject类。
*
* NvsObject类是SDK里大多数类的基类,通过NvsObject类,其他类继承了一些基础的与object-c语言编译系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。
*/
@interface NvsObject : NSObject
25. NvsThumbnailSequenceView
/*!
\brief 缩略图序列
缩略图序列,即视频按照某种程度缩放,来静态缩略显示的序列。视频编辑时,通过预览定位视频序列,可以设置序列的开始时间,时长,缩略图横纵比等。同时,依照缩略图在对应时段位置精确添加字幕和裁剪视频。
*/
@interface NvsThumbnailSequenceView : UIView
26. NvsVideoTransition
/*!
\brief 视频转场,片段间切换的特效
轨道上有多个片段,转场是从一个视频片段播放到另一个视频片段的衔接过渡效果,而在有间隙的片段之间不能添加视频转场。目前支持多种视频转场,
包括Fade(淡入淡出)、Turning(翻转)、Swap(层叠)、Stretch In(伸展进入)、Page Curl(卷页)、Lens Flare(镜头眩光)、Star(星形)、Dip To Black(闪黑)、Dip To White(闪白)、
Push To Right(右推拉)、Push To Top(上推拉)、Upper Left Into(斜推)。
<br>每种视频转场都可通过视频轨道(NvsVideoTrack)来设置和获取。默认转场是Fade(淡入淡出)。
*/
@interface NvsVideoTransition : NvsFx
后记
未完,待续~~~