Solución de problemas¶
Esta página recoge los síntomas que tienes más probabilidades de encontrar y la causa raíz de cada uno. Los errores están agrupados por categoría. Las páginas por plataforma (Windows, Android, macOS, iOS) también tienen una tabla de solución de problemas específica del target — consulta ambas.
Bootstrap e inicialización¶
[VisioForge] Native runtime not found at <path>¶
VisioForgeEnvironment.Configure() no pudo encontrar la carpeta de nativos incluida en disco. Causas:
- La importación del
.unitypackagefue parcial. Reimporta con todos los ítems marcados. - En Standalone macOS, el Build Target no incluyó el flavor macOS — el paquete se construyó sin
-IncludeMacOS. Reconstruye el paquete o importa la variante acumulativa. - En Android, el paso de preparación del flavor por Build Target no se ejecutó. Abre
Assets/Plugins/Android/libs/arm64-v8a/en la ventana Project y confirma quelibgstreamer_android.soestá presente.
[VisioForge] InitializeSdk() called before Configure() succeeded¶
Una rama de plataforma de Configure() falló y dejó s_envConfigured = false. La línea anterior de la Consola ([VisioForge] Android GStreamer init failed: …, [VisioForge] SetDllDirectoryW failed (Win32 error …), etc.) explica por qué. Arregla el problema subyacente y deja que Configure() reintente en la siguiente carga de escena.
UnityException: get_dataPath can only be called from the main thread¶
Un hilo de fondo dentro del SDK o tu script leyó Application.dataPath (o Application.streamingAssetsPath, o Application.platform) sin pasar por la ruta cacheada. El arreglo:
- En iOS,
Configure()precargas_cachedNativesPathen el hilo principal — confirma que la Consola muestre[VisioForge] iOS environment configured (GStreamerX.framework via @rpath).. Si está ausente, el bootstrap abortó antes del precargado y el siguiente lector golpea la ruta perezosa fuera del hilo principal. - En tu propio código, no llames a la API Unity desde un
Task.Run, callback pad-added de GStreamer o handler de señal del bus. Marshallea la llamada de vuelta al hilo principal conUnitySynchronizationContexto estableciendo un flag que el métodoUpdate()revise.
InvalidOperationException: Unity Android bootstrap requires com.unity3d.player.UnityPlayer.currentActivity to be available¶
El bootstrap Java de Android no pudo obtener un currentActivity no nulo en BeforeSceneLoad. Ocurre en Wear OS, variantes Android TV sin UnityPlayerActivity y hosts Unity-as-a-library que aún no han asignado el campo. Difiere Configure() a tu primer evento de Activity observable:
private void Start()
{
if (!VisioForgeIsConfigured())
VisioForgeEnvironment.Configure(); // re-ejecuta tras Activity lista
VisioForgeEnvironment.InitializeSdk();
}
Configure() es idempotente — una llamada redundante tras una exitosa es inocua.
Bibliotecas ausentes¶
DllNotFoundException: gstreamer-1.0-0¶
Windows: la carpeta de nativos falta en Assets/StreamingAssets/VisioForge/x64/. Reimporta el paquete. Si estás ejecutando un build Standalone, confirma que <game>_Data/StreamingAssets/VisioForge/x64/ también está poblada — Unity la copia literalmente, así que una carpeta ausente en el build significa que ya faltaba en el proyecto.
DllNotFoundException: libgstreamer_android¶
Android: el Scripting Backend está en Mono. Cambia a IL2CPP en Project Settings → Player → Other Settings → Configuration. Mono no está soportado en Android por el propio Unity.
DllNotFoundException: libgstreamer-1.0.0 (macOS)¶
El bundle .app no contiene libgstreamer-1.0.0.dylib en ninguna de las ubicaciones sondeadas (Contents/PlugIns, Contents/PlugIns/macOS, Contents/Frameworks, Contents/Resources/Data/Plugins/macOS). Reconstruye el paquete con -IncludeMacOS y vuelve a exportar el build Standalone.
dyld: Library not loaded: @rpath/GStreamerX.framework/GStreamerX¶
iOS: el slot PluginImporter del framework no obtuvo Add To Embedded Binaries = YES. Reimporta el paquete; el archivo .meta del paquete marca el framework correctamente. Si sustituiste el framework manualmente, restaura el .meta desde una importación fresca.
IL2CPP / stripping gestionado¶
MissingMethodException: GLib.SignalArgs..ctor (o tipos GStreamer / GLib similares)¶
IL2CPP eliminó un tipo gestionado al que el SDK accede por reflexión. Assets/VisioForge/link.xml preserva estos tipos — confirma que el archivo existe en tu proyecto. Si lo eliminaste accidentalmente, reimporta el .unitypackage. No edites link.xml para quitar reglas; el paquete distribuye un conjunto probado.
MarshalDirectiveException en la primera llamada al SDK¶
Una signatura [DllImport] fue eliminada o falló el marshalling de su delegado. Misma causa raíz que MissingMethodException — confirma que link.xml está en su sitio y que IL2CPP no está configurado con un nivel de stripping extra-agresivo que lo anule.
TLS / red¶
El stream RTSP agota timeout antes de conectar (iOS 14+)¶
iOS bloquea el primer intento de conexión a cualquier dirección de red local hasta que tu Info.plist declare por qué tu app necesita acceso LAN. Añade:
<key>NSLocalNetworkUsageDescription</key>
<string>Esta app reproduce video de cámaras IP locales en tu red.</string>
Los revisores del App Store esperan una razón cara al usuario, no boilerplate.
RTSPS / HTTPS falla con error TLS / verificación de certificado¶
El backend OpenSSL TLS de GIO no pudo encontrar un paquete CA:
- Windows / macOS:
Configure()estableceSSL_CERT_FILEalca-certificates.crtincluido. Si falta, la Consola registra[VisioForge] CA certificate bundle not found at …. Vuelve a preparar los nativos mediantedeploy-unity-natives.ps1y reconstruye. - Android / iOS: el paquete CA es un recurso gestionado embebido extraído a
<filesDir>/ssl/certs/. Si la extracción falla, la Consola registra[VisioForge] CA cert extraction failed. Confirma queVisioForge.Core.dllestá enAssets/Plugins/Android/(Android) oAssets/Plugins/iOS/Managed/(iOS).
Para certificados autofirmados, o instálalos en el almacén de confianza del sistema (fuera del alcance del SDK) o — solo para pruebas — deshabilita la verificación de pares en el bloque fuente. El nombre de la propiedad a nivel de bloque varía; consulta Ver una cámara RTSP en Unity para el ejemplo RTSP.
URLs http:// planas fallan en iOS¶
App Transport Security (ATS) bloquea http:// por defecto. O cambia a https:// o, si debes mantener http://, añade NSAppTransportSecurity → NSAllowsArbitraryLoads = YES a tu Info.plist. Ten en cuenta que los revisores del App Store pueden preguntar por qué lo necesitas.
Ciclo de vida del Editor¶
El Editor se cuelga en "Reloading domain" tras Play / Stop¶
Disable Domain Reload está desactivado. Reactívalo en Project Settings → Editor → Enter Play Mode Settings → ajusta When entering Play Mode a Reload Scene only o Do not reload Domain or Scene. El diálogo de configuración de un único uso del paquete lo configura por ti; si hiciste clic en Skip, ajústalo manualmente.
El Editor crashea en el segundo Play¶
El SDK fue apagado en Stop y reinicializado en Play. El arreglo:
- No llames a
VisioForgeX.DestroySDK()enOnDestroyni en ningún otro sitio. El SDK es global al proceso y se reusa entre sesiones Play. - Los players de ejemplo (
MediaBlocksPlayer,RTSPViewerPlayer) siguen este patrón — copia la forma de su teardown (libera solo el pipeline por-Play; nunca destruye el SDK).
Consulta Bootstrap y ciclo de vida para la explicación completa.
El Editor se vuelve inestable tras una sesión de edición larga¶
Recompilaciones de scripts repetidas acumulan estado de GStreamer a través de las recargas de dominio. Reinicia el Editor para recuperar. Esto es principalmente cosmético — los builds Standalone Player no lo exhiben.
Build / empaquetado¶
El bundle lanzado desde Finder muestra "Damaged app" (macOS)¶
El .app no está firmado y se descargó con el flag de cuarentena. Para distribución, firma y notariza el bundle (consulta Compilar para macOS). Para pruebas locales solamente, ejecuta xattr -d com.apple.quarantine <app-bundle> una vez.
App rechazada de revisión del App Store por "razón de privacidad ausente" (iOS)¶
Una fuente de captura necesita una clave Info.plist explícita:
NSCameraUsageDescriptionsi tu app captura desde la cámaraNSMicrophoneUsageDescriptionsi tu app captura desde el micrófonoNSLocalNetworkUsageDescriptionsi tu app habla con un dispositivo LAN
La cadena cara al usuario debe describir el uso real, no "Required by SDK".
[VisioForge] Native runtime folder not found at '…' for runtime platform …¶
El .unitypackage que importaste no contiene un flavor para el Build Target actual. Por ejemplo, un paquete solo-Windows abierto en un Editor host Mac muestra esto en la primera llamada InitializeSdk(). Reconstruye (o re-descarga) el paquete con el switch -Include* correspondiente, o importa la variante acumulativa que contenga todas las plataformas.
Cuando todo lo demás falla¶
Recoge un log y contacta con soporte:
- Exportación de la Consola del Editor o Player (
Window → General → Console, clic derecho → Save All / vía Logcat / vía Xcode → Devices → Open Console). - El nombre del archivo
.unitypackagey su fecha de build. - Versión de Unity, Build Target, Scripting Backend, Api Compatibility Level.
- Una escena reproducible mínima si es posible.
Abre un ticket en https://support.visioforge.com/.
Véase también¶
- Bootstrap y ciclo de vida — cómo se arranca el runtime en cada plataforma
- Compilar para Windows · Android · macOS · iOS — tablas de solución de problemas específicas por plataforma
- Matriz de plataformas — soporte de funciones por plataforma Unity