Skip to content

Commit

Permalink
feat(VideoEditor): add video editor plugin. (#457)
Browse files Browse the repository at this point in the history
Closes #316
  • Loading branch information
mattlewis92 authored and ihadeed committed Aug 19, 2016
1 parent 4a0f082 commit 7a53013
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -254,6 +256,7 @@ window['IonicNative'] = {
Transfer: Transfer,
TextToSpeech: TextToSpeech,
TwitterConnect: TwitterConnect,
VideoEditor: VideoEditor,
VideoPlayer: VideoPlayer,
Vibration: Vibration,
WebIntent: WebIntent,
Expand Down
200 changes: 200 additions & 0 deletions src/plugins/video-editor.ts
Original file line number Diff line number Diff line change
@@ -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; }

}

0 comments on commit 7a53013

Please sign in to comment.