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

版本記錄

版本號 時間
V1.0 2017.08.10

前言

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

框架概覽

我們先看一下這個框架的代碼文件框架列肢。

美攝SDK框架

詳細(xì)說明

下面我們就說一下每一個文件和類的作用。

1. NvsStreamingContext

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

2. NvsVideoClip

/*!
    \brief 視頻片段爷抓,對視頻文件的描述

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

3. NvsAssetPackageManager

/*!
 *  \brief 資源包管理器独柑,管理視頻場景中的資源包

 *   在SDK開發(fā)過中迈窟,資源包管理器統(tǒng)一對需要的各種特技資源包包括字幕,主題群嗤,動畫貼紙等進行相應(yīng)的安裝菠隆,升級,卸載等操作狂秘。在安裝骇径,升級,卸載時者春,出現(xiàn)差錯都會有相應(yīng)的錯誤提示類型破衔,以便快速定位和解決錯誤。
 */
@interface NvsAssetPackageManager : NSObject

4. NvsAVFileInfo

/*!
 *  \brief 音視頻文件信息
 * 
 *  顯示音視頻文件的信息钱烟,包括音視頻文件的時長晰筛,數(shù)據(jù)速率,像素橫縱比拴袭,音視頻流數(shù)目等读第。
 * 
 *  音視頻文件信息
 */
@interface NvsAVFileInfo : NSObject

5. NvsTimelineVideoFx

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

6. NvsTimeline

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

     注:時間線上時間單位都為微秒杆融。
 */
@interface NvsTimeline : NvsObject

7. NvsVideoFrameReceiver

/*!
 *  \brief 視頻幀接收器
 * 
 *  對時間線進行定位或者播放的操作所渲染出來的視頻幀會通過。
 */
@interface NvsVideoFrameReceiver : NSObject

8. NvsTimelineAnimatedSticker

/*!
    \brief 時間線動畫貼紙霜运,帶有動畫效果的貼紙
   
    時間線動畫貼紙是視頻編輯時使用的一種美化特效脾歇,疊加在視頻上會產(chǎn)生一些特殊效果。編輯視頻時淘捡,可通過時間線(Time Line)來添加和移除動畫貼紙介劫。如果添加的貼紙位置不合理,還可進行調(diào)整移動案淋。
 */
@interface NvsTimelineAnimatedSticker : NvsFx

9. NvsTrack

/*!
     \brief 軌道,容納片段的實體
 
     軌道可視作片段的集合,分為音頻軌道(Audio Track)和視頻軌道(Video Track)险绘。創(chuàng)建時間線實例后踢京,可添加或移除多條軌道。在每一條軌道上宦棺,可以添加多個要編輯的視音頻片段瓣距,并對片段進行音量設(shè)置,也可以進行移除和位置移動代咸。
 */
@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 單精度浮點數(shù) \endif
    NvsAudSmpFmt_DBL,      //!< \if ENGLISH double precision float \else 雙精度浮點數(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 單精度浮點數(shù) 平面格式\endif
    NvsAudSmpFmt_DBLP,     //!< \if ENGLISH double precision float,olanar \else 雙精度浮點數(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 音頻軌道逻杖,音頻片段的集合
 *
 *  音頻軌道是容納音頻片段的實體。每條音頻軌道可以添加或者移除多個音頻片段思瘟。一個音頻片段播放到另一個音頻片段時荸百,需要進行音頻轉(zhuǎn)場設(shè)置,以便過渡銜接滨攻。
 * 
 *  注:對于音頻軌道的一系列接口及所其屬參數(shù)含義,請參照視頻軌道[NvsVideoTrack] (@ref NvsVideoTrack)的對應(yīng)接口來對照理解够话。
 */
@interface NvsAudioTrack : NvsTrack

12. NvsVideoTrack

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

    視頻軌道是容納視頻片段的實體光绕,可以添加女嘲、插入、刪移多個視頻片段诞帐。視頻軌道隨著片段的增加不斷延展欣尼,而片段與片段之間可進行視頻轉(zhuǎn)場設(shè)置。
    視頻軌道添加的視頻片段源可以是視頻或圖片景埃。如果片段源選擇的是圖片媒至,則圖片分辨率不能高于1920 * 1080顶别,否則在Live Window 上渲染不出來。

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

13. NvsTimelineCaption

/*!
    \brief 時間線字幕

    時間線字幕是視頻上疊加的自定義文字驯绎。編輯視頻時,可以添加和移除時間線字幕谋旦,并對字幕位置進行調(diào)整處理剩失。添加完字幕,還可以進行樣式設(shè)置册着,包括字體大小拴孤,顏色,陰影甲捏,描邊等演熟。
 */
@interface NvsTimelineCaption : NvsFx

