问题标签 [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 回答
640 浏览

objective-c - 当第二次读取双视频轨道电影时,copyNextSampleBuffer 返回 NULL

我有一部电影有两个视频轨道。我需要从交错的两个轨道中读取帧 - 即从轨道 1 读取一帧,然后从轨道 2 读取一帧,然后从轨道 1 读取,依此类推。我正在使用带有两个 AVAssetReaders 的 AVAsset 来读取帧并且它可以工作;但是,如果我取消分配所有内容并再次尝试,则 copyNextSampleBuffer 在第一帧返回 null,错误为 -11829(无法打开)。如果我尝试单轨电影,或者我尝试从同一部电影中读取单轨,则不会发生这种情况。

这是我的精简代码:

所以在外循环的第二次迭代中,我得到 了第一条轨道第一帧上的Handle 错误代码。为了清楚起见,例如,如果我替换该行,则不会发生这种情况

有任何想法吗?这可能与这个(尚未回答的)问题有关。

0 投票
0 回答
272 浏览

ios - 再次进入前台时 AVAssetReader 失败

在我的应用程序中,我正在使用AVAssetReaderAVAssetWriter组合处理视频。

当应用程序被发送到后台时,我会暂停视频写入(因此也不再阅读)。再次进入前台时,我想继续该过程。但是,当我尝试copyNextSampleBuffer从阅读器的输出中读取时,阅读器失败并出现以下错误:

在应用程序暂停一段时间后,我有什么办法可以继续阅读资产样本?

12131PS:我在任何框架头文件中也找不到错误代码...

0 投票
1 回答
846 浏览

swift3 - 如何使用 AVAsset 和 Swift 3 读取时间码轨道?

我想读取时间码轨道的时间值。Apple 提供了一个出色的文档(参见Technical Note 2310),但它是用 Objective C 编写的。

我已将核心逻辑翻译为 Swift 3。它的工作方式与 ObjC 版本完全相同,这意味着CMSampleBuffer从时间码轨道读取 a 并将其转换为CMBlockBuffer. 当我创建数据指针CMBlockBufferGetDataPointer(在 timecodeFrame()函数中)时它失败了,这意味着原始数据总是给我 0 帧。所以归结为一个问题,我如何正确处理原始数据?

编辑:数据指针检索的目标 C 版本如下所示:

0 投票
2 回答
822 浏览

audio - 使用 AVFoundation 准确提取音频块的示例

问题

我希望从视频文件中的音轨中提取 LPCM 音频的样本准确范围。目前,我希望AVAssetReaderTrackOutput通过AVAssetTrack阅读AVURLAsset.

尽管准备并确保使用AVURLAssetPreferPreciseDurationAndTimingKeyset to初始化资产,但在资产中YES寻找样本准确的位置似乎是不准确的。

这表现为例如可变比特率编码的 AAC 流。虽然我知道 VBR 音频流在准确搜索方面会带来性能开销,但我愿意支付这笔费用,前提是我收到了准确的样本。

当使用例如扩展音频文件服务和ExtAudioFileRefAPI 时,我可以实现样本精确的音频搜索和提取。与 , 类似AVAudioFile,因为它建立在ExtAudioFileRef.

然而,问题是我还想从仅音频文件 API 拒绝但AVFoundation 中通过AVURLAsset.

方法

CMTime使用和定义提取的样本准确时间范围CMTimeRange,并在 上设置AVAssetReaderTrackOutput。然后迭代地提取样本。

笔记

给我的演示时间CMSampleBufferGetPresentationTimeStamp似乎与我所追求的相匹配——但由于它似乎不准确,所以我没有机会更正和对齐我检索到的样本。

关于如何做到这一点的任何想法?

或者,有没有办法适应orAVAssetTrack使用?AVAudioFileExtAudioFile

是否可以通过 访问音轨AudioFileOpenWithCallbacks

是否可以在 macOS 中以不同的方式从视频容器中获取音频流?

0 投票
0 回答
426 浏览

ios - AVFoundation 使用 Alpha 通道解码 prores4444 电影

我正在尝试使用 Swift 在 iOS 上解码带有 alpha 通道的 prores4444 视频,以覆盖用户视频上的复杂动画并将其导出到他的库。AVFoundation 文档不是很好,我正在努力寻找任何代码示例。

当我尝试将下面的代码与 AVAssetReaderTrackOutput 一起使用来解码视频时,我收到“AVAssetReaderOutput 当前不支持压缩输出”错误。

有谁知道如何读取带有 alpha 通道的 prores4444 的资产轨道以将其用于 AVMutableVideoCompositionLayerInstruction 的实例?

我应该使用其他编解码器吗?

0 投票
0 回答
368 浏览

ios - AVAssetReader,调用方法“startReading”失败,返回NO,Error Domain=AVFoundationErrorDomain Code=-11841 (AVErrorInvalidVideoComposition)

我逐帧阅读 MP4 视频,所以我使用 AVAssetReader ,它总是可以正常工作,但在“startReading”方法中失败的概率为 1/100。错误域=AVFoundationErrorDomain 代码=-11841 (AVErrorInvalidVideoComposition) - (void)test{

}

0 投票
1 回答
1364 浏览

ios - 如何在解码video.mp4时获取iOS中每个视频帧的时间戳

场景:
我正在编写一个iOS 应用程序来尝试解码videoFile.mp4. 我正在使用AVAssetReaderTrackOutputAVAssetReader来解码视频文件中的帧。这很好用。videoFile.mp4我基本上使用以下核心逻辑来获得每一帧。

代码:

sampleBuffer是这里每个视频帧的缓冲区。

问题:

  • 如何在这里获取每个视频帧的时间戳?
  • 换句话说&更详细,我怎样才能得到每个sampleBuffer我返回的时间戳copyNextSampleBuffer

PS:
请注意,我需要以毫秒为单位的时间戳。

0 投票
1 回答
1593 浏览

swift - AVAssetReader 从 copyNextSampleBuffer() 获取像素缓冲区时遇到问题,Swift

我正在尝试使用 macOSX 上的 AVFoundation 和 AVAssetReader 从 Quicktime 电影文件中读取图像帧。我想通过 Metal 中的纹理贴图显示帧。有很多在线使用 AVAssetReader 的示例,但我无法让它为我想要的工作。

我可以从电影中读取基本帧数据——打印输出中的时间值、大小和持续时间看起来正确。但是,当我尝试获取 pixelBuffer 时,CMSampleBufferGetImageBuffer 返回 NULL。

此处已解决此问题(为什么 CMSampleBufferGetImageBuffer 返回 NULL),建议问题是必须在设置参数中指定视频格式而不是“nil”。所以我尝试用上面的“videoReaderSettings”替换“nil”,格式有各种值:kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 等。

结果是帧“时间”值仍然正确,但“大小”和“持续时间”值为 0。但是,CMSampleBufferGetImageBuffer 确实返回了一些内容,之前为 0。但屏幕上出现了垃圾。

这是将 pixelBuffer 转换为 Metal 纹理的函数。

当我能够将 pixelBuffer 传递给此函数时,它会报告图像的正确大小。但正如我所说,出现在屏幕上的是垃圾——实际上它是由最近的 Safari 浏览器页面组成的。我不确定问题出在第一个函数还是第二个函数中。CMSampleBufferGetImageBuffer 的非零返回值令人鼓舞,但大小和持续时间的 0 则不是。

我发现这个线程(CMSampleBufferRef 的缓冲区大小)表明大小和持续时间显示 0 可能不是问题,所以问题可能在于转换为金属纹理?

知道我做错了什么吗?
谢谢!

0 投票
1 回答
804 浏览

ios - 使用 AVAssetReader 从 iPad 上的视频中读取帧时,图像的方向不正确

我想先确定几件事:

  • 这适用于多部 iPhone(iOS 10.3 和 11.x)
  • 这适用于任何 iPad 模拟器 (iOS 11.x)

我剩下的情况是,当我运行以下代码(从我的应用程序中压缩以删除不相关的代码)时,我得到的图像是颠倒的(横向)或旋转 90 度(纵向)。查看在此步骤之前处理的视频表明它的方向正确。所有测试均在 iOS 11.2.5 上完成。

* 更新 *

我做了一些进一步的测试,发现了一些更有趣的项目:

  • 如果视频是从手机或外部来源导入的,则已正确处理
  • 如果视频是在 iPad 上以纵向录制的,那么阅读器会将其向左旋转 90 度提取
  • 如果视频是在 iPad 上以横向录制的,则阅读器将其倒置提取
  • 在上述两种情况下,UIImage报告一个纵向的方向

所涉及代码的精简版本:

0 投票
0 回答
105 浏览

ios - 如何使用 AVAssetReader 导出 .aac 文件?

我正在使用SDAVAssetExportSession转换MPMedaiItem.m4a文件,它工作得很好。

链接:这里

这是我的代码,最终结果将是.m4a文件,fileName因为1.aac此代码不起作用。

我不知道输入outputFileType什么.aac类型。

如果我传入.aac文件名,这会给我错误:错误:无法写入输出文件

我想要的是.aac格式的输出结果文件,我查看了类文件,但我无法弄清楚在“.aac”文件的代码中要更改什么。

有人有什么主意吗?