问题标签 [avassetreader]

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 投票
0 回答
227 浏览

iphone - 使用 iPod 库中的音乐录制视频

我正在尝试使用 AVFoundation (AVCaptureOutput + AVAssetWriter) 录制视频,同时从 iPod 库而不是麦克风播放音频。我采用了 RosyWriter 示例代码并删除了 AudioInput,而是设置 AVAssetReader 以读取未压缩格式的歌曲,

然后定期轮询音频样本。但它不能正常工作。关于 VideoStar 或 Blux Movie 等应用程序如何实现它的任何建议?

0 投票
1 回答
954 浏览

ios - AVAssetWriter 可以合并两个视频文件

不要告诉我使用 AVAssetExportSession,谢谢。

我试过这个,但失败了。

0 投票
3 回答
7567 浏览

macos - 为什么 CMSampleBufferGetImageBuffer 返回 NULL

我已经构建了一些代码来逐帧处理 OSX 上的视频文件。以下是代码的摘录,它构建好、打开文件、找到视频轨道(仅轨道)并开始毫无问题地读取 CMSampleBuffers。但是,当我尝试提取像素缓冲区帧时,我获得的每个 CMSampleBufferRef 都返回 NULL。iOS 文档中没有说明为什么我可以期望 NULL 返回值或我可以期望如何解决该问题。无论捕获源或编解码器如何,我测试过的所有视频都会发生这种情况。

非常感谢任何帮助。

需要明确的是,我已经删除了所有错误检查代码,但该代码中没有指出任何问题。即 AVAssetReader 正在读取,CMSampleBufferRef 看起来不错等。

0 投票
3 回答
6568 浏览

ios - 如何使用 AVAssetReader 和 AVAssetWriter 控制视频帧率?

我们正在尝试了解如何控制/指定我们使用AVAssetReader和编码的视频的帧速率AVAssetWriter。具体来说,我们正在使用AVAssetReaderAVAssetWriter转码/编码/压缩我们从照片/视频库访问的视频。我们能够控制比特率、纵横比变化等,但无法弄清楚如何控制帧率。具体来说,我们希望能够将 5 分钟长的 30 FPS 视频作为输入,并以 15 FPS 的速度发出 5 分钟的视频。

我们当前处理样本缓冲区的循环是:

我们如何增加或改变这一点,以便我们可以控制所创建视频的帧速率?我们似乎无法在 SO 或其他任何地方找到明确解释如何执行此操作的示例。我认为我们应该使用CMTime除上面代码示例中的方法之外的其他方法,但细节尚不清楚。

0 投票
0 回答
622 浏览

ios - 使用 AVAssetReader iOS 解码 h.264 帧数据

我对 AVAssetReader 有一些疑问。
目前我正在使用他们提供的 API 读取从 IP 摄像机发送的视图数据。从 API,

以下将从 API 返回的每一帧

1.Buffer包含帧原始数据

2.框架类型I或B框架

3.编解码器信息:H.264

4.来自 FrameInfo 对象的一些其他帧信息

以上信息是否足以使用 AVAssetReader 进行解码?

到目前为止,我看到的大多数示例都是从 URL 或文件中获取视频源,任何人都可以向我提供示例代码来解码帧缓冲区中的原始数据

非常感谢您的帮助

0 投票
0 回答
308 浏览

ios - 为什么我在 iOS 上使用 AVAssetReader 时每秒只接收几个音频样本?

我正在编写以下代码:

  • 使用内置摄像头和麦克风(AVCaptureSession)录制视频+音频,
  • 实时使用视频和音频采样缓冲区做一些事情,
  • 使用 AVAssetWritter 将结果保存到本地 .mp4 文件中,
  • 然后(稍后)使用 AVAssetReader 读取文件(视频+音频),
  • 用 samplebuffer 做一些其他的事情(现在我什么都不做),
  • 并使用 AVAssetWriter 将结果写入最终视频文件。

一切正常,但我对音频格式有疑问:

当我从捕获会话中捕获音频样本时,我可以记录大约 44 个样本/秒,这很正常。当我阅读 .mp4 文件时,我每秒只记录大约 3-5 个音频样本!但是这 2 个文件的外观和声音完全相同(在 QuickTime 中)。

  • 我没有为 Capture Session 设置任何音频设置(因为 Apple 不允许这样做)。
  • 我将 2 个音频 AVAssetWriterInput 的 outputSettings 配置如下:

    /li>
  • 我将 nil 传递给音频 AVAssetReaderTrackOutput 的 outputSettings 以接收存储在轨道中的样本(根据文档)。

