小编Tro*_*ton的帖子

将SurfaceTexture渲染到Unity Texture2D

我较早提出了类似的问题,但是并没有很好地阐明它们,现在我想提一个建议,我在代码中做错了什么。

所以我想做的是将SurfaceTexture从Android插件渲染到Unity Texture2D。

统一代码:

public class AndroidHandler : MonoBehaviour {

    [SerializeField]
    private RawImage _rawImage;

    private Texture2D _inputTexture;
    private AndroidJavaObject androidStreamerObj;
    private System.IntPtr _nativePtr;

    void Start () {

        _rawImage.material.SetTextureScale("_MainTex", new Vector2(-1, -1));
        InitAndroidStreamerObject();
    }

    private void InitAndroidStreamerObject()
    {
        androidStreamerObj = new AndroidJavaObject("makeitbetter.figazzz.com.vitamiousing7.AndroidStreamer");

        Int32 texPtr = androidStreamerObj.Call <Int32> ("GetTexturePtr");
        Debug.Log("texture pointer? " + texPtr);
        Texture2D nativeTexture = Texture2D.CreateExternalTexture (128, 128, TextureFormat.RGBA32 , false, false, new System.IntPtr(texPtr));

        _rawImage.texture = nativeTexture;
    }

    public void StartStream()
    {
        string streamLink = "rtmp://live.hkstv.hk.lxdns.com/live/hks"; //"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"; //"rtmp://live.hkstv.hk.lxdns.com/live/hks";
        androidStreamerObj.Call("LaunchStream", streamLink); …
Run Code Online (Sandbox Code Playgroud)

c# android opengl-es texture2d unity-game-engine

6
推荐指数
2
解决办法
2674
查看次数

用于动态功能交付(包括 contentProvider)的 Android 应用程序包可能会失败

如果我们有以下参数,尝试使用新的 App Bundle 格式发布新应用程序(它是一个启动器,这也很重要)可能会很棘手:

  • 使用应用程序包 aab 发布格式
  • 使用动态功能交付(按需交付)
  • 该功能模块包括ContentProvider一个子库

这种方法导致了几个问题:

  1. 由于找不到类的问题,ContentProvider模块中的 无法启用,应在主清单中禁用它,然后在下载动态功能并可用于主应用程序后以编程方式启用。

  2. 如果我们使用SplitCompatInstall,该功能可以很好地下载,但实际上它被模拟为第一个并且没有安装,这会导致下一个问题

  3. 如果应用程序需要重新启动,因为 contentProvider 已以编程方式启用,并且由于它是持久的,所以它会尝试重新启动。失败是因为动态功能尚未安装(实际上是重新安装的SplitCompat.install()),因此类加载器无法找到相应的类并且应用程序崩溃。

  4. 如果应用程序是启动器,由系统自动重新启动,则会出现崩溃循环!

因此,对于这种特殊情况,我建议不要使用SplitCompat.install Prefer using deferredInstall()which download the feature apks,然后通过 android play.core 发布一个正确安装的任务。

此策略的缺点是您无法控制何时安装应用程序功能。您可能需要等待您的应用程序进入后台,以便它安装新功能。

如果您的应用程序是一个始终有一个正在运行的线程的启动器,它可能永远不会发生,即使在重新启动时也是如此(我所看到的)。最后,当您通过 Playstore 更新您的应用程序时,它最终会安装所有动态功能 apk(以及相关组件,例如ContentProvider

我愿意讨论这个话题

启用或禁用的代码ContentProvider

    public static void enableMyProviderForDynamicFeature(final Context context, final boolean enable) {
        Log.d("DebugDynamicFeature", "com.duapps.ad.stats.MyProvider"+ (enable?" enabling":" disabling"));
        final ComponentName componentName = new ComponentName(context, "com.duapps.ad.stats.MyProvider");
        final PackageManager packageManager = context.getPackageManager();
        packageManager.setComponentEnabledSetting(componentName, enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED …
Run Code Online (Sandbox Code Playgroud)

android-contentprovider android-app-bundle

5
推荐指数
0
解决办法
708
查看次数

如何理解H264的标题

00 00 00 01 67 42 00 1F E6 20 0A 00 B6 60 22 00 00 03 00 02 00 00 03 00 79 C0 00 00 10 FD D0 00 00 40 16 43 F4 A4 18 00 00 03 02 1D 97 00 00 1A B3 F1 FA 52 05 00 00 00 01 68

我的NAL单元看起来像这样我怎样才能理解RBSP中的数据,如有效负载大小以及数据表示什么

h.264

4
推荐指数
1
解决办法
1万
查看次数

对范围内的每个索引执行一些操作

C# 8.0 引入了结构体System.IndexSystem.Range

循环 a 的最简洁的方法是什么System.Range

var owners = new string[] {"Alice", "Bob", "Charlie"};
var pets = new string[] {"Dog", "Cat", "Bird"};

foreach (var index in 1..3) {
    var pet = pets[index];
    var owner = owners[index];
    Console.WriteLine($"{owner} owns a {pet}");
}
Run Code Online (Sandbox Code Playgroud)

上面这行foreach (var index in 1..3) {是编译错误。

类型“System.Range”不能在“foreach”语句中使用,因为它既没有实现“IEnumerable”或“IEnumerable”,也没有合适的“GetEnumerator”方法,其返回类型具有“Current”属性和“MoveNext”方法

c# ienumerable foreach c#-8.0

2
推荐指数
1
解决办法
3043
查看次数