在Xamarin Android MediaManager中流式播放mp3无法正常工作

时间:2017-05-09 17:22:46

标签: android xamarin audio-streaming

我正在使用这个nu-get软件包在Xamarin Android项目中传输mp3网址: https://github.com/martijn00/XamarinMediaManager

我按照链接中的说明进行操作...它显示在通知栏中播放的音乐,但它不起作用(没有声音,甚至没有开始播放歌曲)。

代码段:

clickButton.Click += (sender, args) =>
{
    ClickButtonEvent();
};

private static async void ClickButtonEvent()
{
    await CrossMediaManager.Current.Play("http://www.montemagno.com/sample.mp3");
}

我构建了链接中包含的样本,我从他们的样本中得到了相同的结果。也部署在真实设备上,结果相同! 图片:

我错过了什么吗?

或者图书馆坏了吗?

3 个答案:

答案 0 :(得分:0)

我在Hyper-v上使用Android Emulator遇到了这个问题。事实证明,网络设置为内部。因此无法找到http://www.montemagno.com/sample.mp3。我的解决方法:

  1. Hyper-v - >虚拟交换机管理器,添加外部网络。
  2. Hyper-v - >虚拟机 - >设置,添加新硬件 - >网络适配器并设置为外部网络。
  3. “适用于Android的Visual Studio模拟器”桌面应用,启动手机vm,
  4. 在Visual Studio中,部署并运行app。
  5. 声音现在应该来自外部来源。

答案 1 :(得分:0)

权限可能吗?在project site中,它说明了Android:

  

您必须请求AccessWifiState,Internet,MediaContentControl和   WakeLock权限

答案 2 :(得分:0)

默认情况下,使用ExoPlayerAudioService。

ExoPlayerAudioService.GetSource方法中存在url转义问题

private IMediaSource GetSource(string url)
        {
            string escapedUrl = Uri.EscapeDataString(url);
            var uri = Android.Net.Uri.Parse(escapedUrl);
            var factory =  URLUtil.IsHttpUrl(escapedUrl) || URLUtil.IsHttpsUrl(escapedUrl) ? GetHttpFactory() : new FileDataSourceFactory();
            var extractorFactory = new DefaultExtractorsFactory();
            return new ExtractorMediaSource(uri
                , factory
                , extractorFactory, null, this);
        }

string escapedUrl = Uri.EscapeDataString(url);

即。 http://example.com/path_to_audio.mp3将被转义为“http%3A%2F%2Fexample.com%2Fpath_to_audio.mp3”,因为HTTP错误。

修复只是跳过网址转义。