gpt4 book ai didi

iphone - AVAsset 和 AVAssetTrack - IOS 4.0 中的跟踪管理

转载 作者:行者123 更新时间:2023-12-03 18:41:58 25 4
gpt4 key购买 nike

IOS 4.0的新功能列表显示,AV Foundation框架具有媒体 Assets 管理、轨道管理、媒体编辑和媒体项元数据管理。他们这是什么意思?

  1. 使用轨道管理和媒体 Assets 管理,我可以从照片应用访问媒体文件吗?
  2. 我可以使用 AVComposition 制作自定义合成并将其导出并将其发送到服务器吗?
  3. 我可以重命名、移动、编辑 Assets 的元数据信息吗?

我试图获取一些有关此问题的帮助/文档,但找不到任何东西..

谢谢

托尼

最佳答案

是的,您可以执行您提到的大部分操作。我认为访问手机上的媒体文件并不是那么简单。但如果您愿意,您可以从网络读取数据并将其导出到您的相机胶卷。

首先您必须导入视频或音频文件。

您需要开始的是您在自己的 View 中创建的自己的视频播放器。如果您不喜欢播放视频而只是创作内容,则可以直接不观看。

这很简单:1.创建一个可变组合:

AVMutableComposition *composition = [AVMutableComposition composition];

这将保存您的视频。现在您有一个空的组合 Assets 。从您的目录或网络添加一些文件:

NSURL* sourceMovieURL = [NSURL fileURLWithPath:moviePath];
AVURLAsset* sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];

然后将您的视频添加到您的作品中

// calculate time
CMTimeRange editRange = CMTimeRangeMake(CMTimeMake(0, 600), CMTimeMake(sourceAsset.duration.value, sourceAsset.duration.timescale));

// and add into your composition
BOOL result = [composition insertTimeRange:editRange ofAsset:sourceAsset atTime:composition.duration error:&editError];

如果您想将更多视频添加到您的作品中,您可以添加另一个 Assets 并使用您的时间范围将其再次设置到您的作品中。现在您可以使用如下代码导出您的新作品:

NSError *exportError = nil;

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality];

NSURL *exportURL = [NSURL fileURLWithPath:exportVideoPath];
exportSession.outputURL = exportURL;
exportSession.outputFileType = @"com.apple.quicktime-movie";
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusFailed:{
NSLog (@"FAIL");
[self performSelectorOnMainThread:@selector (doPostExportFailed:)
withObject:nil
waitUntilDone:NO];
break;
}
case AVAssetExportSessionStatusCompleted: {
NSLog (@"SUCCESS");
[self performSelectorOnMainThread:@selector (doPostExportSuccess:)
withObject:nil
waitUntilDone:NO];
break;
}
};
}];

如果您想播放视频,请使用如下代码(我假设您有权访问您的 View ):

// create an AVPlayer with your composition
AVPlayer* mp = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:composition]];

// Add the player to your UserInterface
// Create a PlayerLayer:
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:mp];

// integrate it to your view. Here you can customize your player (Fullscreen, or a small preview)
[[self view].layer insertSublayer:playerLayer atIndex:0];
playerLayer.frame = [self view].layer.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

最后播放您的视频:

[mp play];

导出到相机胶卷:

NSString* exportVideoPath = >>your local path to your exported file<<
UISaveVideoAtPathToSavedPhotosAlbum (exportVideoPath, self, @selector(video:didFinishSavingWithError: contextInfo:), nil);

并在完成时收到通知(您的回调方法)

- (void) video: (NSString *) videoPath didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
// Error is nil, if succeeded
NSLog(@"Finished saving video with error: %@", error);
// do postprocessing here, i.e. notifications or UI stuff

}

不幸的是,我还没有找到任何“合法”的解决方案来从相机胶卷中读取。

一个非常好的入门资源是:

http://www.subfurther.com/blog/?cat=51

下载 VTM_Player.zip、VTM_AVRecPlay.zip 或 VTM_AVEditor.zip 以获得对此的非常好的介绍

关于iphone - AVAsset 和 AVAssetTrack - IOS 4.0 中的跟踪管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com