14. NvsAudioClip

/*!
 *  \brief 音頻片段,對音頻文件的描述
 *   
 *  音頻片段既可以修改其裁剪入點和出點司顿,播放速度等芒粹,還可以添加、插入大溜、移除以及獲取多個音頻特效(Audio Fx)化漆。
 */
@interface NvsAudioClip: NvsClip

15. NvsAudioFx

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

16. NvsCaptureVideoFx

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

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

17. NvsFx

/*!
 *  \brief 特效
 * 
 *   特效類是視頻特效(Video Fx),音頻特效(Audio Fx)葵诈,音頻轉(zhuǎn)場(Audio Transition)裸弦,視頻轉(zhuǎn)場(Video Transition)等不同類型特效的基類。在SDK框架中作喘,特效是很關(guān)鍵的一部分理疙,
 *  派生自NvsFx類的每種不同類型的特效,或通過片段實例泞坦,或時間線實例窖贤,或軌道實例來添加,移除和獲取。同時赃梧,特效類中提供了不同的API接口來設(shè)置和獲取特效參數(shù)類型滤蝠。
 */
@interface NvsFx : NvsObject

18. NvsVideoFx

/*!
    \brief 視頻特效

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

19. NvsVideoFrameRetriever

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

20. NvsAudioTransition

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

21. NvsClip

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

22. NvsFxDescription

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

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

23. NvsLiveWindow

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

24. NvsObject

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

25. NvsThumbnailSequenceView

/*!
    \brief 縮略圖序列

    縮略圖序列仅财,即視頻按照某種程度縮放狈究,來靜態(tài)縮略顯示的序列。視頻編輯時满着,通過預(yù)覽定位視頻序列谦炒,可以設(shè)置序列的開始時間,時長风喇,縮略圖橫縱比等宁改。同時,依照縮略圖在對應(yīng)時段位置精確添加字幕和裁剪視頻魂莫。
 */
@interface NvsThumbnailSequenceView : UIView

26. NvsVideoTransition

/*!
    \brief 視頻轉(zhuǎn)場还蹲,片段間切換的特效
 
    軌道上有多個片段,轉(zhuǎn)場是從一個視頻片段播放到另一個視頻片段的銜接過渡效果耙考,而在有間隙的片段之間不能添加視頻轉(zhuǎn)場谜喊。目前支持多種視頻轉(zhuǎn)場,
    包括Fade(淡入淡出)倦始、Turning(翻轉(zhuǎn))斗遏、Swap(層疊)、Stretch In(伸展進入)鞋邑、Page Curl(卷頁)诵次、Lens Flare(鏡頭眩光)、Star(星形)枚碗、Dip To Black(閃黑)逾一、Dip To White(閃白)、
    Push To Right(右推拉)肮雨、Push To Top(上推拉)遵堵、Upper Left Into(斜推)。
    <br>每種視頻轉(zhuǎn)場都可通過視頻軌道(NvsVideoTrack)來設(shè)置和獲取怨规。默認(rèn)轉(zhuǎn)場是Fade(淡入淡出)陌宿。
 */
@interface NvsVideoTransition : NvsFx

后記

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

美的心疼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末波丰,一起剝皮案震驚了整個濱河市限番,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀舔,老刑警劉巖弥虐,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扩灯,死亡現(xiàn)場離奇詭異,居然都是意外死亡霜瘪,警方通過查閱死者的電腦和手機珠插,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颖对,“玉大人捻撑,你說我怎么就攤上這事$偷祝” “怎么了顾患?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長个唧。 經(jīng)常有香客問我江解,道長,這世上最難降的妖魔是什么徙歼? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任犁河,我火速辦了婚禮,結(jié)果婚禮上魄梯,老公的妹妹穿的比我還像新娘桨螺。我一直安慰自己,他們只是感情好酿秸,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布灭翔。 她就那樣靜靜地躺著,像睡著了一般辣苏。 火紅的嫁衣襯著肌膚如雪缠局。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天考润,我揣著相機與錄音,去河邊找鬼读处。 笑死糊治,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罚舱。 我是一名探鬼主播井辜,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼管闷!你這毒婦竟也來了粥脚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤包个,失蹤者是張志新(化名)和其女友劉穎刷允,沒想到半個月后冤留,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡树灶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年纤怒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片天通。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡泊窘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出像寒,到底是詐尸還是另有隱情烘豹,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布诺祸,位于F島的核電站携悯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏序臂。R本人自食惡果不足惜蚌卤,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奥秆。 院中可真熱鬧逊彭,春花似錦、人聲如沸构订。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悼瘾。三九已至囊榜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亥宿,已是汗流浹背卸勺。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烫扼,地道東北人曙求。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像映企,于是被迫代替她去往敵國和親悟狱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容