版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.10 |
前言
針對短視頻的上傳谣拣、編輯等功能有很多的SDK募寨,比如騰訊的SDK、七牛的SDK等森缠,這里我就說一下我用過的美攝的SDK - 1.8.0拔鹰,希望對大家有所幫助。感興趣的可以看我上面幾篇贵涵。
1. 美攝SDK的使用(一)—— 產(chǎn)品介紹
框架概覽
我們先看一下這個框架的代碼文件框架列肢。
詳細(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ù)~~~