因此,从 CaptureSession 到最终文件的采样率应该是 44100Hz。为什么我只阅读几个音频样本?为什么它仍然有效?我有直觉,当我必须使用样本时它不会很好地工作(例如,我需要更新它们的时间戳)。

我尝试了其他几种设置(例如 kAudioFormatMPEG4AAC),但 AVAssetReader 无法读取压缩音频格式。

谢谢你的帮助 :)

0 投票
4 回答
3495 浏览

ios - AVAssetReaderOutput copyNextSampleBuffer 在设备上编码带音频的视频时挂起

在这个问题中实现了对视频(带音频)进行编码的解决方案之后,Video Encoding using AVAssetWriter - CRASHES,我发现代码在 iPhone 模拟器中可以正常工作。不幸的是,某些视频在实际的 iPhone 5(和其他设备)上运行时无法对其音频进行编码。

例如,从 WWDC 2011 示例代码 RosyWriter ( https://developer.apple.com/library/IOS/samplecode/RosyWriter/Introduction/Intro.html ) 生成的视频不会完全编码,因为该函数-[AVAssetReaderOutput copyNextSampleBuffer]永远不会返回。

视频缓冲区正确进入,但一旦它尝试复制第一个音频 CMSampleBufferRef,调用就会挂起。当我对来自其他来源的视频(例如在本机 iOS 相机应用程序中录制的视频)尝试此操作时,音频会正确导入。

该线程https://groups.google.com/forum/#!topic/coreaudio-api/F4cqCu99nUI记录了copyNextSampleBuffer与 AudioQueues 一起使用时挂起的函数,并建议将操作保留在单个线程上。我试过把所有东西都放在一个单独的线程上,在主线程上,但没有运气。

有没有其他人遇到过这种情况并有可能的解决方案?

编辑:从 RosyWriter 生成的视频的轨道似乎与来自本机相机应用程序的视频相反,即音频流作为流 0,视频流作为流 1。

不确定这是否会对 AVAssetReader 产生影响。

0 投票
1 回答
3162 浏览

ios - 使用 AVAssetReaderVideoCompositionOutput 导出中途,然后以 AVFoundationErrorDomain Code=-11800 退出

我已经从 AVAssets 构建了 AVMutableComposition 和 VideoComposition 并且能够播放它。我也可以使用 AVAssetExportSession 导出它,但是 AVAssetExportSession 不能提供太多的设置控制,所以我使用 AVAssetReader/AVAssetWriter 导出它,但不幸的是我遇到了一个我不明白的错误,并且只是部分写入输出文件。

这是我到目前为止的代码。我已经省略了作者和尽可能多的其他内容(包括一些错误检查),我认为这些内容与使代码更易于阅读无关,因为它很多。请注意,我还没有处理音轨——我正在尝试一步一步来,但这也许是我的问题?

变量asset是 AVMutableComposition。

问题是循环在短时间内退出,我得到这个输出:

0 投票
1 回答
350 浏览

ios - 使用 AudioUnits 播放和 eq 音乐库中的歌曲

我正在构建一个应用程序,该应用程序涉及播放用户音乐库中的歌曲,同时应用均衡 (EQ) 效果。我以前只用来AudioUnits产生声音,所以我有点麻烦。

我目前的计划是用来AVAssetReader获取样本,虽然我对此有点模糊,但我的问题是关于AudioUnitApple 文档中使用的正确设计模式: https ://developer.apple.com/library /ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/ConstructingAudioUnitApps/ConstructingAudioUnitApps.html#//apple_ref/doc/uid/TP40009492-CH16-SW1

我的猜测是需要一个渲染回调来执行我的 EQ 效果(我在想kAudioUnitSubType_ParametricEQ),所以要么留下“带有渲染回调函数的 I/O”模式,要么留下“带有渲染回调函数的仅输出”。如果我正在从音乐库中读取数据(可能通过AVAssetReader),这两种模式中的哪一种最适合?

0 投票
1 回答
803 浏览

cocoa - AVAssetReader 音频捕获,缺少样本

我有一个奇怪的问题。我正在捕获 .mov/.wav/.aiff 文件的一些音频样本来播放它们。我正在使用以下代码捕获未更改的 PCM 样本(如果可用),否则将它们转换为 32 位浮点数。

现在奇怪的是,无论我打开什么文件,它总是会错过文件中的一些样本。以下循环http://www.vvertex.com/loop.wav的持续时间从 Audacity 和音轨持续时间 mainAudioTrack.timeRange 报告为 3.75,而我的代码转储打印样本长度和播放偏移量是:3.657120

这是转储:

2014-03-06 10:48:15.721 FrameDecoder[665:303] 收到 PCM 缓冲区 [TIMESTAMP:0.0ms] 2014-03-06 10:48:15.721 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014 -03-06 10:48:15.721 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.721 FrameDecoder[665:303] 接收到的带有 [TIMESTAMP:185.8] 的 PCM 缓冲区ms] 2014-03-06 10:48:15.721 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.721 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 值音频 2014-03-06 10:48:15.722 FrameDecoder[665:303] 接收到 PCM 缓冲区 [TIMESTAMP:371.5ms] 2014-03-06 10:48:15.722 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192 ] 2014-03-06 10:48:15.722 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.722 FrameDecoder[665:303] 接收到的 PCM 缓冲区带有 [TIMESTAMP:557.3ms] 2014-03-06 10:48:15.722 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.722 FrameDecoder[665:303 ] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.723 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:743.0ms] 2014-03-06 10:48:15.723 FrameDecoder[ 665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.723 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.723 FrameDecoder[ 665:303] 使用 [TIMESTAMP:928.8ms] 接收 PCM 缓冲区 2014-03-06 10:48:15.726 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.726 FrameDecoder[665 :303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.727 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:1114.6ms] 2014-03-06 10:48:15.727 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.727 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48: 15.727 FrameDecoder[665:303] 使用 [TIMESTAMP:1300.3ms] 接收 PCM 缓冲区 2014-03-06 10:48:15.727 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.727 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.727 FrameDecoder[665:303] 接收到的带有 [TIMESTAMP:1486.1ms] 的 PCM 缓冲区 2014-03-06 10: 48:15.728 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.728 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10: 48:15.728 FrameDecoder[665:303] 接收到的 PCM 缓冲区 [TIMESTAMP:1671.8ms] 2014-03-06 10:48:15.728 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.728 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.728 FrameDecoder[665:303] 接收到的带有 [ TIMESTAMP:1857.6ms] 2014-03-06 10:48:15.729 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.729 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8 ms] 价值音频 2014-03-06 10:48:15.729 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:2043.4ms] 2014-03-06 10:48:15.729 FrameDecoder[665:303] 缓冲区包含 [ SAMPLES:8192] 2014-03-06 10:48:15.729 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.729 FrameDecoder[665:303] 接收的 PCM 缓冲区与 [TIMESTAMP:2229.1ms] 2014-03-06 10:48:15.730 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.730 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.730 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:2414.9ms] 2014-03-06 10:48:15.730 FrameDecoder [665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.730 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.731 FrameDecoder [665:303] 使用 [TIMESTAMP:2600.6ms] 接收 PCM 缓冲区 2014-03-06 10:48:15.731 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.731 FrameDecoder[ 665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.731 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:2786.4ms] 2014-03-06 10:48: 15.731 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.731 FrameDecoder[665:303] 缓冲区包含 [DURATION:185。8ms] 音频价值 2014-03-06 10:48:15.732 FrameDecoder[665:303] 接收到的 PCM 缓冲区 [TIMESTAMP:2972.2ms] 2014-03-06 10:48:15.732 FrameDecoder[665:303] 缓冲区包含 [ SAMPLES:8192] 2014-03-06 10:48:15.732 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.732 FrameDecoder[665:303] 接收到的 PCM 缓冲区与 [TIMESTAMP:3157.9ms] 2014-03-06 10:48:15.732 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.733 FrameDecoder[665:303] 缓冲区包含 [DURATION :185.8ms] 音频价值 2014-03-06 10:48:15.733 FrameDecoder[665:303] 接收 PCM 缓冲区 [TIMESTAMP:3343.7ms] 2014-03-06 10:48:15.733 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:8192] 2014-03-06 10:48:15.733 FrameDecoder[665:303] 缓冲区包含 [DURATION:185.8ms] 价值的音频 2014-03-06 10:48:15.733 FrameDecoder[665:303] 接收到的 PCM 缓冲区带有 [TIMESTAMP:3529.4ms] 2014-03-06 10:48:15.734 FrameDecoder[665:303] 缓冲区包含 [SAMPLES:5631] 2014-03-06 10:48:15.734 FrameDecoder[665:303 ] 缓冲区包含 [DURATION:127.7ms] 价值的音频 2014-03-06 10:48:15.734 FrameDecoder[665:303] 总样本持续时间:3.657120 2014-03-06 10:48:15.734 FrameDecoder[665:303] 总计跟踪报告持续时间:3.750000

有人遇到过这样的奇怪问题吗?我已经尝试了几个音频文件以及具有不同压缩的 .mov 文件。一样的东西!我完全坚持这一点!

此外,当我通过 AudioUnits 播放样本时,实际上缺少的是从样本开头开始的那部分......

谢谢 !