美攝SDK的使用(二)—— 框架介紹

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.08.10

前言

針對(duì)短視頻的上傳、編輯等功能有很多的SDK,比如騰訊的SDK、七牛的SDK等,這里我就說(shuō)一下我用過(guò)的美攝的SDK - 1.8.0,希望對(duì)大家有所幫助。感興趣的可以看我上面幾篇。
1. 美攝SDK的使用(一)—— 產(chǎn)品介紹

框架概覽

我們先看一下這個(gè)框架的代碼文件框架。

美攝SDK框架

詳細(xì)說(shuō)明

下面我們就說(shuō)一下每一個(gè)文件和類的作用。

1. NvsStreamingContext

/*!
 *  \brief 流媒體上下文
 * 
 *  流媒體上下文類可視作整個(gè)SDK框架的入口。開發(fā)過(guò)程中,NvsStreamingContext類提供了靜態(tài)sharedInstance()接口創(chuàng)建流上下文的唯一實(shí)例。
 *  通過(guò)這個(gè)實(shí)例對(duì)象,我們可以開啟采集設(shè)備錄制視頻,添加采集視頻特效,設(shè)置拍攝時(shí)的各項(xiàng)參數(shù),包括自動(dòng)聚焦,自動(dòng)曝光調(diào)節(jié),開關(guān)換補(bǔ)光燈等。
 *  同時(shí),還能夠創(chuàng)建時(shí)間線,并將時(shí)間線與實(shí)時(shí)預(yù)覽窗口(Live Window)連接起來(lái),實(shí)時(shí)預(yù)覽播放已經(jīng)拍攝完成的視頻。整個(gè)視頻制作完成后,要銷毀流媒體上下文的對(duì)象實(shí)例。
 *
 *  注意: 視頻錄制和視頻生成時(shí)只支持輸出.mov格式的文件
 */
@interface NvsStreamingContext : NSObject

2. NvsVideoClip

/*!
    \brief 視頻片段,對(duì)視頻文件的描述

    視頻片段源可以是視頻或者圖片。每個(gè)視頻片段可以修改其裁剪入點(diǎn)、裁剪出點(diǎn)以及播放速度,也可以設(shè)置搖攝和掃描。編輯視頻時(shí),可以按特效類型的不同(內(nèi)建特效,包裹式特效,美顏特效)添加或者插入多個(gè)視頻特效。
 */
@interface NvsVideoClip : NvsClip

3. NvsAssetPackageManager

/*!
 *  \brief 資源包管理器,管理視頻場(chǎng)景中的資源包

 *   在SDK開發(fā)過(guò)中,資源包管理器統(tǒng)一對(duì)需要的各種特技資源包包括字幕,主題,動(dòng)畫貼紙等進(jìn)行相應(yīng)的安裝,升級(jí),卸載等操作。在安裝,升級(jí),卸載時(shí),出現(xiàn)差錯(cuò)都會(huì)有相應(yīng)的錯(cuò)誤提示類型,以便快速定位和解決錯(cuò)誤。
 */
@interface NvsAssetPackageManager : NSObject

4. NvsAVFileInfo

/*!
 *  \brief 音視頻文件信息
 * 
 *  顯示音視頻文件的信息,包括音視頻文件的時(shí)長(zhǎng),數(shù)據(jù)速率,像素橫縱比,音視頻流數(shù)目等。
 * 
 *  音視頻文件信息
 */
@interface NvsAVFileInfo : NSObject

5. NvsTimelineVideoFx

/*!
    \brief 時(shí)間線視頻特效
 */
@interface NvsTimelineVideoFx : NvsFx

6. NvsTimeline

/*!
     \brief 時(shí)間線,編輯場(chǎng)景的時(shí)間軸實(shí)體
 
     時(shí)間線由軌道組成,可視作一系列音視頻軌道的集合。在時(shí)間線上可添加或者移除多條視頻軌道和音軌軌道,多條軌道之間是相互疊加合成的關(guān)系。
     當(dāng)編輯視頻時(shí),根據(jù)需要還會(huì)添加上時(shí)間線字幕,主題以及相應(yīng)的動(dòng)畫貼紙,以制作出美觀的視頻。

     注:時(shí)間線上時(shí)間單位都為微秒。
 */
