问题标签 [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.
objective-c - 当第二次读取双视频轨道电影时,copyNextSampleBuffer 返回 NULL
我有一部电影有两个视频轨道。我需要从交错的两个轨道中读取帧 - 即从轨道 1 读取一帧,然后从轨道 2 读取一帧,然后从轨道 1 读取,依此类推。我正在使用带有两个 AVAssetReaders 的 AVAsset 来读取帧并且它可以工作;但是,如果我取消分配所有内容并再次尝试,则 copyNextSampleBuffer 在第一帧返回 null,错误为 -11829(无法打开)。如果我尝试单轨电影,或者我尝试从同一部电影中读取单轨,则不会发生这种情况。
这是我的精简代码:
所以在外循环的第二次迭代中,我得到 了第一条轨道第一帧上的Handle 错误代码。为了清楚起见,例如,如果我替换该行,则不会发生这种情况
和
有任何想法吗?这可能与这个(尚未回答的)问题有关。
ios - 再次进入前台时 AVAssetReader 失败
在我的应用程序中,我正在使用AVAssetReader
→AVAssetWriter
组合处理视频。
当应用程序被发送到后台时,我会暂停视频写入(因此也不再阅读)。再次进入前台时,我想继续该过程。但是,当我尝试copyNextSampleBuffer
从阅读器的输出中读取时,阅读器失败并出现以下错误:
在应用程序暂停一段时间后,我有什么办法可以继续阅读资产样本?
12131
PS:我在任何框架头文件中也找不到错误代码...
swift3 - 如何使用 AVAsset 和 Swift 3 读取时间码轨道?
我想读取时间码轨道的时间值。Apple 提供了一个出色的文档(参见Technical Note 2310),但它是用 Objective C 编写的。
我已将核心逻辑翻译为 Swift 3。它的工作方式与 ObjC 版本完全相同,这意味着CMSampleBuffer
从时间码轨道读取 a 并将其转换为CMBlockBuffer
. 当我创建数据指针CMBlockBufferGetDataPointer
(在
timecodeFrame()
函数中)时它失败了,这意味着原始数据总是给我 0 帧。所以归结为一个问题,我如何正确处理原始数据?
编辑:数据指针检索的目标 C 版本如下所示:
audio - 使用 AVFoundation 准确提取音频块的示例
问题
我希望从视频文件中的音轨中提取 LPCM 音频的样本准确范围。目前,我希望AVAssetReaderTrackOutput
通过AVAssetTrack
阅读AVURLAsset
.
尽管准备并确保使用AVURLAssetPreferPreciseDurationAndTimingKey
set to初始化资产,但在资产中YES
寻找样本准确的位置似乎是不准确的。
这表现为例如可变比特率编码的 AAC 流。虽然我知道 VBR 音频流在准确搜索方面会带来性能开销,但我愿意支付这笔费用,前提是我收到了准确的样本。
当使用例如扩展音频文件服务和ExtAudioFileRef
API 时,我可以实现样本精确的音频搜索和提取。与 , 类似AVAudioFile
,因为它建立在ExtAudioFileRef
.
然而,问题是我还想从仅音频文件 API 拒绝但在AVFoundation 中通过AVURLAsset
.
方法
CMTime
使用和定义提取的样本准确时间范围CMTimeRange
,并在 上设置AVAssetReaderTrackOutput
。然后迭代地提取样本。
笔记
给我的演示时间CMSampleBufferGetPresentationTimeStamp
似乎与我所追求的相匹配——但由于它似乎不准确,所以我没有机会更正和对齐我检索到的样本。
关于如何做到这一点的任何想法?
或者,有没有办法适应orAVAssetTrack
使用?AVAudioFile
ExtAudioFile
是否可以通过 访问音轨AudioFileOpenWithCallbacks
?
是否可以在 macOS 中以不同的方式从视频容器中获取音频流?
ios - AVFoundation 使用 Alpha 通道解码 prores4444 电影
我正在尝试使用 Swift 在 iOS 上解码带有 alpha 通道的 prores4444 视频,以覆盖用户视频上的复杂动画并将其导出到他的库。AVFoundation 文档不是很好,我正在努力寻找任何代码示例。
当我尝试将下面的代码与 AVAssetReaderTrackOutput 一起使用来解码视频时,我收到“AVAssetReaderOutput 当前不支持压缩输出”错误。
有谁知道如何读取带有 alpha 通道的 prores4444 的资产轨道以将其用于 AVMutableVideoCompositionLayerInstruction 的实例?
我应该使用其他编解码器吗?
ios - AVAssetReader,调用方法“startReading”失败,返回NO,Error Domain=AVFoundationErrorDomain Code=-11841 (AVErrorInvalidVideoComposition)
我逐帧阅读 MP4 视频,所以我使用 AVAssetReader ,它总是可以正常工作,但在“startReading”方法中失败的概率为 1/100。错误域=AVFoundationErrorDomain 代码=-11841 (AVErrorInvalidVideoComposition) - (void)test{
}
ios - 如何在解码video.mp4时获取iOS中每个视频帧的时间戳
场景:
我正在编写一个iOS 应用程序来尝试解码videoFile.mp4
. 我正在使用AVAssetReaderTrackOutput和AVAssetReader来解码视频文件中的帧。这很好用。videoFile.mp4
我基本上使用以下核心逻辑来获得每一帧。
代码:
sampleBuffer
是这里每个视频帧的缓冲区。
问题:
- 如何在这里获取每个视频帧的时间戳?
- 换句话说&更详细,我怎样才能得到每个
sampleBuffer
我返回的时间戳copyNextSampleBuffer
?
PS:
请注意,我需要以毫秒为单位的时间戳。
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 可能不是问题,所以问题可能在于转换为金属纹理?
知道我做错了什么吗?
谢谢!
ios - 使用 AVAssetReader 从 iPad 上的视频中读取帧时,图像的方向不正确
我想先确定几件事:
- 这适用于多部 iPhone(iOS 10.3 和 11.x)
- 这适用于任何 iPad 模拟器 (iOS 11.x)
我剩下的情况是,当我运行以下代码(从我的应用程序中压缩以删除不相关的代码)时,我得到的图像是颠倒的(横向)或旋转 90 度(纵向)。查看在此步骤之前处理的视频表明它的方向正确。所有测试均在 iOS 11.2.5 上完成。
* 更新 *
我做了一些进一步的测试,发现了一些更有趣的项目:
- 如果视频是从手机或外部来源导入的,则已正确处理
- 如果视频是在 iPad 上以纵向录制的,那么阅读器会将其向左旋转 90 度提取
- 如果视频是在 iPad 上以横向录制的,则阅读器将其倒置提取
- 在上述两种情况下,
UIImage
报告一个纵向的方向
所涉及代码的精简版本:
ios - 如何使用 AVAssetReader 导出 .aac 文件?
我正在使用SDAVAssetExportSession
转换MPMedaiItem
为.m4a
文件,它工作得很好。
链接:这里
这是我的代码,最终结果将是.m4a
文件,fileName
因为1.aac
此代码不起作用。
我不知道输入outputFileType
什么.aac
类型。
如果我传入.aac
文件名,这会给我错误:错误:无法写入输出文件
我想要的是.aac
格式的输出结果文件,我查看了类文件,但我无法弄清楚在“.aac”文件的代码中要更改什么。
有人有什么主意吗?