问题标签 [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.
timestamp - 从 AVAssetReader 读取的样本不按顺序
使用 AVAssetreader 从文件中读取样本缓冲区时遇到问题。读取的样本的时间戳似乎是乱序的。这是预期的结果还是我做错了什么。下面是我正在使用的读写代码——
当我打印读取的样本的时间戳时,它们的顺序不是这样......
请让我知道相同的原因以及如何创建具有不同演示时间的示例副本。
ios - 无法导出 AVPlayerItem
我AVQueuePlayer
用来在我们的应用程序中播放视频列表。我正在尝试缓存播放的视频,AVQueuePlayer
以便不必每次都下载视频。
因此,在视频播放完毕后,我尝试将 AVPlayerItem 保存到磁盘中,以便下次使用本地 URL 对其进行初始化。
我试图通过两种方法来实现这一点:
- 使用 AVAssetExportSession
- 使用 AVAssetReader 和 AVAssetWriter。
1) AVAssetExportSession 方法
这种方法的工作原理如下:
- 使用.
AVPlayerItem
_AVPlayerItemDidPlayToEndTimeNotification
- 收到上述通知后(视频播放完毕,因此已完全下载),用于
AVAssetExportSession
将该视频导出到磁盘中的文件中。
编码:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
然后
- (void)videoDidFinishPlaying:(NSNotification*)note
{
AVPlayerItem *itemToSave = [note object];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:itemToSave.asset presetName:AVAssetExportPresetHighestQuality];
exportSession.outputFileType = AVFileTypeMPEG4;
exportSession.outputURL = [NSURL fileURLWithPath:@"/path/to/Documents/video.mp4"];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch(exportSession.status){
case AVAssetExportSessionStatusExporting:
NSLog(@"Exporting...");
break;
case AVAssetExportSessionStatusCompleted:
NSLog(@"Export completed, wohooo!!");
break;
case AVAssetExportSessionStatusWaiting:
NSLog(@"Waiting...");
break;
case AVAssetExportSessionStatusFailed:
NSLog(@"Failed with error: %@", exportSession.error);
break;
}
}
该代码的控制台结果是:
2) AVAssetReader、AVAssetWriter 方法
编码:
- (void)savePlayerItem:(AVPlayerItem*)item
{
NSError *assetReaderError = nil;
AVAssetReader *assetReader = [[AVAssetReader alloc] initWithAsset:assetToCache error:&assetReaderError];
//(algorithm continues)
}
AVAssetReader
该代码在尝试使用以下信息分配/初始化时引发异常:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetReader initWithAsset:error:] Cannot initialize an instance of AVAssetReader with an asset at non-local URL 'https://someserver.com/video1.mp4''
***
任何帮助深表感谢。
ios - 使用 avassetreader 一个接一个地读取两个文件
我需要的是合并两个电影文件。我需要的是从文件中读取并将样本写入不同的文件。如何从一个文件中读取并在其结束后继续读取第二个文件。这样我就可以连续接收可以附加到 AVAssetwritter 的样本缓冲区。
ios - AvAssetReader 获取不正确的音频样本数
我正在尝试从视频中获取音轨作为原始 pcm 数据。计划是将这些数据传递到 libpd 中的 float* 表数组中。我设法获得了一些样本数据,但报告的样本数量太少了。例如,对于 29 秒的剪辑,我得到报告的 3968 个样本。我期待的是每个样本的幅度。对于 29 秒的音频长度,我希望有一个大小为 1278900 的数组(44.1khz)。
以下是我根据其他示例汇总的内容:
}
ios - 将视频文件与 AVAssetWriter 结合
我正在尝试将多个视频文件合并到具有特定编解码器设置的单个文件中。我曾经为此使用过AVAssetExportSession
,但现在我需要对编解码器进行更多控制而不是AVAssetExportSession
提供。
下面我发布了createFinalVideo:
处理视频文件组合的函数。
我采取的方法是尝试写入同一个文件,AVAssetWriter
而只需在应该附加下一个视频的位置开始会话。我知道这不起作用,因为AVAssetWriter
显然不允许这种行为。
以前,我AVAssetWriter
在 for 循环之外进行了定义,我试图为每个视频文件添加一个新的输入(for 循环的每次传递)。但是,似乎AVAssetWriter
不允许[AVAssetWriter startWriting]
在调用后添加新输入。
我的问题是如何以正确的方式做我想做的事情?
ios - 从“AVAssetReaderOutput *”分配给“AVAssetReaderTrackOutput *”的不兼容指针类型
在使用 GPUImage 库时,我收到警告“分配给“AVAssetReaderTrackOutput *”的不兼容指针类型来自“AVAssetReaderOutput *”。我已经编辑了“GPUImageMovie.m”,以便按照此处的建议启用音频播放。
请帮助我删除此警告。
ios - AVAssetReader / AVAssetWriter 加入不同分辨率的mp4文件
我正在编写一个 iPad 应用程序,我需要在其中加入不同分辨率的 mp4 文件。为此,我使用 AVAssetReader 的组合来读取 mp4 源文件,并使用 AVAssetWriter 将这些源文件写入单个 mp4 输出文件。
我尝试使用 AVAssetExportSession 但我遇到的问题是不同连接文件之间存在黑框。
我现在面临的问题是一切似乎都很好,但 AVAssetWriter 的完成处理程序从未被调用。
这是我的选择器,将 mp4 文件 URL、单个输出文件 URL 和完成处理程序列表作为输入。
我的输出文件存在并且 AVAssetWriter 存在,因为它是一个属性,但仍然没有调用完成处理程序。这有什么可以解释的?
谢谢你的帮助。
这有什么可以解释的?
macos - CMSampleBufferRef 和 AVAssetReaderMixAudioOutput 和 PCM 问题
所以我使用 AVAssetReaderMixAudioOutput 从 quicktime 文件中提取音频样本。在这种情况下,它是具有多个音频轨道的 ProRes 视频。
(4 轨,16 位,交错采样 littleEndian @ 48000)
我可以正常获取视频帧,但是当我调用 [myAssetReaderAudioMixOutput copyNextSampleBuffer] 时,我遇到了一些奇怪的问题....返回的音频似乎都在第一个通道中?
使用单独的 trackOutputReader,我得到第一帧每个轨道的第一个音频样本是:
620B 700E 0000 0000
但是当我使用 AVAssetReaderMixAudioOutput 我得到
D219 0000 0000 0000
(注意 620B + 700E = D219)所以看起来 AVAssetReaderMixAudioOutput 正在对 4 个通道中的所有值求和,并在轨道 1 中给出结果?
谁能解释为什么?以及如何解决?我需要一个解决方案,它会给我一个通道的 1:1 映射,因为它们在 quicktime 文件中,即。它需要适用于具有 1 通道和 16 通道音频的文件。
我通过自己在每个音频通道/tack 上执行 copyNextSampleBuffer 获得了第一个样本的正确值
这是我用来创建 myAssetReaderAudioMixOutput 的字典......
我正在使用以下代码从 CMSampleBuffer 中读取实际的音频样本/数据。
enteraudioBuffer = [assetReaderAudioMixOutput copyNextSampleBuffer]; if (audioBuffer) { CMBlockBufferRef audioBlockBuffer = CMSampleBufferGetDataBuffer(audioBuffer);
}
(抱歉,当我粘贴代码时,它似乎正在破坏代码,不知道为什么,我确实尝试了一些不同的东西 - 抱歉)
所以我认为我的问题要么在于设置字典,要么在于阅读样本。我使用相同的系统来读取单个轨道的样本,所以我怀疑是这样吗?我只是不明白为什么它给了我正确数量的 4 个音轨的数据/样本,但只将信息放在第一个音轨中?
最后我在 OSX 上,不关心 iOS。
感谢您的帮助,这非常令人沮丧!
- 詹姆士
cocoa - 使用 AVAssetReaderOutput 实现快进
我正在尝试在我的应用程序中添加快进功能,该应用程序大量使用 GPUImage,但遇到了一些内存问题。
在顶部-[GPUImageMovie readNextVideoFrameFromOutput:]
,我将其替换为:
有了这个:
这似乎工作了几秒钟,但由于内存问题,我的应用程序被杀死了。我认为这是高分配率,因为似乎没有任何泄漏。有人有这方面的经验吗?有什么想法吗?
video - AVfoundation 反向视频
我试图反向制作视频。在 AVPlayer 中播放资产时,我将 rate = -1 设置为以反向格式工作。但是如何导出该视频?我查看了文档。阅读有关 avassetwrite、sambuffers 和 composition 的信息,但没有找到任何方法来做到这一点。以下链接由我参考
http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
反向视频演示 - https://github.com/mikaelhellqvist/ReverseClip
上面的示例不再适用于 IOS 8。甚至它也没有反转音频。如果有人给我一点提示,那么我可以做进一步的事情。我从过去 5 天起就被困在这里,但在文档中没有找到任何答案。