AudioGraph 可以播放流吗?

Posted

技术标签:

【中文标题】AudioGraph 可以播放流吗?【英文标题】:Can AudioGraph play streams? 【发布时间】:2017-10-03 10:14:50 【问题描述】:

由于应用程序限制,我不能在我的 UWP 应用程序中使用 IStorageFile,因此,audioGraph.CreateFileInputNodeAsync() 不是一个选项。 我只能通过声音文件的内容获取(I/O)Stream

有没有办法配置AudioGraph 以使用这样的流作为输入?

谢谢!

【问题讨论】:

【参考方案1】:

有没有办法配置 AudioGraph 以使用这样的流作为输入?

根据Audio graphs类,输入节点分为三种:“设备输入节点”、“文件输入节点”和“音频帧输入节点”。不幸的是,没有您想要的流输入节点。您需要将流转换为StroageFile,然后使用CreateFileInputNodeAsync() 方法。

AudioGraph 可以播放流吗?

如果您只想播放流而不使用StorageFile 类,您可以考虑使用MediaPlayer。通过CreateFromStream 方法从IRandomAccessStream 创建MediaSource。例如:

XAML 代码:

<MediaPlayerElement x:Name="mediaplayer" AutoPlay="True"></MediaPlayerElement>
<Button x:Name="btnmedia" Click="btnmedia_Click" Content="media play"></Button>

后面的代码:

private async void btnmedia_Click(object sender, RoutedEventArgs e)

    ...
    Stream filestream = buffers.AsStream();
    IRandomAccessStream randomAccessStream = filestream.AsRandomAccessStream();
    MediaSource mediasource = MediaSource.CreateFromStream(randomAccessStream, "mp3");
    MediaPlayer player = new MediaPlayer();
    player.Source = mediasource;
    mediaplayer.SetMediaPlayer(player);

此外,很奇怪你不能在 UWP 应用中使用 StorageFile 类。它是文件系统的一个重要类。如果可能的话,我认为你应该考虑解决这个限制。

【讨论】:

【参考方案2】:

您可以创建一个 AudioFrameOutputNode 并将流的整个二进制内容提供给它,假设您可以将整个流读入内存中的二进制缓冲区。

如果您必须协调从流中并发读取并将数据馈送到 AudioFrameOutputNode,事情会变得更加复杂,但它仍然是可行的。

【讨论】:

谢谢。听起来像是一个选择。可悲的是,不是开箱即用。

以上是关于AudioGraph 可以播放流吗?的主要内容,如果未能解决你的问题,请参考以下文章

更新 MPRemoteCommandCenter 播放/暂停按钮

在 iOS 中播放 ogg 流

我应该使用线程编程来混合 2 个音频流吗?

QT Web引擎支持rtsp流吗

基于音频iOS的动画

如何暂停、停止和重置 AUFilePlayer?