- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经从 AVAssets 构建了一个 AVMutableComposition 和 VideoComposition 并且能够播放它。我也可以使用 AVAssetExportSession 导出它,但是 AVAssetExportSession 不提供对设置的太多控制,所以我使用 AVAssetReader/AVAssetWriter 导出它,但不幸的是我遇到了一个我不理解的错误并且只写了部分输出文件。
这是我目前的代码。我已经省略了编写器和尽可能多的其他内容(包括一些错误检查),我认为这些内容与使代码更易于阅读无关,因为它很多。请注意,我还没有处理音轨——我正在尝试一次一个步骤地执行此操作,但也许这是我的问题?
变量 asset
是 AVMutableComposition。
// ------- reader
_assetReader = [AVAssetReader assetReaderWithAsset:asset error:error];
_assetReader.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration);
_duration = asset.duration;
// --- video reader
NSArray *videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
NSDictionary *videoOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
_assetReaderOutput = [AVAssetReaderVideoCompositionOutput assetReaderVideoCompositionOutputWithVideoTracks:videoTracks
videoSettings:videoOptions];
((AVAssetReaderVideoCompositionOutput *)_assetReaderOutput).videoComposition = composition;
[_assetReader addOutput:_assetReaderOutput];
// -- leaving out the export settings and construction
// of the assetWriter since that doesn't seem to be the issue
// -- here's the actual export:
[self.assetWriter startWriting];
[self.assetWriter startSessionAtSourceTime:kCMTimeZero];
[self.assetReader startReading];
CMSampleBufferRef buffer;
while ( [self.assetReader status]==AVAssetReaderStatusReading )
{
if(![self.assetWriterInput isReadyForMoreMediaData])
continue;
buffer = [self.assetReaderOutput copyNextSampleBuffer];
NSLog(@"READING");
if(buffer)
[self.assetWriterInput appendSampleBuffer:buffer];
NSLog(@"WRITTING...");
}
if( self.assetReader.status == AVAssetReaderStatusFailed ) {
NSLog( @"%@", self.assetReader.error ); //<--------- I get a problem here
}
//Finish the session:
[self.assetWriterInput markAsFinished];
[self.assetWriter finishWriting];
NSLog(@"Write Ended");
问题是循环在短时间后退出,我得到这个输出:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x17f1dfa0 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x191617f0 "The operation couldn’t be completed. (OSStatus error -308.)", NSLocalizedFailureReason=An unknown error occurred (-308)}
最佳答案
似乎我遵循了一些错误的示例代码,而不是苹果提供的正确示例代码,关于如何执行此操作非常清楚,即使非常冗长:
虽然我已经完全重写了我的代码,但我认为我遇到的具体问题是没有在从 [self.assetReaderOutput copyNextSampleBuffer] 返回的 CMSampleBufferRef 上调用 CFRelease。您需要在循环内执行此操作。
关于ios - 使用 AVAssetReaderVideoCompositionOutput 导出进行到一半,然后以 AVFoundationErrorDomain Code=-11800 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498769/
我正在使用来自 CloudFront 的流式 URL。 示例网址: https://d14nt81hc5bide.cloudfront.net/qyYj1PcUkYg2ALDfzAdhZAmb 在 A
我在真实设备中的 ios 13.3 中遇到了同样的问题,它在 ios 13.2 模拟器中工作,但给出了以下错误。 Error Domain=AVFoundationErrorDomain Code=-
尝试将视频与 AVFoundation 合并时,我发现了一个奇怪的行为。我很确定我在某个地方犯了错误,但我太盲目了,看不到它。我的目标只是合并 4 个视频(稍后它们之间会有交叉淡入淡出过渡)。每次我尝
我正在开发一个应用程序,其中使用来自云服务的歌曲通过 AVPlayer 播放音乐。一切正常,大部分文件都可以正常播放。 我最近收到来自特定文件的错误消息以及来自 AVPlayer 的消息,我无法确定这
它一直给我错误: Error Domain=AVFoundationErrorDomain Code=-11814 "Cannot Record" 我不确定是什么问题?我正在尝试在拍摄照片后计数器达到
我目前正在尝试实现一项服务,以在 tvOS 应用程序上使用 FairPlay 流处理 DRM。这是我的工作流程: 我将应用程序证书作为数据获取 从这个证书我得到了 SPC 数据,使用: resourc
我正在实现 Apple Fireplay DRM 以向设备传送加密内容。我能够成功加载证书,但是当我尝试从 AVAssetResourceLoadingRequest 获取 SPC 数据时,出现此错误
编辑:为了让有兴趣检查这个问题的人更容易,我在 this github repository. 添加了一个演示项目。 问题 我见过几个有相同错误的问题,但那里找到的解决方案都没有帮助我。我想试试我的运
我已经从 AVAssets 构建了一个 AVMutableComposition 和 VideoComposition 并且能够播放它。我也可以使用 AVAssetExportSession 导出它,
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
我正在使用 Swift 开发基于视频的应用程序。我在哪里导出带有水印 Logo 和淡入淡出效果的视频剪辑。这是我的代码: func watermark(video videoAsset:AVAsset
我是一名优秀的程序员,十分优秀!