首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将AVComposition的insertTimeRange连接到AVMutableComposition时出现错误-11800

尝试将AVComposition的insertTimeRange连接到AVMutableComposition时出现错误-11800
EN

Stack Overflow用户
提问于 2014-03-06 07:02:20
回答 3查看 4.7K关注 0票数 6

我正在使用只使用音频的AVFoundation,也就是说,没有视频,并试图将几个AVComposition连接在一起,一个接一个,最终得到一个AVComposition

示例:只有两个AVComposition。通过创建一个AVPlayer,每个都可以正常运行:

代码语言:javascript
复制
_player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:comp]]

其中compAVMutableComposition的一个实例。(顺便说一句,值得注意的是,_player必须是一个ivar,否则ARC在它播放之前过早地释放它-花了一段时间来追踪它。)

这是很好的执行

代码语言:javascript
复制
[_player play]

导致comp成功播放。

但是,这会失败:

(self.segments是一个包含元素的NSMutableArray,这些元素是AVMutableComposition的自定义子类)

代码语言:javascript
复制
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::::方法时都会出现以下错误:

代码语言:javascript
复制
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)}

我找不到任何关于这个错误所表明的信息--似乎只是一个包罗万象的东西--我也看不出我做错了什么。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2021-01-16 00:26:13

此代码错误对应于AVErrorUnknown = -11800,因此没有太多关于问题原因的解释。https://developer.apple.com/documentation/avfoundation/averror/averrorunknown?language=objc

为了防止这对其他人有帮助,我会在这里指出我的理由。

Context

在我的例子中,我在尝试连接到Airplay时出现错误。

导致

原因是我有两个AVPlayer实例。一个用于电影类型的视频,另一个用于预览。然后当我试着扮演这部电影的时候。AVFoundation被弄糊涂了,它传递了这个错误。

解决方案

moviePlayback实例上:

代码语言:javascript
复制
allowsExternalPlayback = true
usesExternalPlaybackWhileExternalScreenIsActive = true

default实例上:

代码语言:javascript
复制
allowsExternalPlayback = false
usesExternalPlaybackWhileExternalScreenIsActive = false
票数 2
EN

Stack Overflow用户

发布于 2015-10-26 14:05:54

在我的例子中,CMTimeRange是错误的,持续时间==为0。这是因为CMTimeMake会将输入转换为整数,并且会失去精度。

为了解决这个问题,我使用了更大的时间尺度。

问题代码:

代码语言:javascript
复制
CMTime startTime = CMTimeMake(timeStamp.begin, 1);
CMTime duration = CMTimeMake(timeStamp.duration, 1);

正确的代码:

代码语言:javascript
复制
CMTime startTime = CMTimeMake(timeStamp.begin*1000, 1000);
CMTime duration = CMTimeMake(timeStamp.duration*1000, 1000);

然后它就可以正常工作了。

代码语言:javascript
复制
[videoTrack insertTimeRange:CMTimeRangeMake(startTime, duration) ofTrack:videoTracks.firstObject atTime:kCMTimeZero error:&error];
票数 1
EN

Stack Overflow用户

发布于 2018-03-16 09:16:20

确保segment.asset没有发布。因此,如果条件segment.asset == nil为真,则后面的媒体数据将消失,因此插入操作失败。

引用:https://www.jianshu.com/p/089f6691dbdb (在文章的底部)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22211302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档