如何在Xamarin.Forms中实时流式传输.m3u8视频文件

时间:2019-04-29 16:20:17

标签: c# xamarin.forms video-streaming live-streaming hls

(Xamarin.Forms的新增功能) 我想在Xamarin.Forms应用程序中实时播放.m3u8视频文件吗?

这是来自Microsoft's Documentation

  

“但是VideoPlayer没有可用的流选项,因为   iOS和Android不支持从流中播放视频。”

[来自“视频源”标题上方的段落中

有可能吗? 我有什么选择?

这是我第一次需要播放视频,我搜索了一些库并找到Xamarin.MediaManager,但它在iOS上引发了异常(在初始化视频播放器时),并且在Android上也没有播放m3u8文件(它正在播放带有https网址的mp3和mp4文件)

因此,我决定使用Xamarin.Forms Documentation

中提供的视频播放器自定义渲染器
  • 现在我可以从URL播放m3u8文件
  • 即使在iOS上播放http网址(以前也有ATS问题)
  • 但不能播放实时流

除了上面链接的文档以外,这是我关注的VideoPlayer Demo/Tutorial

XAML中的VideoPlayer

        <video:VideoPlayer VerticalOptions="FillAndExpand"
                           HorizontalOptions="FillAndExpand"
                           BackgroundColor="Black"
                           HeightRequest="200"
                           Margin="0,0,0,0"
                           x:Name="FormsVideoPlayer"/>

这就是我设置来源的方式

                FormsVideoPlayer.Source = new UriVideoSource
                {
                    Uri = url
                };

                FormsVideoPlayer.Play();

1 个答案:

答案 0 :(得分:0)

找到解决方案:

我是通过在笔记本电脑上生成实时流的视频URL的。我正在使用的服务以某种方式将它们与PC绑定(假设)。

我不知道如何操作,但是只能在生成URL的笔记本电脑上播放视频(在我向应用程序添加UWP项目后才找到)

= >>一旦我开始从应用程序内部生成URL,视频便开始工作。

现在,我使用以下代码将CrossMediaManager用于HLS视频:

        if (isHLS)
        {
            var item = await CrossMediaManager.Current.MediaExtractor.CreateMediaItem(URL);

            item.MediaType = MediaManager.Media.MediaType.Hls;
            CrossMediaManager.Current.MediaPlayer.VideoView.ShowControls = false;

            await CrossMediaManager.Current.Play(item);
        }
        else
        {
            await CrossMediaManager.Current.Play(URL);
        }

Xaml:

<ContentPage.Content>
    <mm:VideoView VerticalOptions="FillAndExpand"
                  HorizontalOptions="FillAndExpand"
                  BackgroundColor="Black"
                  x:Name="mmVideoView"
                  />
</ContentPage.Content>

以防万一有人遇到类似问题