版本記錄
| 版本號(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ù)~~~

美的心疼