5

iPhone用の動画アプリを開発しています。ビデオを録画し、AssetsLibrary フレームワークを使用して iPhone カメラ ロールに保存しています。私が使用したAPIは次のとおりです。

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

ALAsset を使用してビデオのカスタム メタデータをカメラ ロールに保存する方法はありますか。AssetsLibrary フレームワークを使用してこれが不可能な場合は、他の方法を使用してこれを行うことができます。基本的に、動画のメタデータの一部としてアプリの詳細を書きたいと思っています。

4

3 に答える 3

1

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
}];

これもいくつかの例を示しています

于 2012-06-15T09:49:16.817 に答える
0

videoWriter でメタデータを設定することもできます =>

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

videoWriter.metadata = metadata;

ここで、videoWriter は AVAssetWriter タイプです

そして、録音を停止すると、=>が呼び出されます

[videoWriter endSessionAtSourceTime:CMTimeMake(durationInMs, 1000)];
[videoWriter finishWritingWithCompletionHandler:^() {
    ALAssetsLibrary *assetsLib = [[ALAssetsLibrary alloc] init];
    [assetsLib writeVideoAtPathToSavedPhotosAlbum:videoUrl
   completionBlock:^(NSURL* assetURL, NSError* error) {
         if (error != nil) {
             NSLog( @"Video not saved");
         }
     }];
 }];
于 2014-06-16T18:57:01.053 に答える
0

これを行うための公式にサポートされている方法はありません。

できること: 保存したい情報を別のデータベースに保存します。ただし、そのような情報はアプリでしか利用できないという欠点があります。

正確に何を達成しようとしていますか?

于 2011-05-08T07:50:14.560 に答える