C# 如何在c中播放m3u8在线广播文件#

C# 如何在c中播放m3u8在线广播文件#,c#,vb.net,c#-4.0,C#,Vb.net,C# 4.0,我想用c#中的Windows Media Player组件播放一个m3u8url 为什么这对我不起作用: WMPlayer.URL = "http://headend1.iranseda.ir:8134/hls-live/livepkgr/_definst_/radio-avaa/radio-avaa-40k.m3u8"; 第一个样本 要播放m3u8文件,您可以使用 第二个样本 下面是另一个使用 对于本例,我创建了一个控制台应用程序并安装了NuGet软件包: Vlc.DotNet.Core

我想用c#中的Windows Media Player组件播放一个
m3u8
url

为什么这对我不起作用:

WMPlayer.URL = "http://headend1.iranseda.ir:8134/hls-live/livepkgr/_definst_/radio-avaa/radio-avaa-40k.m3u8";
第一个样本 要播放m3u8文件,您可以使用

第二个样本 下面是另一个使用

对于本例,我创建了一个控制台应用程序并安装了NuGet软件包:

  • Vlc.DotNet.Core
  • Vlc.DotNet.Core.Interops
从Download.videolan.org/pub/videolan/vlc/下载win32和win64:

  • libvlc.dll
  • libvlccore.dll
  • plugins文件夹(您可以从该文件夹中删除未使用的插件)
将其放入项目根文件夹中的lib/x86和lib/x64文件夹中

class Program
{
    static void Main(string[] args)
    {
        var vlcService = new PlayerVLCService();

        vlcService.Play(new Uri("[YourPath].m3u8"));

        Console.ReadLine();
        vlcService.Stop();
    }
}

public class PlayerVLCService
{
    private VlcMediaPlayer _vlcMediaPlayer;
    public PlayerVLCService()
    {
        var currentAssembly = Assembly.GetEntryAssembly();
        var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
        if (currentDirectory == null)
            return;

        DirectoryInfo vlcLibDirectory;
        if (IntPtr.Size == 4)
            vlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\lib\x86\"));
        else
            vlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\lib\x64\"));

        _vlcMediaPlayer = new VlcMediaPlayer(vlcLibDirectory);
    }

    public void Play(Uri playPathUri)
    {
        _vlcMediaPlayer.SetMedia(playPathUri, null);
        _vlcMediaPlayer.Play();
    }

    public void Stop()
    {
        _vlcMediaPlayer.Stop();
    }
}

m3u8是一个播放列表文件,而不是音乐文件本身,因此您需要获取播放列表,并以播放列表整理语言和相关标记对文件进行流式处理。奇怪的是,对于其他m3u8,此代码可以正常工作。我为这个问题添加了另一个版本的解决方案。
class Program
{
    static void Main(string[] args)
    {
        var vlcService = new PlayerVLCService();

        vlcService.Play(new Uri("[YourPath].m3u8"));

        Console.ReadLine();
        vlcService.Stop();
    }
}

public class PlayerVLCService
{
    private VlcMediaPlayer _vlcMediaPlayer;
    public PlayerVLCService()
    {
        var currentAssembly = Assembly.GetEntryAssembly();
        var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
        if (currentDirectory == null)
            return;

        DirectoryInfo vlcLibDirectory;
        if (IntPtr.Size == 4)
            vlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\lib\x86\"));
        else
            vlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\lib\x64\"));

        _vlcMediaPlayer = new VlcMediaPlayer(vlcLibDirectory);
    }

    public void Play(Uri playPathUri)
    {
        _vlcMediaPlayer.SetMedia(playPathUri, null);
        _vlcMediaPlayer.Play();
    }

    public void Stop()
    {
        _vlcMediaPlayer.Stop();
    }
}