在AVPlayer中获取averagePowerForChannel

2024-04-22

我怎样才能得到averagePowerForChannel in AVPlayer为了在我的音乐应用程序上制作音频可视化! 我已经完成了可视化部分,但我卡在了它的引擎(实时音量通道)中。

我知道通过使用AVAudioPlayer它可以很容易地使用.meteringEnabled财产但由于某些已知原因AVPlayer是我的应用程序中的必备品! 我实际上正在考虑使用AVAudioPlayer旁边还有AVPlayer得到想要的结果,但这听起来有点混乱的解决方法, 这会如何影响性能和稳定性? 提前致谢


我有一个问题AVPlayer可视化大约两年。就我而言,它涉及 HLS 直播,在这种情况下,据我所知,您将无法运行它。

EDIT这不会让您访问averagePowerForChannel:方法,但您将可以访问原始数据,并通过 FFT 等获得所需的信息。

不过,我让它可以与本地播放一起使用。您基本上等待玩家的玩家项目启动并运行轨道。那时你需要修补一个MTAudioProcessingTap进入音频混合。

处理水龙头将运行您指定的回调,您将能够根据需要计算原始音频数据。

这是一个简单的例子(抱歉把它放在 ObjC 中):

#import <AVFoundation/AVFoundation.h>
#import <MediaToolbox/MediaToolbox.h>

void init(MTAudioProcessingTapRef tap, void *clientInfo, void **tapStorageOut) {};
void finalize(MTAudioProcessingTapRef tap) {};
void prepare(MTAudioProcessingTapRef tap, CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat) {};
void unprepare(MTAudioProcessingTapRef tap) {};
void process(MTAudioProcessingTapRef tap, CMItemCount numberFrames, MTAudioProcessingTapFlags flags, AudioBufferList *bufferListInOut, CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut) {};

- (void)play {
    // player and item setup ...

    [[[self player] currentItem] addObserver:self forKeyPath:@"tracks" options:kNilOptions context:NULL];
}

//////////////////////////////////////////////////////

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)changecontext:(void *)context
    if ([keyPath isEqualToString:@"tracks"] && [[object tracks] count] > 0) {
        for (AVPlayerItemTrack *itemTrack in [object tracks]) {
            AVAssetTrack *track = [itemTrack assetTrack];

            if ([[track mediaType] isEqualToString:AVMediaTypeAudio]) {
                [self addAudioProcessingTap:track];
                break;
            }
        }
}

- (void)addAudioProcessingTap:(AVAssetTrack *)track {
    MTAudioProcessingTapRef tap;
    MTAudioProcessingTapCallbacks callbacks;
    callbacks.version = kMTAudioProcessingTapCallbacksVersion_0;
    callbacks.clientInfo = (__bridge void *)(self);
    callbacks.init = init;
    callbacks.prepare = prepare;
    callbacks.process = process;
    callbacks.unprepare = unprepare;
    callbacks.finalize = finalise;

    OSStatus err = MTAudioProcessingTapCreate(kCFAllocatorDefault, &callbacks, kMTAudioProcessingTapCreationFlag_PostEffects, &tap);

    if (err) {
        NSLog(@"error: %@", [NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil]);
        return;
    }

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];

    AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
    [inputParams setAudioTapProcessor:tap];
    [audioMix setInputParameters:@[inputParams]];

    [[[self player] currentItem] setAudioMix:audioMix];
}

