AVAssetWriter 仅在 iOS 13 设备上有音频“爆裂声”

2024-02-13

我使用 AVCaptureSession 使用 AVAssetWriter 写入 mov 文件。同样的代码在 iOS 13 之前的设备上不会出现裂纹。在所有 iOS 13 设备上,无论 iPhone/iPad 型号如何,都会出现爆裂声。

我已将此作为错误提交给 Apple,但我担心我错过了一些简单的事情。还有其他人经历过这种情况吗?我可以更改设置的任何想法吗?

我尝试过的事情

  1. 更改了 mov -> mpeg
  2. 尝试了多种音频编解码器(特别是 AppleLossless 和 AAC)
  3. 推送到主队列而不是指定的 captureQueue
  4. 尝试了 AVCaptureMovieFileOutput,不存在裂纹。问题特定于 AVAssetWriter
  5. AVCaptureSession 始终以 44100 提供音频,因此我在 AVAssetWriter 中将其重新采样为 48000。裂纹仍然存在。

任何想法都会有帮助!

Setup

 self.session = [[AVCaptureSession alloc] init];
[self.session setSessionPreset:AVCaptureSessionPresetiFrame1280x720];

NSError *error;
AVCaptureDevice *inputVideoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceVideoInput = [AVCaptureDeviceInput deviceInputWithDevice:inputVideoDevice error:&error];
if ([self.session canAddInput:deviceVideoInput]) {
    [self.session addInput:deviceVideoInput];
}

AVCaptureDevice* mic = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput* micinput = [AVCaptureDeviceInput deviceInputWithDevice:mic error:nil];
if ([self.session canAddInput:micinput]) {
    [self.session addInput:micinput];
}

AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
output.videoSettings = @{ (NSString *)kCVPixelBufferPixelFormatTypeKey:@(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) };
[output setSampleBufferDelegate:self queue:_captureQueue];
[self.session addOutput:output];

AVCaptureAudioDataOutput* audioout = [[AVCaptureAudioDataOutput alloc] init];
[audioout setSampleBufferDelegate:self queue:_captureQueue];
[self.session addOutput:audioout];

[self setCameraPosition:NO];

[self.session startRunning];

self.preview = [AVCaptureVideoPreviewLayer layerWithSession:_session];
self.preview.videoGravity = AVLayerVideoGravityResizeAspect;

AVAssetWriter 初始化

 _path = path;
    [[NSFileManager defaultManager] removeItemAtPath:_path error:nil];
    NSURL *url = [NSURL fileURLWithPath:self.path];
    _writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeQuickTimeMovie error:nil];
    NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:
                              AVVideoCodecH264, AVVideoCodecKey,
                              [NSNumber numberWithFloat: frameSize.width], AVVideoWidthKey,
                              [NSNumber numberWithFloat: frameSize.height], AVVideoHeightKey,
                              nil];
    _videoInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:settings];
    _videoInput.expectsMediaDataInRealTime = YES;
    [_writer addInput:_videoInput];

    AudioChannelLayout acl;
    bzero( &acl, sizeof(acl));
    acl.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
    settings = [NSDictionary dictionaryWithObjectsAndKeys:
                [ NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                [ NSNumber numberWithInt:(int)channels], AVNumberOfChannelsKey,
                [ NSNumber numberWithFloat:sampleRate], AVSampleRateKey,
                [ NSNumber numberWithInt: 64000 ], AVEncoderBitRateKey,
                nil];

    _audioInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:settings];
    _audioInput.expectsMediaDataInRealTime = YES;
    [_writer addInput:_audioInput];

    [_writer startWriting];

更新:: iPhone 11+ 设备没有爆裂声,似乎是他们在底层使用编解码器进行了更改,导致“旧”设备出现问题。 我已向 Apple 提交了错误并使用了技术支持。技术支持已证实 iPhone 11 没有问题,而较旧的设备则存在问题。 对错误单的响应为零。

