AVAssetWriter获取原始字节会导致设备上的视频文件损坏(在模拟器上可以正常工作)
创始人
2024-11-12 20:30:17
0次

当使用AVAssetWriter获取原始字节时,需要确保数据的正确性和完整性。这个问题可能是由于在写入时丢失了某些数据或指针错误引起的。因此,您可以在开始写入前打印一些调试信息以查找错误。

以下是示例代码,用于演示如何使用AVAssetWriter以安全的方式获取原始字节数据:

// 初始化写入器
AVAssetWriter *writer = [[AVAssetWriter alloc] initWithURL:fileURL fileType:AVFileTypeMPEG4 error:&error];

// 设置输出格式
NSDictionary *outputSettings = @{AVVideoCodecKey: AVVideoCodecTypeH264,
                                 AVVideoWidthKey: @(1920),
                                 AVVideoHeightKey: @(1080)};
AVAssetWriterInput *writerInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:outputSettings];
[writer addInput:writerInput];

// 初始化编码器
NSDictionary *sourcePixelBufferAttributesDictionary = @{(NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)};
AVAssetWriterInputPixelBufferAdaptor *adaptor = [[AVAssetWriterInputPixelBufferAdaptor alloc] initWithAssetWriterInput:writerInput sourcePixelBufferAttributes:sourcePixelBufferAttributesDictionary];

// 开始写入
[writer startWriting];
[writer startSessionAtSourceTime:kCMTimeZero];

// 获取原始字节
UInt32 dataLength = 0;
void *outputBytes = nil;
CGImageRef image = [UIImage imageNamed:@"test.png"].CGImage;
CGFloat width = CGImageGetWidth(image);
CGFloat height = CGImageGetHeight(image);
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image));
UInt8* pixelBytes = (UInt8 *)CFDataGetBytePtr(pixelData);

// 将数据写入文件
CMSampleBufferRef sampleBuffer = NULL;
CVPixelBufferRef buffer = NULL;
CMFormatDescriptionRef format = NULL;

CMVideoFormatDescriptionCreateForImageBuffer(NULL, buffer, &format);
CMSampleTimingInfo timing = {kCMTimeInvalid, kCMTimeZero, kCMTimeInvalid};

CMBlockBufferCreateWithMemoryBlock(kCFAllocatorDefault,
                                   pixelBytes, dataLength,
                                   kCFAllocatorNull,
                                   NULL, 0, dataLength,
                                   kCMBlockBufferAlwaysCopyDataFlag,
                                   &buffer);
CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault,
                                    buffer,
                                    true,
                                    NULL,
                                    NULL,
                                    format,

相关内容

热门资讯

一分钟了解开挂攻略!丽水都莱多... 一分钟了解开挂攻略!丽水都莱多功能开挂攻略,丽水都莱都是存在有开挂攻略丽水都莱辅助器是一种具有地方特...
玩家爆料辅助器教程!小白大作战... 您好,小白大作战这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在这...
热点推荐开挂技巧!欢乐茶馆多功... 热点推荐开挂技巧!欢乐茶馆多功能开挂技巧,欢乐茶馆都是是有开挂技巧1、欢乐茶馆模拟器是什么优化,欢乐...
一分钟了解辅助器脚本!决战卡五... 您好,决战卡五星这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在这...
玩家必看科普作弊器app!乐夏... 玩家必看科普作弊器app!乐夏多功能作弊器app,乐夏一直存在有作弊器app1、全新机制【乐夏ai辅...
科技分享透视挂app!营口92... 科技分享透视挂app!营口92麻将多功能透视挂app,营口92麻将切实是有透视挂app1、营口92麻...
一分钟揭秘透视器攻略!微乐福建... 一分钟揭秘透视器攻略!微乐福建麻将多功能透视器攻略,微乐福建麻将确实真的是有透视器攻略一、微乐福建麻...
实测交流辅助app!微乐长沙麻... 实测交流辅助app!微乐长沙麻将多功能辅助app,微乐长沙麻将果然存在有辅助app1、打开软件启动之...
玩家必备教程开挂方法!良人麻将... 玩家必备教程开挂方法!良人麻将多功能开挂方法,良人麻将确实存在有开挂方法良人麻将透视方法中分为三种模...
今日公布透视挂教程!宁夏麻将多... 今日公布透视挂教程!宁夏麻将多功能透视挂教程,宁夏麻将切实有透视挂教程1、游戏颠覆性的策略玩法,独创...