问题标签 [avassetwriterinput]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1814 浏览

avfoundation - 如何创建 outputSettings 字典与 AVAssetWriterInput 实例一起使用?

我正在尝试将 MPMediaItem 实例转换为 caf 格式的音频文件。我一直在关注 Chris Adamson 的工作以及他在从 iPod 库到 PCM 样本的帖子,其步骤比以前需要的要少得多

当我四处寻找如何快速执行此操作时,我遇到了 Abel Domingues github FileConverter.swift ,因为我在 Swift 中执行此操作。

然后我着手转换为 Swift 3 作为协议的扩展。一切顺利,直到我尝试运行它。它在创建对象时崩溃assetWriterInput,似乎与outputSettings变量有关。

我收到的错误消息如下:

-[_SwiftValue unsignedIntValue]: unrecognized selector sent to instance 0x1704407b0 2016-10-13 18:34:52.032784 Testie[3098:1535938] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue unsignedIntValue]: unrecognized selector sent to instance 0x1704407b0'

我已经搜索了这方面的示例,但帖子必须使用 Objective-C 和/或与设置视频词典相关。

这是来自与音频相关的 AVAssetWriterInput 源的文档:

对于 AVMediaTypeAudio,outputSettings 字典中当前不支持以下键:AVEncoderAudioQualityKey 和 AVSampleRateConverterAudioQualityKey。使用此初始化程序时,必须完全指定音频设置字典,这意味着它必须包含 AVFormatIDKey、AVSampleRateKey 和 AVNumberOfChannelsKey。如果没有其他可用的通道布局信息,则 AVNumberOfChannelsKey 的值为 1 将导致单声道输出,值为 2 将导致立体声输出。如果 AVNumberOfChannelsKey 指定的通道数大于 2,则字典还必须为 AVChannelLayoutKey 指定一个值。对于 kAudioFormatLinearPCM,必须包括所有相关的 AVLinearPCM*Key 键,对于 kAudioFormatAppleLossless,必须包括 AVEncoderBitDepthHintKey 键。请参阅 -initWithMediaType:

那么字典中的什么导致了错误?

0 投票
0 回答
450 浏览

ios - 如何使用 AVAssetWriter 同时创建多个 mp4 文件

我尝试在 iPhone 上使用 AVAssetWriter 将四个视频流保存为 .mp4。使用三个流,一切正常,但第 4 个 mp4 文件始终为空。

这是我的一段代码:

我在循环中调用此方法,并在每次运行时给出一个图像,该图像应写入四个 mp4 文件之一。最后调用的 AVAssetWriterInput 获取图像,但文件仍然为空。如果我更改调用顺序,最后调用的 AVAssetWriterInput 总是会留下一个空文件。

有什么想法吗?

0 投票
0 回答
290 浏览

avfoundation - AVAssetWriter 实时视频录制,48 KHz 音频

我正在使用 AVAssetWriter 在 iOS 上录制实时视频,如 RosyWriter 中所示。我遇到的问题是,如果我将 AVAudioSession preferredSampleRate 设置为 48000 Hz,它会带来很多麻烦,例如音频与视频不同步。有没有办法在 AVAudioSession 上使用默认采样率(44100 Hz),但是在使用 AVAssetWriter 录制时使用 48000 Hz 而不会导致任何同步问题?

编辑:我发现问题是在 RIO 单元的渲染回调中返回的帧数乘以 1/48000 不等于 AVAudioSession 的 ioduration。44100 KHz 的情况并非如此。我依靠此代码进行计时。这是音频与视频不同步的原因。

0 投票
1 回答
201 浏览

audio - AVFramework 中重复的音频帧通过 AVAsset 创建 *.mov 文件

我在尝试使用 AVFramework 框架和 AVAsset 创建 ProRes 编码的 mov 文件时遇到了一些问题。

在 OSX 10.10.5 上,使用 XCode 7,链接到 10.9 库。到目前为止,我已经设法创建了包含视频和多个音频通道的有效 ProRes 文件。

(我正在创建多个未压缩的 48K、16 位 PCM 音频轨道)

添加视频帧效果很好,添加音频帧效果很好,或者至少在代码中成功。

但是,当我回放文件时,似乎音频帧在 12、13、14 或 15 帧序列中重复。

查看波形,从 *.mov 很容易看到重复的音频...

也就是说,前 13 或 X 个视频帧都包含完全相同的音频,然后在下一个 X 中再次重复,然后一次又一次,等等......

视频很好,只是音频似乎在循环/重复。

无论我使用多少音频通道/音轨作为源,问题都会出现,我仅使用 1 个音轨以及 4 个和 8 个音轨进行了测试。

它与我提供给系统的样本格式和数量无关,即使用 720p60、1080p23 和 1080i59 都表现出相同的错误行为。

  • 实际上,720p 捕获似乎重复音频帧 30 或 31 次,而 1080 格式仅重复音频帧 12 或 13 次,

但我肯定将不同的音频数据提交到音频编码/SampleBuffer 创建过程,因为我已经非常详细地记录了这一点(但下面的代码中没有显示)

我尝试了许多不同的方法来修改代码并暴露问题,但没有成功,因此我在这里问,希望有人可以看到我的代码存在问题或给我一些关于这个问题的信息。

我正在使用的代码如下:

这是一个连接到一些特殊硬件的非常基本的示例(省略了相关代码)

它抓取视频和音频的帧,然后处理音频从交错的 PCM 到每个轨道的单个 PCM 数据阵列

然后将每个缓冲区添加到适当的轨道,无论是视频还是音频......

最后,AvAsset 的东西完成并关闭,我退出并清理。

任何帮助将不胜感激,

干杯,

詹姆士

0 投票
1 回答
1066 浏览

