如何在 iOS 平台的 .NET MAUI 中播放 RTSP?

问题描述 投票:0回答:0

问题背景

我是 .NET MAUI 和 iOS/Mac 的新手。我正在 .NET MAUI 中制作跨平台应用程序,需要显示来自 RTSP 的视频。我正在使用 CommunityToolkit 中最近可用(2023 年 1 月)的 MediaElement 组件,即 CommunityToolkit.Maui.MediaElement。我只是像这样提供一个 URI:

v.Source = CommunityToolkit.Maui.Views.MediaSource.FromUri($"rtsp://{i.IPAddress}:{i.Port}/")

为了方便起见,我们假设我正在尝试查看以下内容(在撰写本文时,这是一个将显示视频的活动流,例如,通过 Android):

rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4

具有以下编解码器:H264 - MPEG-4 AVC(第 10 部分)(h264),因此我认为它应该适用于 iOS。我正在使用运行 iOS 版本 16.2 的 iOS 模拟器,即。 “iPad Pro(11 英寸)(第 4 代)iOS 16.2”

复制

  1. 通过 .NET MAUI 应用程序模板创建一个新的 MAUI 应用程序。
  2. 添加 CommunityToolkit.Maui.MediaElement nuget 包(我使用的是 1.0.1 版本)。
  3. 修改MauiProgram.cs为:
using CommunityToolkit.Maui;
using Microsoft.Extensions.Logging;

namespace RtspExample;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .UseMauiCommunityToolkitMediaElement()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });

#if DEBUG
        builder.Logging.AddDebug();
#endif

        return builder.Build();
    }
}
  1. 将以下内容添加到 MainPage.xaml 中的 VerticalStackLayout,这是从模板自动生成的:
<toolkit:MediaElement
    Source="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4"
    ShouldAutoPlay="True"
    WidthRequest="400"
    HeightRequest="300"
    />

4a) 同时将此添加到 MainPage.xaml 中的 ContentPage 属性中:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

  1. 在 iOS 模拟器中运行项目。

结果

关于 MediaElement UI 控件的结果是一个控件,它有一个非活动播放按钮图形,位于控件的中心,有一条线穿过它,表示无法播放媒体。单击图像没有任何效果。此外,我观察到的日志中没有任何相关的错误/消息。此代码适用于 Android 和 Windows(假设您有正确的编解码器)。

基于对各种网络资源的审查,我得出了初步结论,即 Apple 没有提供通过 AVPlayer 访问 RTSP 的方法,而是更喜欢(?)您通过 HLS 访问视频流。

问题

是否有可能在 iOS 中通过 CommunityToolkit.Maui.MediaElement 访问和查看 RTSP?

如果是,请提供一些指导,例如,为什么我上面所做的不起作用,我应该怎么做才能让它起作用?

如果不能,它可以工作吗?如何工作?

是否有替代方案(我正在探索使用非命令行 ffmpeg 包装器的可能替代方案)?

ios maui rtsp
© www.soinside.com 2019 - 2024. All rights reserved.