我正在使用只使用音频的AVFoundation,也就是说,没有视频,并试图将几个AVComposition连接在一起,一个接一个,最终得到一个AVComposition。
示例:只有两个AVComposition。通过创建一个AVPlayer,每个都可以正常运行:
_player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:comp]]其中comp是AVMutableComposition的一个实例。(顺便说一句,值得注意的是,_player必须是一个ivar,否则ARC在它播放之前过早地释放它-花了一段时间来追踪它。)
这是很好的执行
[_player play]导致comp成功播放。
但是,这会失败:
(self.segments是一个包含元素的NSMutableArray,这些元素是AVMutableComposition的自定义子类)
AVMutableComposition *comp = [AVMutableComposition composition];
NSError *err;
for (AVMutableComposition* c in self.segments) {
[comp insertTimeRange:CMTimeRangeMake(kCMTimeZero, segment.duration)
ofAsset:segment atTime:comp.duration error:&err];
DLog(@"Error was %@", segment, err);
}在执行此代码时,对于self.segments的每个元素,在调用insertTimeRange::::方法时都会出现以下错误:
Error was Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not
be completed" UserInfo=0x14e8e7f0 {NSLocalizedDescription=The operation could not be
completed, NSUnderlyingError=0x14d7f580 "The operation couldn’t be completed. (OSStatus
error -12780.)", NSLocalizedFailureReason=An unknown error occurred (-12780)}我找不到任何关于这个错误所表明的信息--似乎只是一个包罗万象的东西--我也看不出我做错了什么。有什么想法吗?
发布于 2021-01-16 00:26:13
此代码错误对应于AVErrorUnknown = -11800,因此没有太多关于问题原因的解释。https://developer.apple.com/documentation/avfoundation/averror/averrorunknown?language=objc
为了防止这对其他人有帮助,我会在这里指出我的理由。
Context
在我的例子中,我在尝试连接到Airplay时出现错误。
导致
原因是我有两个AVPlayer实例。一个用于电影类型的视频,另一个用于预览。然后当我试着扮演这部电影的时候。AVFoundation被弄糊涂了,它传递了这个错误。
解决方案
在moviePlayback实例上:
allowsExternalPlayback = true
usesExternalPlaybackWhileExternalScreenIsActive = true在default实例上:
allowsExternalPlayback = false
usesExternalPlaybackWhileExternalScreenIsActive = false发布于 2015-10-26 14:05:54
在我的例子中,CMTimeRange是错误的,持续时间==为0。这是因为CMTimeMake会将输入转换为整数,并且会失去精度。
为了解决这个问题,我使用了更大的时间尺度。
问题代码:
CMTime startTime = CMTimeMake(timeStamp.begin, 1);
CMTime duration = CMTimeMake(timeStamp.duration, 1);正确的代码:
CMTime startTime = CMTimeMake(timeStamp.begin*1000, 1000);
CMTime duration = CMTimeMake(timeStamp.duration*1000, 1000);然后它就可以正常工作了。
[videoTrack insertTimeRange:CMTimeRangeMake(startTime, duration) ofTrack:videoTracks.firstObject atTime:kCMTimeZero error:&error];发布于 2018-03-16 09:16:20
确保segment.asset没有发布。因此,如果条件segment.asset == nil为真,则后面的媒体数据将消失,因此插入操作失败。
引用:https://www.jianshu.com/p/089f6691dbdb (在文章的底部)
https://stackoverflow.com/questions/22211302
复制相似问题