ios - 无法使用 AVAssetWriterVideoInput 将帧附加到视频文件。失败,最后出现未记录的错误 -12738

我正在使用 AVAssetWriterVideoInput 将缓冲区附加到文件中。我有这个代码:

这条线

失败,unknown error并且代码-12738显然在任何文档中都找不到,正如所有苹果文档所预期的那样。

另外,我怀疑这是一个未知错误,原因很简单,因为 AVFoundation 中有很多未知错误的代码,如果系统正在选择代码-12738,它显然知道的不仅仅是说它是未知的。

查看正在保存的文件,它保持 0 兆字节,因为没有保存缓冲区/帧。

AVAssetWriterVideoInput是这样创建的:

并且缓冲区,当它被附加时具有以下特征:

如果您想检查问题,我在这里有一个示例代码。该代码准备拍摄 4K 视频。如果您的设备无法执行此操作,请将行更改AVCaptureSessionPreset3840x2160为 AVCaptureSessionPresetHigh ProcessadorVideo.m` 。inside示例代码从视频流中裁剪出一个矩形,并对其应用漫画效果。谢谢

0 投票
4 回答
5103 浏览

ios - iOS 如何在使用 AVAssetWriter 捕获视频时正确处理方向

我正在制作一个利用 AVFoundation 录制视频的示例应用程序。重点是我可以更好地控制视频的录制方式。在我的示例项目中,我进行了视频捕获,但在正确处理方向方面遇到了困难。

我在网上做了很多搜索,发现其他人建议我不应该让我的捕获视图或捕获会话根据方向旋转,而是设置一个转换来在播放期间旋转视频。我在 iOS 和 Mac 设备上运行良好,但我想知道在 Windows 或 Android 等其他平台上是否会出现问题。

此外,当我查看录制视频的元数据时,我发现宽度和高度未针对方向正确设置。这是有道理的,因为我只是在转换视频的呈现,而不是它的实际分辨率。

我的问题是我如何正确支持纵向和横向方向并将其正确反映在视频文件输出中?我需要这些视频在所有平台上正确播放,所以我认为分辨率会很重要。

以下是我迄今为止所写的完整来源。我很感激你们能提供的任何建议。

0 投票
1 回答
148 浏览

ios - 将视频写入文件在 iPad 3 上正常工作约 5 秒,然后失败

我正在创建这个是相机的应用程序。因为它是为 iOS 9 创建的,所以我必须在旧设备上对其进行测试。在这种情况下是 iPad 3。该应用程序在新的 iPad Pro 9.7 上完美运行,但在 iPad 3 上一段时间后无法写入视频。

发生的情况是,应用程序开始正常写入帧但突然失败。

我正在使用这种方法来存储每一帧:

这在 iPad Pro 9.7 上运行良好,但在 iPad 3 上,在正确写入帧约 5 秒后,它击中 Ⓐ 行,惨遭失败。

失败并出现错误 -536870211,这显然是一个未知错误。

我检查了应用程序是否有泄漏,但没有。

有任何想法吗?

注意:我现在发现问题仅在我从后置摄像头 (HD) 写入帧时才会显示。如果我切换到前置摄像头 VGA (640x480),它工作正常。所以它与内存分配有关,但我已经检查过仪器和应用程序正在使用大约 12 MB 的内存,这个值或多或少是恒定的。没有泄漏。

0 投票
2 回答
1348 浏览

ios - 制作全是慢动作的真实慢动作视频

我正在创建我的这个应用程序并以 120 和 240 fps 的速度拍摄视频。

当我在我的 Mac 上观看这些视频时,我会在时间线下方看到这些标记。

在此处输入图像描述

这些标记是可编辑的,代表慢动作的区域。因此,视频以正常帧速率开始,进入慢动作并在结束时返回正常帧速率。我没有把那些标记放在那里,iOS 做了。在那种情况下,我想知道是否有办法删除它们并使视频完全慢动作。

我只是AVAssetWriter像视频非慢动作一样正常初始化。

另外,我注意到这些“慢动作”视频并不是真正的慢动作,但它们是慢动作的“食谱”,可以在 iOS 设备和使用 QuickTime X 的 Mac 上正确播放。甚至 QuickTime 7 也不能正确播放它们。

无论如何要让这个东西成为可以在任何播放器、任何计算机上播放的真正慢动作?

0 投票
3 回答
2861 浏览

ios - 使用 AVAssetWriter 录制视频:第一帧是黑色的

我正在用 . 录制视频(用户也可以只切换到音频)AVAssetWriter。我在启动应用程序时开始录制。但是第一帧是黑色的(或者很暗)。当我从音频切换到视频时也会发生这种情况。感觉AVAssetWriter和/或AVAssetWriterInput还没有准备好记录。我怎样才能避免这种情况?

我不知道这是否是有用的信息,但我也使用 aGLKView来显示视频。

0 投票
1 回答
2479 浏览

ios - 将 CMSampleBuffer 旋转任意角度并在 swift 3 中附加到 AVAssetWriterInput

我将样本缓冲区转换为CGContext. 然后我将转换应用于上下文并CIImage从中创建一个,然后将其显示在一个UIImageView.

同时,我想将其附加到AVAssetWriterInput以创建这些转换的电影。

到目前为止,我应用于上下文的转换没有任何效果。当我在图像视图中显示所谓的转换图像时。它看起来完全一样。

更新: 我设法将样本缓冲区记录到视频文件中(尽管方向错误,它仍然被拉伸)。我已将此代码用作基础

http://geek-is-stupid.github.io/blog/2017/04/13/how-to-record-detect-face-overlay-video-at-real-time-using-swift/

但我仍在努力将旋转应用于 CGContext。基本上我对上下文所做的一切都被完全忽略了。