如何在.NET/MAUI中使用ExoPlayer以编程方式创建TextureView?

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

目标

我正在尝试使用 .NET (MAUI) 中的 Android 平台代码创建一个 ExoPlayer,该代码渲染到 TextureView(而不是默认的 SurfaceView)。

背景

这是在 this thread 中针对 Android 进行讨论的。

在 .NET/MAUI 中,我们有以下适用于 ExoPlayer 的构造函数:

public unsafe StyledPlayerView (global::Android.Content.Context? context, global::Android.Util.IAttributeSet? attrs)

所以你可以运行它:

var PlayerView = new StyledPlayerView(androidContext, attributes); 
//presuming you have a working 'attributes' file...

第二个“属性”参数

global::Android.Util.IAttributeSet? attrs
是我们应该指定我们想要一个TextureView的地方。

从上面的链接中,我们必须传入一个 XML 文件,该文件首先转换为

IAttributeSet
对象,以将 TextureView 指定为目标表面。

给出的 XML 示例是:

<com.google.android.exoplayer2.ui.PlayerView
     android:id="@+id/player_view"
     app:surface_type="texture_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>

这种性质的 XML 文件必须通过以下方式转换为构造函数所需的属性:

val xmlAttributes = context.resources.getXml(R.xml.player_view).let {
    try {
        it.next()
        it.nextTag()
    } catch (e: Exception) {
        // do something, log, whatever
    }
    Xml.asAttributeSet(it)
}

问题

如果我想完全在 C# 脚本中工作,并且不想从任何地方加载 XML 文件,而是只想将这个最小的短 XML 片段声明为字符串或直接写入我的 C# 代码中,我可以这样做吗这个?

如果是这样,我该怎么做? IE。比如:

string xmlSnippet = @"<com.google.android.exoplayer2.ui.PlayerView
     android:id="@+id/player_view"
     app:surface_type="texture_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>"

我可以将其传递到创建属性的代码中吗? IE。就像 C# 版本的:

val xmlAttributes = context.resources.getXml(xmlSnippet).let {
    try {
        it.next()
        it.nextTag()
    } catch (e: Exception) {
        // do something, log, whatever
    }
    Xml.asAttributeSet(it)
}

简而言之...

任何人都可以提供纯 C# 代码的工作示例,该示例可以使 StyledPlayerView 构造函数所需的属性允许在 .NET 中创建基于 TextureView 的 Exoplayer 吗?

感谢您的帮助。

c# android .net exoplayer textureview
1个回答
0
投票

com.google.android.exoplayer2.ui.PlayerView
已弃用;请使用
androidx.media3.ui.PlayerView
代替。从代码构建视图的工作方式也与您想象的不同(正在处理 XML,并且仅提供对类的引用)。该文档将提供可以传递到构造函数中的所有相关属性名称,否则位于 XML 中的
app
命名空间下方。基本上不需要任何 XML 来构造
View
,但仍然需要以某种方式指示组件应出现在布局中的位置。

© www.soinside.com 2019 - 2024. All rights reserved.