如果您可以在可预见的将来远离 AVAssetWriter。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVAssetWriter 仅在 iOS 13 设备上有音频“爆裂声” 的相关文章

  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • CALayer 抗锯齿不如 UIView 抗锯齿

    我一直在尝试使用 CALayer 制作圆形绘图的动画 一切都运行良好 但问题是 绘制的圆不够抗锯齿 它的边界有点太粗糙 或者如果使用光栅化则模糊 抗锯齿已启用 还尝试过 边缘抗锯齿遮罩 kCALayerLeftEdge kCALayerRi
  • SpriteKit 碰撞检测中 SKSpriteNode 之间的间隙

    我已经尝试解决这个问题很长一段时间了 我有一个具有简单平台物理原理的游戏 其中玩家跌倒在一个方块上 这可以阻止他跌倒 这是可行的 但是玩家停止的位置和实际对象 精灵节点的位置之间存在明显的差距 这是一个屏幕截图 它应该是不言自明的 clas
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • Firestore 读取包含子集合的文档的计费

    我正在制作一个应用程序 它存储用户使用我的应用程序学习了多少分钟 我的 Firestore 数据库以 用户 集合开始 每个用户都有自己的文档 该文档由其在 Auth 中生成的 userID 命名 我的问题是 如果我读取了他们的 userID
  • 有没有办法检测 iOS 设备进入睡眠模式(屏幕变黑时)时的事件?

    我想检测两个事件 设备被锁定 解锁 设备进入睡眠状态并且屏幕变黑 我在这里实现的第一个目标是 有没有办法检查 iOS 设备是否锁定 解锁 https stackoverflow com questions 14229955 is there
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 删除 UINavigationBar 下的 1px 边框 - 不起作用

    IBOutlet var navBar UINavigationBar self navBar setBackgroundImage UIImage forBarMetrics UIBarMetrics Default self navBa
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 使用 Objective C 将 RGB 彩色图像更改为灰度图像

    我正在开发一个将彩色图像更改为灰度图像的应用程序 然而 有些图片显示出来是错误的 我不知道代码有什么问题 也许我输入的参数有误 请帮忙 UIImage c UIImage imageNamed downRed png CGImageRef
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • Apple 允许后台任务运行多长时间?

    我必须将一系列图像文件上传到数据库 因此 我偶然发现苹果后台执行指南 https developer apple com library ios documentation iPhone Conceptual iPhoneOSProgram
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components
  • iTunes Connect 中缺少应用内购买部分

    我有一个应用程序处于准备提交状态 我还有该应用程序的应用程序内购买项目 上周我将它们链接到我的应用程序并提交以供审核 周末 开发商拒绝了它 现在我想重新提交修复后的版本 但 IAP 部分完全丢失 我怎样才能让它再次可见 我遇到过同样的问题
  • 通过 Apple 批量购买计划分发自定义 B2B iOS 应用程序?

    我们的要求是为组织内超过 1000 名用户分发 iOS 应用程序 我的问题 我们可以做吗使用 iOS Developer Provisioning Profile 分发 iPA 因为我们有 99 美元的 Apple 帐户 而不是企业帐户 并