@interface NvsTimeline : NvsObject

7. NvsVideoFrameReceiver

/*!
 *  \brief 視頻幀接收器
 * 
 *  對(duì)時(shí)間線進(jìn)行定位或者播放的操作所渲染出來(lái)的視頻幀會(huì)通過(guò)。
 */
@interface NvsVideoFrameReceiver : NSObject

8. NvsTimelineAnimatedSticker

/*!
    \brief 時(shí)間線動(dòng)畫貼紙,帶有動(dòng)畫效果的貼紙
   
    時(shí)間線動(dòng)畫貼紙是視頻編輯時(shí)使用的一種美化特效,疊加在視頻上會(huì)產(chǎn)生一些特殊效果。編輯視頻時(shí),可通過(guò)時(shí)間線(Time Line)來(lái)添加和移除動(dòng)畫貼紙。如果添加的貼紙位置不合理,還可進(jìn)行調(diào)整移動(dòng)。
 */
@interface NvsTimelineAnimatedSticker : NvsFx

9. NvsTrack

/*!
     \brief 軌道,容納片段的實(shí)體
 
     軌道可視作片段的集合,分為音頻軌道(Audio Track)和視頻軌道(Video Track)。創(chuàng)建時(shí)間線實(shí)例后,可添加或移除多條軌道。在每一條軌道上,可以添加多個(gè)要編輯的視音頻片段,并對(duì)片段進(jìn)行音量設(shè)置,也可以進(jìn)行移除和位置移動(dòng)。
 */
@interface NvsTrack : NvsObject

10. NvsCommonDef

#pragma once

#include <stdint.h>

/*!
 *  \brief 音頻采樣格式
 */
