问题标签 [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 投票
1 回答
1056 浏览

iphone - 用 AVAssetReader 擦洗

我已经实现了此处讨论的搜索(AVAssetReader Seeking),但是当 AVAssetReader 被拆除并构建一个新的时,当然会有明显的延迟(因为一旦开始读取数据就无法更改 timeRange 属性)。

我可以想象,只需读取数据并跳过它,就可以相当干净地完成时间向前搜索,但是及时向后搜索总是会受到这个问题的限制......

有什么想法可以优化它,以便用户喜欢浏览音轨吗?

0 投票
2 回答
3567 浏览

objective-c - AVAssetReader 到 AudioQueueBuffer

目前,我正在做一个小测试项目,看看是否可以从 AVAssetReader 获取样本以在 iOS 上使用 AudioQueue 进行播放。

我读过这个:(使用 AudioQueue 播放未压缩的原始声音,没有声音)和这个:(如何使用 AVAssetReader 在 iOS 上正确读取解码的 PCM 样本——目前解码不正确),

这两者实际上确实有帮助。在阅读之前,我完全没有声音。现在,我得到了声音,但音频播放速度非常快。这是我第一次涉足音频编程,因此非常感谢任何帮助。

我因此初始化读者:

我就这样抓取了数据:

最终将我们带到音频队列,以这种方式设置:

我们就这样排队

我试图尽可能地包含代码,以便让每个人都能轻松指出我在哪里是个白痴。话虽如此,我感觉我的问题出现在轨道阅读器的输出设置声明中或 AudioQueue 的实际声明中(我向队列描述我将要发送什么样的音频)。事实是,我真的不知道如何在数学上实际生成这些数字(每个数据包的字节数,每个数据包的帧数,你有什么)。对此的解释将不胜感激,并提前感谢您的帮助。

0 投票
1 回答
354 浏览

ios - 可以使用 AVAssetReader 通过蓝牙/wifi 流式传输音频数据吗?

根据 AVAssetReader文档

然而,我看到它与音频队列服务一起工作的例子......这是实时的,不是吗?我可以使用 AVAssetReader 流式传输数据并通过 GKSession 或其他方式发送数据吗?

0 投票
1 回答
7436 浏览

ios - AVAssetWriter 如何写下采样/压缩的 m4a/mp3 文件

我正在尝试获取本地 m4a 或 mp3 文件并压缩/向下采样该文件(为了制作更小的文件)。

最初,我使用 AVAssetExportSession 将 AVAsset 导出到临时目录,但我无法控制压缩/下采样(您只能使用预设,其中只有 .wav 文件格式支持质量下降) .

然后,按照 SO 上的几个示例,我尝试使用 AVAssetReader/AVAssetWriter 来执行此“导出”。

我这样创建我的读者/作者:

然后我开始写...

当我写完后,我应该写入 exportURL 的数据为空,并且作者报告成功完成。有什么想法可能会出错吗?

更新调用后的写入器状态appendSampleBuffer:为 AVAssetWriterStatusFailed,虽然读取器状态是成功的,并且似乎读取了整个文件。

0 投票
1 回答
3426 浏览

objective-c - CIImage:imageWithCVPixelBuffer: 不适用于 copyNextSampleBuffer 中的缓冲区?

长期潜伏者,第一次海报。

我正在尝试解码视频并将每一帧保存为图像。(该视频是我之前录制的,可以在 iPhone 上正常播放。)我的第一步是确保我得到正确的图像数据,所以这个小片段只是为了在 UIImageView 中显示它:

前两个步骤工作正常(我得到一个有效的缓冲区和像素缓冲区),但由于cIImage:imageWithCVPixelBuffer:某种原因不能工作(get(null))。这是我的输出:

有人知道我做错了什么吗?我搜索了 Stack Overflow,发现了很多可以使用的示例(来自实时提要),但没有使用 AVAssetReader 然后将缓冲区从 copyNextSampleBuffer 转换为 CIImage。

0 投票
1 回答
13657 浏览

ios - 如何选择用于 AVAssetReader 的像素格式类型 (kCVPixelBufferPixelFormatTypeKey)?

我们正在使用AVAssetReaderAVAssetWriter在某种程度上采用视频编码中所述的风格,使用 AVAssetWriter - CRASHES基本上是为了读取我们从照片库/资产库中获得的视频,然后以不同的比特率写入以减小其大小(用于最终的网络上传) .

让它为我们工作的诀窍是在on中指定一个kCVPixelBufferPixelFormatTypeKey键和值,如下所示:outputSettingsAVAssetReaderTrackOutput

所以基本上我们使用kCVPixelFormatType_32BGRA了键的值kCVPixelBufferPixelFormatTypeKey

但显然我们可以选择许多可能的像素格式类型。运行技术问答 QA1501:核心视频 - iOS 6.0.1 iPhone 设备上可用的像素格式中记录的代码,下面是它显示的支持像素格式类型的列表:

尽管kCVPixelFormatType_32BGRA对我们有用(至少表面上),但我们很好奇是否有比上述列表更好的选择。我们应该如何选择适合我们的像素格式类型?

0 投票
1 回答
2915 浏览

ios - 如何将 AVAsset 音频从一台 iOS 设备无线传输到另一台设备?

我正在做一些事情,比如从 iPod 库中流式传输音频,通过网络或蓝牙发送数据,以及使用音频队列播放。

感谢这个问题和代码。帮我很多。

我有两个问题。

  1. 我应该从一台设备发送什么到另一台设备?CMSampleBufferRef?音频缓冲区?数据?音频队列缓冲区?包?我不知道。

  2. 当应用程序完成播放时,它崩溃了,我得到了错误(-12733)。我只想知道如何处理错误而不是让它崩溃。(检查OSState?当错误发生时,停止它?)

    错误:无法读取样本数据 (-12733)

0 投票
1 回答
869 浏览

ios - AVAssetReader Crash:轨道必须都具有媒体类型 AVMediaTypeAudio'

我正在阅读 AVURLAsset 并通过以下调用初始化阅读器

songAsset (AVURLAsset) 使用 MPMediaItems URLAsset 属性进行初始化。

我在某些资产上因此而崩溃。

如果 MPMediaItem 是音频资产并在 iTunes 中播放,为什么会这样?

0 投票
2 回答
2335 浏览

objective-c - AVFoundation 重现视频循环

我需要在我的 OpenGL 应用程序中无限期地再现视频(在视频结束时重新启动视频)。为此,我正在尝试利用 AV 基础。我创建了一个 AVAssetReader 和一个 AVAssetReaderTrackOutput,并利用 copyNextSampleBuffer 方法获取 CMSampleBufferRef 并为每个帧创建一个 OpenGL 纹理。

在我的 GLKViewController 的 -update 方法中,我调用以下内容:

在 AVAssetReader 处于读取状态之前一切正常,但是当它完成读取并且我尝试使用新调用 [_assetReader startReading] 重新启动 AVAssetReading 时,应用程序崩溃而没有输出。我做错了什么?完成阅读后重新启动 AVAssetReading 是否正确?

0 投票
2 回答
4422 浏览

ios - 转到后台并返回前台后无法继续从 AVAssetReaderOutput 读取

我正在使用 anAVAssetReaderOutput从 中读取样本AVAsset,对它们进行一些处理,然后使用 RemoteIO AU 播放结果。

问题是在调用AudioOutputUnitStop暂停播放后,然后在进入后台并返回前台后,调用后音频不会再次开始AudioOutputUnitStartcopyNextSampleBuffer这是由于 的方法返回的错误,该方法AVAssetReaderOutput被称为渲染管道的一部分。

调用后的status属性为,其属性为Error Domain=AVFoundationErrorDomain Code=-11847 "Operation Interrupted" UserInfo=0x1d8b6100 {NSLocalizedRecoverySuggestion=停止其他操作并重试,NSLocalizedDescription=Operation Interrupted}AVAssetReadercopyNextSampleBufferAVAssetReaderStatusFailederror

我正在寻找一种解决方案,它不会迫使我在回到前台后重新初始化整个管道 - 希望有这样一个解决方案,它AVAssetReader可以在应用程序进入后台和返回后继续存在......

笔记

  • 该应用程序有权在后台播放音频。
  • 我正在处理音频中断 -AVAudioSessionAVAudioSessionDelegatesendInterruptionWithFlags:事件和应用程序激活时都将 my 设置为活动的。无论我是否这样做都没有区别,得到同样的错误。

一些代码:

音频播放器

音频阅读器设置

AudioReader 渲染方法,最终由 RenderCallback 函数调用