首页 文章

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

提问于
浏览
0

我正在使用这个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

    权限可能吗?在project site中它表明对于Android:

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

  • 0

    默认情况下,使用ExoPlayerAudioService .

    在ExoPlayerAudioService.GetSource方法中存在url escape问题

    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);

    I.E. http://example.com/path_to_audio.mp3将被转义为"http%3A%2F%2Fexample.com%2Fpath_to_audio.mp3",因为HTTP错误 .

    修复只是跳过网址逃脱 .

  • 0

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

    • Hyper-v - >虚拟交换机管理器,添加外部网络 .

    • Hyper-v - >虚拟机 - >设置,添加新硬件 - >网络适配器并设置为外部网络 .

    • "Visual Studio Emulator for Android"桌面应用,推出手机vm,
      在Visual Studio中

    • ,部署并运行app .

    声音现在应该来自外部源 .

相关问题