【问题标题】:Playing audio from network on Xamarin.Forms在 Xamarin.Forms 上播放来自网络的音频
【发布时间】:2021-12-24 19:08:27
【问题描述】:

是否可以在通过 TCP 或 UDP 从网络接收的 Xamarin.Forms(仅限 Android,不需要 iOS)上播放音频?在 WPF 中,我使用的是NAudio,我有这样的东西:

// set output device
var provider = new BufferedWaveProvider(codec.RecordFormat);
outputDevice = new WaveOut();
outputDevice.DeviceNumber = 0;
outputDevice.Init(provider);
outputDevice.Play();

从 TCP 连接接收数据:

if (outputDevice != null)
{
   byte[] decoded = codec.Decode(data, 0, data.Length);
   provider.AddSamples(decoded, 0, decoded.Length);
}

在这种情况下,databyte[] - 它被添加到循环缓冲区,WaveOut 像流一样处理它,连续播放。该解决方案效果很好。

我在 Xamarin 中需要同样的东西 - 我想我需要某种包装器来围绕 AudioTrack,因为它是 apparently supports playing from byte stream。我应该怎么做,什么是“最好的”或首选的方式?基本上,如何播放通过纯 TCP/UDP 套接字接收的流式音频?

【问题讨论】:

    标签: c# xamarin.forms naudio


    【解决方案1】:

    Google 的 Android ExoPlayer 可以正确地流式传输该媒体格式。

    以下代码是 ExoPlayer 的一个非常简单的示例,但它会告诉您它确实会播放该流:

    var mediaUrl = "http://api-streaming.youscribe.com/v1/products/2919465/documents/3214936/audio/stream";
    var mediaUri = Android.Net.Uri.Parse(mediaUrl);
    
    var userAgent = Util.GetUserAgent(this, "ExoPlayerDemo");
    var defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
    var defaultDataSourceFactory = new DefaultDataSourceFactory(this, null, defaultHttpDataSourceFactory);
    var extractorMediaSource = new ExtractorMediaSource(mediaUri, defaultDataSourceFactory, new DefaultExtractorsFactory(), null, null);
    var defaultBandwidthMeter = new DefaultBandwidthMeter();
    var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
    var defaultTrackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
    
    exoPlayer = ExoPlayerFactory.NewSimpleInstance(this, defaultTrackSelector);
    exoPlayer.Prepare(extractorMediaSource);
    exoPlayer.PlayWhenReady = true;
    

    注意:

    1.exoPlayer是SimpleExoPlayer类型的类级变量;

    2.这是使用来自Xam.Plugins.Android.ExoPlayer 包的 Xamarin.Android 绑定库

    ExoPlayer 文档:

    https://developer.android.com/guide/topics/media/exoplayer

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      相关资源
      最近更新 更多