feat(VideoEditor): add video editor plugin. (#457)

Closes #316
This commit is contained in:
Matt Lewis 2016-08-19 12:05:11 +01:00 committed by Ibrahim Hadeed
parent 4a0f082158
commit 7a53013819
2 changed files with 203 additions and 0 deletions

View File

@ -83,6 +83,7 @@ import { TouchID } from './plugins/touchid';
import { TextToSpeech } from './plugins/text-to-speech';
import { TwitterConnect } from './plugins/twitter-connect';
import { Vibration } from './plugins/vibration';
import { VideoEditor } from './plugins/video-editor';
import { VideoPlayer } from './plugins/video-player';
import { WebIntent } from './plugins/webintent';
import { Zip } from './plugins/zip';
@ -118,6 +119,7 @@ export * from './plugins/sms';
export * from './plugins/spinnerdialog';
export * from './plugins/toast';
export * from './plugins/twitter-connect';
export * from './plugins/video-editor';
export * from './plugins/video-player';
export {
ActionSheet,
@ -254,6 +256,7 @@ window['IonicNative'] = {
Transfer: Transfer,
TextToSpeech: TextToSpeech,
TwitterConnect: TwitterConnect,
VideoEditor: VideoEditor,
VideoPlayer: VideoPlayer,
Vibration: Vibration,
WebIntent: WebIntent,

200
src/plugins/video-editor.ts Normal file
View File

@ -0,0 +1,200 @@
import {Plugin, Cordova} from './plugin';
export interface TranscodeOptions {
/** The path to the video on the device. */
fileUri: string;
/** The file name for the transcoded video */
outputFileName: string;
/** Instructions on how to encode the video. Android is always mp4 */
outputFileType?: number;
/** Should the video be processed with quailty or speed in mind. iOS only */
optimizeForNetworkUse?: number;
/** Save the new video the library. Not supported in windows. Defaults to true */
saveToLibrary?: boolean;
/** Delete the original video. Android only. Defaults to false */
deleteInputFile?: boolean;
/** iOS only. Defaults to true */
maintainAspectRatio?: boolean;
/** Width of the result */
width?: number;
/** Height of the result */
height?: number;
/** Bitrate in bits. Defaults to 1 megabit (1000000). */
videoBitrate?: number;
/** Frames per second of the result. Android only. Defaults to 24. */
fps?: number;
/** Number of audio channels. iOS only. Defaults to 2. */
audioChannels?: number;
/** Sample rate for the audio. iOS only. Defaults to 44100*/
audioSampleRate?: number;
/** Sample rate for the audio. iOS only. Defaults to 128 kilobits (128000). */
audioBitrate?: number;
/** Not supported in windows, progress on the transcode. info will be a number from 0 to 100 */
progress?: (info: number) => void;
}
export interface TrimOptions {
/** Path to input video. */
fileUri: string;
/** Time to start trimming in seconds */
trimStart: number;
/** Time to end trimming in seconds */
trimEnd: number;
/** Output file name */
outputFileName: string;
/** Progress on transcode. info will be a number from 0 to 100 */
progress?: (info: any) => void;
}
export interface CreateThumbnailOptions {
/** The path to the video on the device */
fileUri: string;
/** The file name for the JPEG image */
outputFileName: string;
/** Location in the video to create the thumbnail (in seconds) */
atTime?: number;
/** Width of the thumbnail. */
width?: number;
/** Height of the thumbnail. */
height?: number;
/** Quality of the thumbnail (between 1 and 100). */
quality?: number;
}
export interface GetVideoInfoOptions {
/** The path to the video on the device. */
fileUri: string
}
export interface VideoInfo {
/** Width of the video in pixels. */
width: number;
/** Height of the video in pixels. */
height: number;
/** Orientation of the video. Will be either portrait or landscape. */
orientation: 'portrait' | 'landscape';
/** Duration of the video in seconds. */
duration: number;
/** Size of the video in bytes. */
size: number;
/** Bitrate of the video in bits per second. */
bitrate: number;
}
/**
* @name VideoEditor
* @description Edit videos using native device APIs
*
* @usage
* ```
* import {VideoEditor} from 'ionic-native';
*
* VideoEditor.transcodeVideo({
* fileUri: '/path/to/input.mov',
* outputFileName: 'output.mp4',
* outputFileType: VideoEditor.OutputFileType.MPEG4
* })
* .then((fileUri: string) => console.log('video transcode success', fileUri))
* .catch((error: any) => console.log('video transcode error', error));
*
* ```
*/
@Plugin({
plugin: 'cordova-plugin-video-editor',
pluginRef: 'VideoEditor',
repo: 'https://github.com/jbavari/cordova-plugin-video-editor',
platforms: ['Android', 'iOS', 'Windows Phone 8']
})
export class VideoEditor {
static OptimizeForNetworkUse = {
NO: 0,
YES: 1
};
static OutputFileType = {
M4V: 0,
MPEG4: 1,
M4A: 2,
QUICK_TIME: 3
};
/**
* Transcode a video
* @param options {TranscodeOptions} Options
* @return {Promise<string>} Returns a promise that resolves to the path of the transcoded video
*/
@Cordova({
callbackOrder: 'reverse'
})
static transcodeVideo(options: TranscodeOptions): Promise<string> { return; }
/**
* Trim a video
* @param options {TrimOptions} Options
* @return {Promise<string>} Returns a promise that resolves to the path of the trimmed video
*/
@Cordova({
callbackOrder: 'reverse',
platforms: ['iOS']
})
static trim(options: TrimOptions): Promise<string> { return; }
/**
* Create a JPEG thumbnail from a video
* @param options {CreateThumbnailOptions} Options
* @return {Promise<string>} Returns a promise that resolves to the path to the jpeg image on the device
*/
@Cordova({
callbackOrder: 'reverse'
})
static createThumbnail(options: CreateThumbnailOptions): Promise<string> { return; }
/**
* Get info on a video (width, height, orientation, duration, size, & bitrate)
* @param options {GetVideoInfoOptions} Options
* @return {Promise<VideoInfo>} Returns a promise that resolves to an object containing info on the video
*/
@Cordova({
callbackOrder: 'reverse'
})
static getVideoInfo(options: GetVideoInfoOptions): Promise<VideoInfo> { return; }
}