2012-01-27 6 views
1

Comment puis-je faire le processus de filtrage de la vidéo enregistrée dans la photothèque dans iOS?Filtrage vidéo enregistré sur iOS

Je suis URL de vidéos dans la bibliothèque en utilisant le framework AssetsLibrary,

alors, fait un aperçu de la vidéo.

La prochaine étape, je veux faire un processus de filtrage pour la vidéo en utilisant CIFilter.

En cas de problème en temps réel, j'ai fait un traitement de filtre vidéo en utilisant AVCaptureVideoDataOutputSampleBufferDelegate.

Mais dans le cas de la vidéo enregistrée, je ne sais pas comment faire un processus de filtrage.

Est-ce que j'utilise AVAsset? Si je dois l'utiliser, comment puis-je le filtrer? et comment l'enregistrer?

toujours merci.

+1

Idk, mais je travaille sur ce maintenant trop ... vous permettra de savoir ce que je trouve si je comprendre! –

+0

Merci mon pote. Vérifiez ce cadre !! http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework –

+0

Ouais, c'est ce que j'ai utilisé aussi ... j'ai dû ajouter quelques choses, mais c'est la beauté de github ^^ –

Répondre

5

J'espère que cela vous aidera

AVAsset *theAVAsset = [[AVURLAsset alloc] initWithURL:mNormalVideoURL options:nil]; 
     NSError *error = nil; 
     float width = theAVAsset.naturalSize.width; 
     float height = theAVAsset.naturalSize.height; 
     AVAssetReader *mAssetReader = [[AVAssetReader alloc] initWithAsset:theAVAsset error:&error]; 
     [theAVAsset release]; 




    NSArray *videoTracks = [theAVAsset tracksWithMediaType:AVMediaTypeVideo]; 
    AVAssetTrack *videoTrack = [videoTracks objectAtIndex:0]; 
    mPrefferdTransform = [videoTrack preferredTransform]; 


    NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]; 
    AVAssetReaderTrackOutput* mAssetReaderOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:videoTrack outputSettings:options]; 

    [mAssetReader addOutput:mAssetReaderOutput]; 
    [mAssetReaderOutput release]; 


    CMSampleBufferRef buffer = NULL; 
    //CMSampleBufferRef buffer = NULL; 
    while ([mAssetReader status]==AVAssetReaderStatusReading){ 
      buffer = [mAssetReaderOutput copyNextSampleBuffer];//read next image. 
} 
+0

C'est assez bon pour moi. Je vous remercie –

0

Vous devriez jeter un oeil à CVImageBufferRef pixBuf = CMSampleBufferGetImageBuffer (sbuf) alors vous pouvez avoir la première adresse du pointeur d'image, donc vous pouvez ajouter un filtre à pixBuf, mais je trouve que la performance n'est pas bonne, Si vous avez de nouvelles idée, nous pouvons en discuter plus loin.

+0

J'ai trouvé le framework GPUImage et ça marche magnifiquement. Visitez ce lien http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework –