Giter Site home page Giter Site logo

quanhua-guan / ktvvideoprocess Goto Github PK

View Code? Open in Web Editor NEW

This project forked from changbadevs/ktvvideoprocess

0.0 2.0 0.0 246 KB

A High-Performance video effects processing framework from Changba iOS team.

License: MIT License

Objective-C 99.54% Ruby 0.46%

ktvvideoprocess's Introduction

KTVVideoProcess

KTVVideoProcess is a High-Performance video effects processing framework. It's base on OpenGL ES, support asynchronous and multithread processing.

Flow Chart

KTVVideoProcess-Flow-Chart

Installation

Installation with CocoaPods

To integrate KTVVideoProcess into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'KTVVideoProcess', '~> 1.0.0'

Run pod install

Installation with Carthage

To integrate KTVVideoProcess into your Xcode project using Carthage, specify it in your Cartfile:

github "ChangbaDevs/KTVVideoProcess" ~> 1.0.0

Run carthage update to build the framework and drag the built KTVVideoProcess.framework into your Xcode project.

Usage

  • The Complete process needs three nodes: Source/Pipeline/Output.

Source

  • The responsibility of the source is the input data, like camera or media file.
  • You can create a camera source like following:
self.captureSession = [[KTVVPCaptureSession alloc] init];
self.captureSession.pipeline = self.pipeline;
if (needAudio) {
    self.captureSession.audioEnable = YES;
    self.captureSession.audioOutput = frameWriter;
}
[self.captureSession start];

Pipeline

  • The pipeline is the real processor. It contains multiple filters inside.
  • There are serial and concurrent two pipelines. The serial pipeline run on a separate thread, and it's only can process one task at the same time. The concurrent contains multiple serial pipeline, this means that it's can process multiple tasks at the same time. But when using concurrent pipeline, the timestamp of the output frame may not be continuous.
  • You can create a serial pipeline like following:
NSArray <Class> * filterClasses = @[[KTVVPRGBFilter class], [KTVVPExposureFilter class], [KTVVPBrightnessFilter class], [KTVVPBlackAndWhiteFilter class], [KTVVPTransformFilter class]];
self.pipeline = [[KTVVPSerialPipeline alloc] initWithContext:self.context filterClasses:filterClasses];
__weak typeof(self) weakSelf = self;
[self.pipeline setFilterConfigurationCallback:^(__kindof KTVVPFilter * filter, NSInteger index) {
    if ([filter isKindOfClass:[KTVVPRGBFilter class]]) {
        weakSelf.RGBFilter = filter;
        weakSelf.RGBFilter.enable = NO;
        weakSelf.RGBFilter.red = 1.0;
        weakSelf.RGBFilter.green = 0.6;
        weakSelf.RGBFilter.blue = 1.0;
    } else if ([filter isKindOfClass:[KTVVPExposureFilter class]]) {
        weakSelf.exposureFilter = filter;
        weakSelf.exposureFilter.enable = NO;
        weakSelf.exposureFilter.exposure = 0.5;
    } else if ([filter isKindOfClass:[KTVVPBrightnessFilter class]]) {
        weakSelf.brightnessFilter = filter;
        weakSelf.brightnessFilter.enable = NO;
        weakSelf.brightnessFilter.brightness = 0.2;
    } else if ([filter isKindOfClass:[KTVVPBlackAndWhiteFilter class]]) {
        weakSelf.blackAndWhiteFilter = filter;
        weakSelf.blackAndWhiteFilter.enable = NO;
    }
}];
[self.pipeline setupIfNeeded];

Output

  • It's used to receive the results of pipeline.
  • You can create a preview view or file writer like following:
// Preview View
self.frameView = [[KTVVPFrameView alloc] initWithContext:self.context];
self.frameView.frame = self.view.bounds;
[self.view addSubview:self.frameView];
[self.pipeline addOutput:self.frameView];

// File Writer
NSString * filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"KTVVideoProcess-temp.mov"];
self.frameWriter = [[KTVVPFrameWriter alloc] init];
self.frameWriter.outputFileURL = [NSURL fileURLWithPath:filePath];
self.frameWriter.videoOutputSize = KTVVPSizeMake(720, 1280);
self.frameWriter.videoEncodeDelayInterval = 0.0f;
if (needAudio) {
    self.frameWriter.audioEnable = YES;
}
[self.frameWriter setStartCallback:^(BOOL success) {
    NSLog(@"Record Started...");
}];
[self.frameWriter setFinishedCallback:^(BOOL success) {
    NSLog(@"Record Finished...");
}];
[self.frameWriter setCancelCallback:^(BOOL success) {
    NSLog(@"Record Canceled...");
}];
[self.frameWriter start];
if (needAudio) {
    self.captureSession.audioOutput = self.frameWriter;
}
[self.pipeline addOutput:self.frameWriter];

Export

  • It's used to process existing video.
  • You can create a export session like following:
KTVVPExportSession * exportSession = [[KTVVPExportSession alloc] init];
exportSession.sourceURL = inputURL;
exportSession.destinationURL = outputURL;
exportSession.pipeline = pipeline;
[exportSession setCompletionCallback:^(NSURL * destinationURL, NSError * error) {
    NSLog(@"KTVVPExportSession Finished");
}];
[exportSession start];

License

KTVVideoProcess is released under the MIT license.

Feedback

ktvvideoprocess's People

Contributors

libobjc avatar

Watchers

James Cloos avatar Quanhua Guan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.