作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
类AVMutableCompositionTrack的insertTimeRange:ofTrack:atTime:error:在iPhone(但不是模拟器)上返回NO且错误“无法完成操作”。错误消息没有帮助,我很想找出错误的原因,更不用说解决方法了。任何帮助,将不胜感激。
在下面的示例代码中,我要做的就是尝试将音频剪辑添加到AVMutableCompositionTrack。这是代码中发生的事情:
@interface MyAudioPlayer()
@property (strong, nonatomic) AVMutableComposition *composition;
@property (strong, nonatomic) AVMutableCompositionTrack *compositionTrack;
@end
@implementation MyAudioPlayer
- (id) init
{
self = [super init];
if (self != nil) {
self.composition = [AVMutableComposition composition];
self.compositionTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
}
return self;
}
// Add the phrase into compositionAudioTrack at the given time.
- (void) addPhrase:(NSString *)phrase atTime:(CMTime)atTime
{
// Add the phrase to the audio.
AVAssetTrack *audioClip = [self audioClipWithName:phrase ofType:@"mp3"];
// Add the phrase to the audio track.
[self addAudioClip:audioClip atTime];
}
// Add the given audio clip to the composed audio at the given time.
- (void) addAudioClip:(AVAssetTrack *)audioClip atTime:(CMTime)atTime
{
NSError *error = [[NSError alloc] init];
CMTimeRange audioClipRange = CMTimeRangeMake(kCMTimeZero, audioClip.timeRange.duration);
BOOL success = [self.compositionTrack insertTimeRange:audioClipRange ofTrack:audioClip atTime:atTime error:&error];
NSLog(@"insertTimeRange atTime=%.1f range=(%.1f, %.1f) compositionTrack=%@\n", CMTimeGetSeconds(atTime), CMTimeGetSeconds(audioClipRange.start), CMTimeGetSeconds(audioClipRange.duration), self.compositionTrack);
if (!success) {
NSLog(@"----------ERROR! %@", error);
}
}
// Return an audio clip with the given name and type.
- (AVAssetTrack *) audioClipWithName:(NSString *)name ofType:(NSString *)type
{
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:name ofType:type];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];
AVAsset *avAsset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
AVAssetTrack *audioClip = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
return audioClip;
}
@end
最佳答案
你的问题在于
- (AVAssetTrack *) audioClipWithName:(NSString *)name ofType:(NSString *)type;
AVAsset
超出范围并被释放,从而使轨道处于不良状态。
AVAsset
,直到调用
insertTimeRange
为止。实际上,这意味着您应该一起传递
AVAsset
及其
AVAssetTrack
。
关于ios - insertTimeRange:ofTrack:atTime:error:(类AVMutableCompositionTrack)在iPhone上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39443484/
我正在尝试将多个音频文件与多个剪辑合并。我已成功添加多个视频,但我无法添加多个音频文件。我尝试了以下方式并收到错误“__NSArrayM insertObject:atIndex:]:对象不能为零”。
类AVMutableCompositionTrack的insertTimeRange:ofTrack:atTime:error:在iPhone(但不是模拟器)上返回NO且错误“无法完成操作”。错误消息
首先我必须说我喜欢这个论坛,它帮助了我很多时间。我有一个问题,但我在任何地方都找不到答案,所以这是我在这里的第一个问题。 我的问题是: 我有一个由 AVPlayerItem 表示的视频,用户可以使用将
我是一名优秀的程序员,十分优秀!