-
-
Notifications
You must be signed in to change notification settings - Fork 804
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Apple no reproduce los videos #1740
Comments
Hola, Me puedes pasar un fichero de ejemplo que no te funcione y los parámetros usando para configurar la app para obtenerlo? |
Buenas tardes Pedro, por supuesto mira, aqui te dejo todo, estoy creando así: val genericStream: RtmpStream by lazy {
Como parametros los siguietnes: val width = 1920 y el prepare de la siguiente forma: genericStream.forceCodecType(CodecUtil.CodecType.HARDWARE, CodecUtil.CodecType.FIRST_COMPATIBLE_FOUND) Me selecciona el siguiente encoder: Name: c2.rk.avc.encoder ----- Video info ----- Estoy atacando un nginx RTMP, aqui te dejo el enlace del video que acabo de grabar Como podrás observar tanto en windows, linux y android (tanto navegador como reproductor) funciona perfectamente, pero en dispositivos apple solo hay audio tanto iOS como Mac) Si lanzo a Youtube tanto en H265, como en H264 funciona perfectamente. Si necesitas cualquier cosa mas para analizar me dices! |
Hola, Por lo que puedo ver es un problema con la decodificación por hardware en macOS y iOS. Si la desactivas en VLC ambos videos se reproducen correctamente. También deberias confirmar que si usas ffmpeg para stremear con un fichero a tu nginx el flv resultante funcione. |
Buenas Pedro, voy hacer la prueba de la grabación voy a editar la app para añadir el boton de grabación y grabar y pruebo a reproducir en el mac y en el iphone. Respecto a que si hago stream dsde ffmpeg, si que funciona, osea es como hemos funcionado hasta ahora, usando ffmpeg recoger el flujo de rtsp y stream rtmp y sin problemas en todos los dispositivos, y desde OBS también hemos probado y sin problemas. Si hago un ffmpeg -i entrada.flv -vcodec libx264.... output.mp4 si que funciona el video, pero claro me rehace todo el video volviendolo a codificar etc etc, gastando muchos recursos sobretodo en videos que suelen ser de 90 min, por varios a la vez. Te dejo aqui un enlace de un video que hay de hoy en el server grabado dsd ffmpeg: https://justet.es/record/info%2540padel-ux.com-11-Mar-25-12:30:28.mp4 EDIT Acabo de realizar una grabación interna y sin problema, lo reproduce en cualquier lado, tanto android, iphone, linux, windows y mac sin problemas asi que es el stream solamente, te adjunto el video que he grabado en local. 20250311_170736.mp4 |
Hola, He tardado bastante pero estoy con esto. Con el servidor de nginx que me he montado yo si me funcionan los videos en macOS usando el VLC y con hardware. Mi fichero de configuración:
|
Buenas Pedro, tranquilo no te preocupes, bastante haces. Si es muy parecido al mío por no decir que es básicamente el mismo el fichero y el nginx-rtmp module. Pues a ver si yo he probado con otros dispositivos, que tienen también hardware como el xiaomi mi A2 y el redmi note y si funciona bien, solo me pasa con esta board con rockchip, asi que me parece taan extraño, no se, ahora he intentado probar a ver con la versión 2.5.9 y el forceincremental a true a ver si era algo del nginx con los paquetes flv o nose, pero me sigue apareciendo igual, el audio bien, el video por hardware decode en negro asi que ya no se, lo unico que se me ocurre, es mandarte la board con la cámara por paquetería por si tu quieres probarlo sobre este dispositivo y hacer un debug mas profundo a ver si conseguimos llegar al porque de esto... Muchas gracias por todo tu esfuerzo y dedicación Pedro! |
Hola, Parece ser que este caso tendrá mas que ver con el codec del board que otra cosa por que si funciona con los mismos parámetros en otros teléfonos debería ser por eso. Lo que seguramente si funcione y supongo que no querrás hacer es forzar a usar un encoder de software para el video. |
Buenas Pedro, Mira acabo de realizar unas pruebas de las siguientes maneras, obteniendo el mismo resultado, perfecto en todas las plataformas excepto en Apple que sigue haciendo lo mismo, black screen y audio bien. genericStream.prepareVideo(width, height, vBitrate,25,0,MediaCodecInfo.CodecProfileLevel.AVCProfileHigh) && genericStream.prepareAudio(sampleRate, isStereo, aBitrate, true, true) Si le fuerzo a usar Software este funciona pefectamente, pero claro... si tenemos en teoria un hardware especifico para esto, lo bueno es usarlo, así no sobreforzar el procesador a realizar esta tarea que puede ser compleja y dejando el sistema con menos recursos o incluso que llegue a desboardar o sobrecalentarse. Te dejo captura de mediainfo de linux, con todas las especificaciones del video, en tanto software como en hardware. |
La única diferencia que veo es que el de hardware es profile high, level 5.1 y va con HDR y el de software profile main, level 5 y sin HDR. Vamos a intentar forzar que no use HDR y sea main profile y level 5. Para eso usa este prepareVideo: //30fps, iframe 2, rotation 0, main profile y level 5
genericStream.prepareVideo(width, height, vBitrate, 30, 2, 0, MediaCodecInfo.CodecProfileLevel.AVCProfileMain, MediaCodecInfo.CodecProfileLevel.AVCLevel5) Usa ese prepareVideo tanto para software como hardware y vemos si hay alguna diferencia de nuevo. Esto debería hacer que el de hardware se configure exactamente como el que tienes de software que si te funciona. |
Vale, sigue usando HDR. Vamos a forzar formatos de color que no usan HDR a ver que pasa (necesitas API 24+ o lo que es lo mismo Android 7.0+). videoFormat.setInteger(MediaFormat.KEY_COLOR_RANGE, MediaFormat.COLOR_RANGE_LIMITED);
videoFormat.setInteger(MediaFormat.KEY_COLOR_STANDARD, MediaFormat.COLOR_STANDARD_BT709);
videoFormat.setInteger(MediaFormat.KEY_COLOR_TRANSFER, MediaFormat.COLOR_TRANSFER_SDR_VIDEO); Sigue usando los mismos valores en el prepareVideo. Solo hace falta que pruebes con el de hardware ya que lo que intentamos ahora es que el comando nos retorne exactamente la misma configuración con el de hardware que el de software. |
Buenas tardes Pedro,
Mira después de cambiar de dispositivo a uno con Hardware encoders tanto en h264 como en h265 y realizar una serie de test sobre varios live servers tales como youtube, nginx rtmp, mediamtx y odyx, me ocurre un problema que lo veo raro, porque todos los dispositivos Android, Microsoft y Ubuntu son capaces de ver el stream sin problemas es mas lo puedo incluso almacenar en formato mp4 y visualizarlo ondemand, pero los dispositivos Apple no, solo obtengo audio, tanto en iphone como en macs (Intel y gama M), paso por el analizador de medios del video, y me devuelve o bien es un H264 Main profile con level 3.1 o 4.1 (depende de como lo configure) osea me devuelve todo correctamente, ara bien si la misma maquina que hace el stream lo configuro para que use el encoder obligatoriamente via Software, realizo el mismo procediminto stream to nginx rtmp, guardo el video en mp4 y lo visualizo, todos los dispositivos lo reproducen sin ningun tipo de problema tanto apple como microsoft, android y ubuntu (usando la misma configuración que en Hardware, la unica diferencia cuando lo paso por el analizador de video este me devuelve que es un Baseline Constrained Profile level 3.1 H264, eso intuyo porque el encoder hardware esta mas limitado y solo tiene ese perfil) pero lo dicho lo reproduce sin problemas, y era pues a ver si te ha pasado a ti o alguien mas ha comentado algo.. porque es algo muy extraño.
Gracias.
The text was updated successfully, but these errors were encountered: