我较早提出了类似的问题,但是并没有很好地阐明它们,现在我想提一个建议,我在代码中做错了什么。
所以我想做的是将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) 如果我们有以下参数,尝试使用新的 App Bundle 格式发布新应用程序(它是一个启动器,这也很重要)可能会很棘手:
ContentProvider一个子库这种方法导致了几个问题:
由于找不到类的问题,ContentProvider模块中的 无法启用,应在主清单中禁用它,然后在下载动态功能并可用于主应用程序后以编程方式启用。
如果我们使用SplitCompatInstall,该功能可以很好地下载,但实际上它被模拟为第一个并且没有安装,这会导致下一个问题
如果应用程序需要重新启动,因为 contentProvider 已以编程方式启用,并且由于它是持久的,所以它会尝试重新启动。失败是因为动态功能尚未安装(实际上是重新安装的SplitCompat.install()),因此类加载器无法找到相应的类并且应用程序崩溃。
如果应用程序是启动器,由系统自动重新启动,则会出现崩溃循环!
因此,对于这种特殊情况,我建议不要使用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) 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中的数据,如有效负载大小以及数据表示什么
C# 8.0 引入了结构体System.Index和System.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”方法