iphone - 将元数据写入 ALAsset

标签 iphone video metadata alasset assetslibrary

我正在为 iPhone 开发视频应用程序。我正在使用 AssetsLibrary 框架录制视频并将其保存到 iPhone 相机胶卷。我使用的 API 是:

- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL 
  completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock

有没有办法使用 ALAsset 将视频的自定义元数据保存到相机胶卷。如果使用 AssetsLibrary 框架无法做到这一点,是否可以使用其他方法来完成。基本上,我有兴趣将有关我的应用程序的详细信息写为视频元数据的一部分。

最佳答案

自 iOS 4+ 以来,有了 AVFoundation 框架,它还允许您从/向视频文件读取/写入元数据。使用此选项时,您只能使用特定的键来添加元数据,但我认为这不会成为问题。

这是一个小示例,您可以使用它为您的视频添加标题(但是,在这个示例中,所有旧的元数据都被删除):

    // prepare metadata (add title "title")
NSMutableArray *metadata = [NSMutableArray array];
AVMutableMetadataItem *mi = [AVMutableMetadataItem metadataItem];
mi.key = AVMetadataCommonKeyTitle;
mi.keySpace = AVMetadataKeySpaceCommon;
mi.value = @"title";
[metadata addObject:mi];

    // prepare video asset (SOME_URL can be an ALAsset url)
AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:SOME_URL options:nil];

    // prepare to export, without transcoding if possible
AVAssetExportSession *_videoExportSession = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetPassthrough];
[videoAsset release];
_videoExportSession.outputURL = [NSURL fileURLWithPath:_outputPath];
_videoExportSession.outputFileType = AVFileTypeQuickTimeMovie;
_videoExportSession.metadata = metadata;
[_videoExportSession exportAsynchronouslyWithCompletionHandler:^{
    switch ([_videoExportSession status]) { 
        case AVAssetExportSessionStatusFailed:
            NSLog(@"Export failed: %@", [[_videoExportSession error] localizedDescription]);                
        case AVAssetExportSessionStatusCancelled:
            NSLog(@"Export canceled");
        default:
            break;
    }
    [_videoExportSession release]; _videoExportSession = nil;
    [self finishExport];  //in finishExport you can for example call writeVideoAtPathToSavedPhotosAlbum:completionBlock: to save the video from _videoExportSession.outputURL
}];

这也显示了一些示例:avmetadataeditor

关于iphone - 将元数据写入 ALAsset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753740/

相关文章:

image - 将图像/视频存储到 Hadoop HDFS 中

javascript - 音频对象持续时间不断变化?

java - Java 中的 BasicFileAttributes 与 BasicFileAttributeView

ios - 从 iOS 上的两个 jpeg 加载 RGBA 图像 - OpenGL ES 2.0

c++ - 裁剪具有定义的宽度、长度和像素位置的视频文件

iphone - 从UIImagePickerController传递图像数据以进行后台处理

iphone - 向 MP4 视频添加效果?

php - 在 WooCommerce 快速订单预览中显示自定义字段

iphone - 即使主线程似乎运行良好,UIProgressView 也不会更新

iphone - Objective-C 方法评论