随机推荐

  • 在Java中组合多个声音流

    我有许多用 PCM PCM SIGNED 8000 0 Hz 16 位 单声道 2 字节 帧 小端 编码的语音声音流 我想通过网络发送它们 为了节省带宽 我目前使用 JSpeex 对流进行编码 然而 为了节省更多带宽 我想 如果可能 在使用
  • Jquery UI范围滑块对鼠标移动的滞后响应

    我正在使用 JQuery UI 范围滑块 我的滑块手柄似乎不能随光标平滑移动 而是滞后 我将 class styloot 与我的 body 标签一起使用 我发现从我的 html 结构中的 body 标记中删除此类可以使滑块移动变得平滑 尽管
  • 使用 Swing 和 Netbeans GUI 编辑器保存文件/打开文件对话框

    我是 Java 初学者 我正在 netbeans 7 3 IDE 中使用其 GUI 编辑器制作一个简单的文本编辑器 我面临的主要问题是我无法保存 打开文件 我创建了 保存 按钮 当我放下文件选择器时 它作为嵌入在 java 窗口中的普通打开
  • 是否可以将远程文件从 Electron App 拖到文件系统上?

    我一直在尝试 Electron 应用程序的文件系统拖放功能 并且在使用本地文件进行所有操作时没有遇到任何问题 我在文档中没有遇到任何内容 所以我想看看是否有人知道这是否可能 我想使用 Electron 中的拖出功能将远程文件拖到应用程序之外
  • 当移动的 div 到达特定区域时将 CSS 应用到它。用于移动元件的静态放大镜

    我偶然发现了创建一个非常具体的元素的问题 我有一个显示不同内容的股票代码 文本 图像和其他类型的内容 我想要做的是添加一个静态 放大镜 以便所有移动内容在放大镜区域时都会缩放 我看到的大多数 jquery 缩放或放大插件从未使用固定位置 而
  • 通过 BLE 上的 ANT+FEC 将用户体重发送到智能训练器

    有谁知道如何将室内智能训练器的用户体重设置发送到 DataPage 55 我想更新用户体重 以使成绩模拟更加真实 我已成功发送成绩 数据页 51 并且对用户体重实施相同的格式似乎没有任何作用 func sendUserConfig peri
  • 带有弧形尖底的头部

    我需要创建下图所示的蓝 绿色区域 它有倾斜的侧面 向下延伸至有轻微弯曲的点 使用什么是实现此目的的最佳方法CSS 如果无法支持 IE9 我需要支持 IE9 或 IE10 我已经开始了基础的演示在这里 http jsbin com quxoh
  • 新的关键字和方法隐藏

    new 关键字用于隐藏相同的基类实现 但我不确定为什么以下代码会生成 Baseclass 输出 class Baseclass public void fun Console Write Base class class Derived1
  • 在 Go 中解析 XML 时处理命名空间

    我正在尝试在 Go 中解析 XML 片段 package main import encoding xml fmt type XML struct Foo string xml foo func main rawXML byte
  • 如何给出 DateTime.Date 格式?

    日期时间 dt 日期时间 Now dt Date 创建为 31 10 2012 00 00 00 它创建为 dd mm yyyy 格式 但我需要 dd mm yyyy 我可以使用 return new DateTime d Year d M
  • 如何在两个 nib 文件之间共享 NSArrayController?

    我有一组图像和两个 nib 文件 一个 nib 文件有一个窗口 在 NSTableView 中显示图像 另一个笔尖有一个窗口 可将图像数组绘制到 NSView 中 并在选定的图像上绘制突出显示 图像数组由 NSArrayController
  • 如何将 ascii 值字符串转换为 python 中的原始字符/数字

    我有一个带有数字的字符串 我之前用编码器转换了它 但现在我正在尝试解码它 我四处搜索 似乎没有答案 如果你有任何办法 亲爱的 请告诉我 字符串 91 39 65 97 66 98 67 99 32 49 50 51 39 93 结果 ABC
  • 如何在编译时指定资源注释的名称?

    我们的代码是这样的 Resource name java comp resource foo bar ONE QUEUE private Queue queue 但是 在一种部署场景中 队列注释应如下所示 Resource name jav
  • Composer 自动加载完整示例?

    我想把all https getcomposer org doc 04 schema md psr 0 the https stackoverflow com questions 15179025 unable to autoload cl
  • 暂停和恢复 AnimateWithDuration 动画 ios

    因此 我在 animateWithDuration 方法的帮助下完成了动画 但我需要在应用程序进入后台时停止动画 并在应用程序返回前台时恢复动画 有什么方法可以实现这一点 我的动画 标签在一定时间间隔后淡入淡出 void viewDidLo
  • Twitter API:如何仅搜索带有地理标记的推文

    我该如何使用Twitter Search API 或其他 获取具有以下内容的推文列表 geo param EDIT 举例来说 我不会通过 apple 标签获取地理标记推文列表 没有位置过滤器 全球范围内 看起来最新的 API 支持这一点 只
  • 如何强制输入只允许字母?

    此处使用 jQuery 但无法阻止在输入字段中输入数字 http codepen io leongaban pen owbjg http codepen io leongaban pen owbjg Input
  • Javascript 的正则表达式lookbehind 解决方法?

    我在正则表达式方面很糟糕 所以我会以尝试更好地描述我的问题的名义 以一种非常规的方式传达我的问题 var TheBadPattern d 2 d 2 d 2 d 3 var TheGoodPattern a zA Z0 9 r n n a
  • raise ValueError('Fileobj 必须实现 read')

    我正在获取文件大小并将其上传到 S3 def transfer file from ftp to s3 bucket name ftp file path s3 file path ftp username ftp password chu
  • AVAssetWriter 仅在 iOS 13 设备上有音频“爆裂声”

    我使用 AVCaptureSession 使用 AVAssetWriter 写入 mov 文件 同样的代码在 iOS 13 之前的设备上不会出现裂纹 在所有 iOS 13 设备上 无论 iPhone iPad 型号如何 都会出现爆裂声 我已