有一些讨论正在进行中我的问题 https://stackoverflow.com/questions/19403584/avplayer-hls-live-stream-level-meter-display-fft-data两年多前的作品,所以一定要检查一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在AVPlayer中获取averagePowerForChannel 的相关文章

  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • iOS UITableViewCell需要按两次才能调用didSelectRowAtIndexPath

    我有一个 UITableView 有时需要您触摸它两次才能选择一个单元格 更多细节 仅当表格一直向上或一直向下滚动后才需要两次触摸 只需第二次触摸即可呼叫didSelectRowAtIndexPath 当表格以自然的 向上滚动位置 打开时
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • Swift 3 '[UIApplicationLaunchOptionsKey:任意]?'无法转换为 '[String : NSString]'

    我有一个 TVOS 应用程序已从 Swift 2 转换为 Swift 3 但出现以下错误 我不确定如何让它安静下来 UIApplicationLaunchOptionsKey 任意 无法转换为 String NSString 它出现在这段代
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 在WKWebview中设置useragent

    如何在 WKWebView 中设置自定义用户代理字符串 我正在尝试嵌入我的应用程序的版本 以便我的服务器端可以看到可用的功能 我找到了以下方法 let userAgent MyApp 1 33 7 request setValue user
  • 在模拟器中运行应用程序时删除本地通知的 iOS 权限警报

    我正在尝试编写验收测试KIF https github com kif framework KIF在一个很早就要求本地通知权限的应用程序上 不幸的是 由于 iOS 模拟器安全原因无法使用 KIF 自动接受 iOS 权限警报 https gi
  • Cognito/IAM 策略和 S3 获取对象

    我正在尝试将 S3 和 Cognito 集成到我的 iOS 应用程序中 但到目前为止尚未成功 我相信该错误与我针对 Auth 和 Unauth 用户的 IAM 策略有关 所以这是我的政策 Version 2012 10 17 Stateme
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 为什么 Kotlin 编译器需要 var 属性的显式初始化器?

    我无法理解以下 Kotlin 文档 The initializer getter and setter are optional Property type is optional if it can be inferred from th
  • 无法读取未定义的属性“forEach”

    var funcs 1 2 forEach i gt funcs push gt i 为什么会产生下面的错误 TypeError Cannot read property forEach of undefined at Object
  • 如何为 JVectorMap jquery 插件生成新的自定义地图?

    有用的链接 JVectorMap http jvectormap com http jvectormap com 购物中心示例 http jvectormap com examples mall http jvectormap com ex
  • Scala 中 def 和 val 的区别

    循环定义如下 def loop Boolean loop 当x定义为 def x loop然后控制台中会显示 x Boolean and 当x定义为 val x loop然后就进入无限循环 我知道 def 正在使用按名称调用 而 val 正
  • 不允许主机连接到此 MySQL 服务器以进行客户端-服务器应用程序

    我刚刚将表从一台 Web 主机导出到另一台 AWS 以为一切都会顺利 是的 没错 好吧 一切可能出错的事情都已经出错了 尝试查询我的数据库时出现此错误 我之前没有得到过 SQLSTATE HY000 1130 Host
  • Android:如何使用单个按钮执行多个任务

    我有 1 个按钮处于活动状态 我想使用这个 1 按钮来执行多项任务 那么我该怎么办呢 如果我第一次按此按钮 则更改 2 次按钮 如果我按第二次 它就会更新我的数据 但这只是第一次工作第二次就不起作用了 查看我的代码我尝试了什么 Intent
  • 更好的数据库设计是:更多的表还是更多的列?

    一位前同事坚持认为 具有更多表且每个列较少的数据库比具有较少表且每个列较多的数据库更好 例如 您将拥有一个名称表 一个地址表 一个城市表等 而不是包含名称 地址 城市 州 邮政编码等列的客户表 他认为这种设计更加高效和灵活 也许它更灵活 但
  • Caffe 中的预测 - 异常:输入 blob 参数与网络输入不匹配

    我使用 Caffe 使用非常简单的 CNN 结构对非图像数据进行分类 我在尺寸为 n x 1 x 156 x 12 的 HDF5 数据上训练网络没有任何问题 但是 我在对新数据进行分类时遇到了困难 如何在不进行任何预处理的情况下进行简单的前
  • CUDA Thrust 和 sort_by_key

    我正在寻找 CUDA 上的排序算法 它可以对元素数组 A 双精度 进行排序 并返回该数组 A 的键 B 数组 我知道sort by keyThrust 库中的函数 但我希望元素数组 A 保持不变 我能做些什么 我的代码是 void sort
  • 在环形应用程序中捕获异常的惯用方法

    处理环形应用程序中的异常的惯用方法是什么 我想捕获异常并返回 500 页 我怎么做 我在下面的代码中使用了 Mustache 但是它不起作用 def my app try app wrap logger true wrap keyword
  • java.util.logging.Logger 不尊重 java.util.logging.Level?

    在普通 Java SE 6 环境中 Logger l Logger getLogger nameless l setLevel Level ALL l fine somemessage Eclipse 控制台中没有显示任何内容 l info
  • 获取实体的请求。attribute == @"somevalue"

    如何设置提取请求以仅从具有一个特定值的实体属性中提取数据 这是我之前使用过的基本代码 void fetchResults NSFetchRequest fetchRequest NSFetchRequest fetchRequestWith
  • 在 React 中插入 HTML 注释

    有没有办法在 React JSX 中插入 HTML 注释节点 就像插入组件或 DOM 节点一样 例如 类似 React createElement Comment comment text 将渲染为 这个想法是评论在页面上可见 所以 thi
  • 基于订阅的 Web 服务业务/网站的最佳框架? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一项新的网络服务 该服务对于低流量用户免费 对于高流量用户则基于订阅 大多数用户可能会通过
  • Spring Integration DSL - 可访问标头的出站网关

    我在 Spring 集成方面遇到了问题 我正在使用 Spring Boot 1 4 0 RELEASE Spring Integration 4 3 1 RELEASE Spring Integration DSL 1 2 0 M1 我正在
  • gcc 链接的默认库?

    假设我有一个非常简单的 C 文件 称为 foo c int main printf foo return 0 现在我调用 gcc gcc foo c 当我调用 gcc 时 没有选项 如上面的示例 默认链接哪些库以及它们位于何处 在 Mac
  • 为什么 Hibernate Envers 忽略我的自定义 RevisionEntity?

    我正在使用 JPA 2 1 由 hibernate 4 2 11 支持 和 spring 4 0 2 开发一个应用程序 我们正在使用 Envers 来审核项目实体的变更 效果很好 当我们尝试使用自定义修订实体时 问题就出现了 正如 Enve
  • 使用凭证进行跨源资源共享

    我有一个跨多个子域 example com blog example com 和 app example com 的通用身份验证表单 登录表单必须将此数据提交到 example com 无论它显示在哪里 所以我想到使用 CORS 但是这样
  • 将选择值关联到 Angular 4 中的 ngModel

    我正在使用 Angular 4 尝试将 Value 关联到 ngModel 但得到Null 请帮助我连接ngValue to ngModel
  • 在AVPlayer中获取averagePowerForChannel

    我怎样才能得到averagePowerForChannel in AVPlayer为了在我的音乐应用程序上制作音频可视化 我已经完成了可视化部分 但我卡在了它的引擎 实时音量通道 中 我知道通过使用AVAudioPlayer它可以很容易地使