如何使我自己编写的音频播放器可以在后台运行(Windows Phone 8.1- WinRT)?
Posted
技术标签:
【中文标题】如何使我自己编写的音频播放器可以在后台运行(Windows Phone 8.1- WinRT)?【英文标题】:How to make audio player that written my own can run in background (Windows Phone 8.1- WinRT)? 【发布时间】:2015-09-11 01:33:45 【问题描述】:我开发了一个使用解码器库的音频播放器,所以现在我不知道如何让它可以在后台运行。我已经阅读了“windows phone 的背景音频概述”,但它是系统播放器的默认设置。那么如何为我自己的音频播放器做到这一点?有什么解决办法吗?
谢谢!
【问题讨论】:
【参考方案1】:首先,“windows phone 的背景音频概述”是关于错误的平台。这是关于 Silverlight 的。如果你想要 WP8.1-WinRT 平台,here’s the correct overview article。
第二,是的,您不能拥有自己的音频播放器,因为它在操作系统中集成得太深(我的意思是通用音量控制、通话暂停等)。您可以实现自己的自定义解码器。你需要从任何你想要的地方读取媒体样本,并在被询问时以操作系统理解的任何格式将它们提供给操作系统实现的媒体管道。如果您正在开发类似 FLAC 播放器的东西,您可能需要提供未压缩的 PCM 样本。
如果您的目标是 WinRT 平台,则需要编写一些 C++/CX 代码来开发实现 IMFMediaSource 接口的 COM 对象。另一个实现 IMediaSource 和 IMFGetService 接口,并创建您的 IMFMediaSource 对象的实例。
如果您改为以 Silverlight 为目标,您将能够通过实现 a MediaStreamSource 以纯 C# 开发您的应用程序。如果您要从网络异步流式传输音频,由于 async-await 功能,C# 方法应该更容易。
【讨论】:
嗨,Soonts,实际上,我想为播放器制作一些音效,例如均衡器、回声……我认为最好的方法是在媒体管道中捕获 PCM 样本,然后在它输出到声音之前应用效果card ,但我不知道如何使用操作系统的媒体管道来实现这一点 通过构建包含自定义 MF 变换的自定义 MF 拓扑在桌面上相对容易。我不认为商店/电话应用程序实现了自定义拓扑。你或许可以效仿。在阅读器端,实现一个自定义 MF 媒体接收器,它将从管道接收未压缩的样本。在编写器端,实现一个自定义媒体源,将样本提供给渲染器管道。在两者之间手动传输这些样本。不要忘记属性。您将在实现暂停和查找功能时获得最大的乐趣。 当心两件事。 (1) 在手机上,与原生播放器相比,您的应用可能会浪费电力。通常,媒体解码器由 SoC 的 DSP 部分实现,非常省电。 (2) 任务艰巨,曾经我花了大约 2-3 周的全职时间来实现一个 MF 源。它同时播放视频和音频;仅音频应该更容易,但只有一点点。以上是关于如何使我自己编写的音频播放器可以在后台运行(Windows Phone 8.1- WinRT)?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何让 NSTimer 在 iOS 中为我的音频播放器在后台运行