typedef enum {
    NvsAudSmpFmt_None = -1,//!< \if ENGLISH None \else 無(wú) \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 單精度浮點(diǎn)數(shù) \endif
    NvsAudSmpFmt_DBL,      //!< \if ENGLISH double precision float \else 雙精度浮點(diǎn)數(shù) \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 單精度浮點(diǎn)數(shù) 平面格式\endif
    NvsAudSmpFmt_DBLP,     //!< \if ENGLISH double precision float,olanar \else 雙精度浮點(diǎn)數(shù) 平面格式\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 視頻旋轉(zhuǎn)角度 \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 默認(rèn)類型 \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 聲道數(shù) \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 二維坐標(biāo)結(jié)構(gòu) \endif */
typedef struct {
    float x, y;
} NvsPosition2D;
/*! \if ENGLISH \else \brief 三維坐標(biāo)結(jié)構(gòu) \endif */
typedef struct {
    float x, y, z;
} NvsPosition3D;

11. NvsAudioTrack

/*!
 *  \brief 音頻軌道,音頻片段的集合
 *
 *  音頻軌道是容納音頻片段的實(shí)體。每條音頻軌道可以添加或者移除多個(gè)音頻片段。一個(gè)音頻片段播放到另一個(gè)音頻片段時(shí),需要進(jìn)行音頻轉(zhuǎn)場(chǎng)設(shè)置,以便過(guò)渡銜接。
 * 
 *  注:對(duì)于音頻軌道的一系列接口及所其屬參數(shù)含義,請(qǐng)參照視頻軌道[NvsVideoTrack] (@ref NvsVideoTrack)的對(duì)應(yīng)接口來(lái)對(duì)照理解。
 */
@interface NvsAudioTrack : NvsTrack

12. NvsVideoTrack

/*!
    \brief 視頻軌道,視頻片段的集合

    視頻軌道是容納視頻片段的實(shí)體,可以添加、插入、刪移多個(gè)視頻片段。視頻軌道隨著片段的增加不斷延展,而片段與片段之間可進(jìn)行視頻轉(zhuǎn)場(chǎng)設(shè)置。
    視頻軌道添加的視頻片段源可以是視頻或圖片。如果片段源選擇的是圖片,則圖片分辨率不能高于1920 * 1080,否則在Live Window 上渲染不出來(lái)。

    注:視頻片段的索引都是從0開始。
 */
@interface NvsVideoTrack : NvsTrack

13. NvsTimelineCaption

/*!
    \brief 時(shí)間線字幕

    時(shí)間線字幕是視頻上疊加的自定義文字。編輯視頻時(shí),可以添加和移除時(shí)間線字幕,并對(duì)字幕位置進(jìn)行調(diào)整處理。添加完字幕,還可以進(jìn)行樣式設(shè)置,包括字體大小,顏色,陰影,描邊等。
 */
@interface NvsTimelineCaption : NvsFx

14. NvsAudioClip

/*!
 *  \brief 音頻片段,對(duì)音頻文件的描述
 *   
 *  音頻片段既可以修改其裁剪入點(diǎn)和出點(diǎn),播放速度等,還可以添加、插入、移除以及獲取多個(gè)音頻特效(Audio Fx)。
 */
@interface NvsAudioClip: NvsClip

15. NvsAudioFx

/*!
 *  \brief 音頻特效
 *  
 *  音頻特效是疊加顯示在音頻片段上的特效,可以改變音頻片段的聲調(diào)和速率。獲取音頻片段(Audio Clip)對(duì)象實(shí)例后,根據(jù)需要來(lái)添加或者移除多個(gè)音頻特效。
 * 
 */
@interface NvsAudioFx : NvsFx

16. NvsCaptureVideoFx

/*!
 *  \brief 采集視頻特效

 *  采集視頻特效是一種應(yīng)用在視頻采集時(shí)的特效。獲取流媒體上下文(Streaming Context)實(shí)例后,可按內(nèi)建方式,包裹方式,美顏方式來(lái)添加或移除多個(gè)采集視頻特效。
 * 
 */
@interface NvsCaptureVideoFx : NvsFx

17. NvsFx

/*!
 *  \brief 特效
 * 
 *   特效類是視頻特效(Video Fx),音頻特效(Audio Fx),音頻轉(zhuǎn)場(chǎng)(Audio Transition),視頻轉(zhuǎn)場(chǎng)(Video Transition)等不同類型特效的基類。在SDK框架中,特效是很關(guān)鍵的一部分,
 *  派生自NvsFx類的每種不同類型的特效,或通過(guò)片段實(shí)例,或時(shí)間線實(shí)例,或軌道實(shí)例來(lái)添加,移除和獲取。同時(shí),特效類中提供了不同的API接口來(lái)設(shè)置和獲取特效參數(shù)類型。
 */
@interface NvsFx : NvsObject

18. NvsVideoFx

/*!
    \brief 視頻特效

    視頻特效是顯示在視頻片段上的特效,能夠改變視頻圖像整體或者局部的顏色、亮度、透明度等,使視頻顯示出特殊的效果。在視頻片段(Video Clip)上,可以添加、移除、獲取多個(gè)視頻特效。
 */
@interface NvsVideoFx : NvsFx

19. NvsVideoFrameRetriever

/*!
 *  \brief 視頻幀提取
 *
 *  視頻幀提取類,可以獲取某一時(shí)刻的原始視頻幀圖像。
 *  \since 1.2.0
 */
@interface NvsVideoFrameRetriever : NSObject

20. NvsAudioTransition

/*!
 *  \brief 音頻轉(zhuǎn)場(chǎng),音頻片段間切換的特效
 *  
 *  一般通過(guò)音頻軌道(Audio Track)來(lái)設(shè)置和獲取音頻轉(zhuǎn)場(chǎng)。目前默認(rèn)音頻轉(zhuǎn)場(chǎng)是淡入淡出轉(zhuǎn)場(chǎng)(fade)。
 * 
 */
@interface NvsAudioTransition : NvsFx

21. NvsClip

/*!
 *  \brief 片段,音視頻文件的具體描述
 *   
 *  片段是容納音視頻內(nèi)容的實(shí)體,是對(duì)視頻、音頻文件的描述,分為音頻片段(Audio Clip)和視頻片段(Video Clip)。它定義了不同類型片段所擁有的共同屬性和行為,
 *  即派生的音頻片段和和視頻片段可根據(jù)需要修改各自的裁剪出入點(diǎn),左右聲道,播放速度等。在SDK框架中,在軌道(Track)上可添加相應(yīng)的音頻片段和視頻片段。
 * 
 */
@interface NvsClip : NvsObject

22. NvsFxDescription

/*!
    \brief 特效參數(shù)描述

    在視頻拍攝和編輯時(shí)會(huì)設(shè)置各種不同參數(shù)類型的特效,特效參數(shù)描述就是專門用來(lái)獲取各種特效參數(shù)值的,以便查看和了解。
*/
@interface NvsFxDescription : NSObject

23. NvsLiveWindow

/*!
 *  \brief 實(shí)時(shí)拍攝預(yù)覽窗口
 * 
 *  在拍攝視頻時(shí),將實(shí)時(shí)預(yù)覽窗口與采集預(yù)覽連接,對(duì)拍攝場(chǎng)景進(jìn)行實(shí)時(shí)預(yù)覽。完成拍攝后,將實(shí)時(shí)預(yù)覽窗口與創(chuàng)建的時(shí)間線
(Time Line)連接,對(duì)已完成拍攝的視頻根據(jù)需要進(jìn)行編輯,然后生成視頻輸出.mov格式的文件。
 */
@interface NvsLiveWindow : GLKView

24. NvsObject

/*!
 * \brief NvsObject類,繼承自object-c里的NSObject類。
 * 
 * NvsObject類是SDK里大多數(shù)類的基類,通過(guò)NvsObject類,其他類繼承了一些基礎(chǔ)的與object-c語(yǔ)言編譯系統(tǒng)之間的接口,并且獲得了在它的實(shí)例中表現(xiàn)為一個(gè)對(duì)象的能力。
 */
@interface NvsObject : NSObject

25. NvsThumbnailSequenceView

/*!
    \brief 縮略圖序列

    縮略圖序列,即視頻按照某種程度縮放,來(lái)靜態(tài)縮略顯示的序列。視頻編輯時(shí),通過(guò)預(yù)覽定位視頻序列,可以設(shè)置序列的開始時(shí)間,時(shí)長(zhǎng),縮略圖橫縱比等。同時(shí),依照縮略圖在對(duì)應(yīng)時(shí)段位置精確添加字幕和裁剪視頻。
 */
@interface NvsThumbnailSequenceView : UIView

26. NvsVideoTransition

/*!
    \brief 視頻轉(zhuǎn)場(chǎng),片段間切換的特效
 
    軌道上有多個(gè)片段,轉(zhuǎn)場(chǎng)是從一個(gè)視頻片段播放到另一個(gè)視頻片段的銜接過(guò)渡效果,而在有間隙的片段之間不能添加視頻轉(zhuǎn)場(chǎng)。目前支持多種視頻轉(zhuǎn)場(chǎng),
    包括Fade(淡入淡出)、Turning(翻轉(zhuǎn))、Swap(層疊)、Stretch In(伸展進(jìn)入)、Page Curl(卷頁(yè))、Lens Flare(鏡頭眩光)、Star(星形)、Dip To Black(閃黑)、Dip To White(閃白)、
    Push To Right(右推拉)、Push To Top(上推拉)、Upper Left Into(斜推)。
    <br>每種視頻轉(zhuǎn)場(chǎng)都可通過(guò)視頻軌道(NvsVideoTrack)來(lái)設(shè)置和獲取。默認(rèn)轉(zhuǎn)場(chǎng)是Fade(淡入淡出)。
 */
@interface NvsVideoTransition : NvsFx

后記

未完,待續(xù)~~~

美的心疼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容