avplayer - AVPlayer:从 aac 文件中提取定时元数据
问题描述
情况:
我有一个由 aac 文件组成的纯音频 HLS 流。我已经确认使用 ffprobe 将定时元数据附加到流中。不幸的是,我无法从 AVPlayer 访问定时元数据。
FFProbe 的输出
~ ffprobe index_1_296.aac
....
Input #0, aac, from 'index_1_296.aac':
Metadata:
id3v2_priv.com.apple.streaming.transportStreamTimestamp: \x00\x00\x00\x00.\x00\x05\xc0
Duration: 00:00:06.02, bitrate: 96 kb/s
Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 96 kb/s
我做了什么:
在包含 AVPlayer 的类中,我扩展了AVPlayerItemMetadataOutputPushDelegate并实现了metadataOutput方法。
代码
我按照我在这里找到的一个例子:https://dcordero.medium.com/hls-timed-metadata-with-avplayer-9e20806ef92f但是下面是实现该metadataOutput
方法的代码:
func metadataOutput(_ output: AVPlayerItemMetadataOutput, didOutputTimedMetadataGroups groups: [AVTimedMetadataGroup], from track: AVPlayerItemTrack?) {
if let item = groups.first?.items.first
{
item.value(forKeyPath: #keyPath(AVMetadataItem.value))
let metadataValue = (item.value(forKeyPath: #keyPath(AVMetadataItem.value))!)
print("Metadata value: \n \(metadataValue)")
} else {
print("MetaData Error")
}
}
我所看到的:
当播放包含 .ts 文件的清单时,此metadataOutput
方法由定时元数据触发。但是,当我播放仅包含 .aac 文件的清单时,该metadataOutput
方法永远不会被触发。
可能相关的问题:
问题:
- 有没有人成功使用 AVPlayer 从 aac 文件中提取定时元数据?
- 有没有人有任何我可以回顾的例子?
解决方案
推荐阅读
- javascript - 检测浏览器是否支持语音合成标记语言
- java - Why does fetching results using "new Throwable().getStackTrace()[1].getMethodName()" termed as expensive?
- c# - Restsharp:自动映射查询参数
- php - 如何将 php ext dir 保存在变量中?
- python - Python animated cursor next to a printed line
- c - I got different output when using 2 different compilers
- ant - 从 css 文件中收集字符串并将它们保存到新的 css 文件中
- jupyter-notebook - 我可以恢复在 GCP Dataproc 中删除的 Jupyter 笔记本吗
- sql - 我的连接字符串中的服务器标记格式错误
- snakemake - How to have multiple users run the same pipeline in snakemake - metadata permissions issue