美摄SDK的使用(二)—— 框架介绍

版本记录

版本号 时间
V1.0 2017.08.10

前言

针对短视频的上传、编辑等功能有很多的SDK,比如腾讯的SDK、七牛的SDK等,这里我就说一下我用过的美摄的SDK - 1.8.0,希望对大家有所帮助。感兴趣的可以看我上面几篇。
1. 美摄SDK的使用(一)—— 产品介绍

框架概览

我们先看一下这个框架的代码文件框架。

美摄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

后记

未完,待续~~~

美的心疼
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容