Xamarin Android Player – No se puede reproducir este vídeo
Estoy usando VideoView de Android para reproducir un video incrustado en mi aplicación. Funciona bien en mi dispositivo, pero sigo recibiendo un mensaje de "No puedo reproducir este video" y una pantalla en negro en el reproductor de Android de Xamarin.
- Usar fuente personalizada en el atributo de estilo
- Cómo obtener / detectar el tamaño de la pantalla en Xamarin.Forms?
- Xamarin cerrar Aplicación de Android en el botón Atrás
- Manejo de URL específicas con filtros de intenciones en Xamarin Mono para Android
- Error de implementación de Visual Studio 2015 Xamarin sin ningún mensaje de error
El registro de errores correspondiente tiene este aspecto:
Unable to play video [MediaPlayer] Error (1,-38) [VideoView] Error: 1,-38
He encontrado algunos mensajes sobre este error, pero ninguno de ellos me ayudó a resolver este problema y no soy capaz de encontrar una descripción adecuada para este código de estado.
Mi código C # se ve así:
videoView = new VideoView (Context); base.SetNativeControl (videoView); videoView.SetOnErrorListener (new ErrorListener ()); string fileName = e.NewElement.FileSource; fileName = fileName.ToLower ().Substring (0, fileName.LastIndexOf (".")); int resourceID = Context.Resources.GetIdentifier (fileName, "raw", Context.PackageName); var fullPath = String.Format ("android.resource://{0}/{1}", Context.PackageName, resourceID); videoView.SetVideoPath (fullPath); videoView.RequestFocus (); videoView.Start ();
- xamarin android webview ya no recupera la página servida localmente con httplistener
- Xamarin-Android Mvvmcross - Tocar en la aplicación de inicio de notificación recibida con salpicaduras o llevar al frente
- Xamarin Form Master Página de detalles que no se muestra
- Descenso Xamarin.Android
- Error: no se encontró ningún recurso que coincida con el nombre dado (en 'MvxItemTemplate' con el valor '@ layout / itemc')
- ¿Cómo obtengo la dirección MAC y el dispositivo Android con 6.0 o superior en c #?
- Enlace adecuado de una biblioteca nativa en Xamarin
- Cómo inflar una vista en expansión con una vista de relación de aspecto fija
Parece ser un problema con el tipo de codificación que soporta el emulador, si instalas ffmpeg, si estás en un mac ejecutando estos comandos:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install ffmpeg
Luego procese su archivo de vídeo con:
ffmpeg -i big_buck_bunny_720p_1mb.mp4 -c:v libx264 -profile:v baseline -c:a aac -strict -2 -b:a 128k output.mp4
Y tratar de reproducir la salida que no mostrará ese error, pero será un video en blanco (sólo una pantalla en negro). Así que creo que el problema es sólo conseguir la codificación correcta, han intentado algunas codificaciones diferentes, pero todo parece que sólo muestran una pantalla en negro.
Va a hacer un poco más de excavación, pero por el momento parece ser sólo el emulador no es compatible con la codificación.
EDITAR
Ok, así que tengo el vídeo funcionando, procesé el video con:
ffmpeg -i SampleVideo_1080x720_1mb.mp4 -codec:v libx264 -profile:v baseline -preset slow -b:v 250k -maxrate 250k -bufsize 500k -vf scale=-1:360 -threads 0 -codec:a aac -strict -2 -b:a 96k output.mp4
Compruebe en este sitio los parámetros de ffmpeg. He configurado mi VideoView
así:
public class Activity1 : Activity { VideoView videoView; protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); videoView = FindViewById<VideoView> (Resource.Id.SampleVideoView); videoView.SetMediaController(new MediaController(this)); videoView.SetVideoPath ($"android.resource://{PackageName}/{Resource.Raw.output}"); videoView.RequestFocus (); videoView.Start (); } }
Esto parece funcionar en el Xamarin Android Player, pero sólo para las versiones API 16 (JellyBean) y 19 (Kitkat). 21 (piruleta) simplemente no carga el video.
Luego descargé el GenyMotion Emulator (necesito crear una cuenta pero es gratis para uso personal) para comprobar si era el Xamarin Player o no. Funciona en todos (16,17,18,19,20 + 22) aparte de 21 (piruleta). Parece que algo está mal con los emuladores de 21, hice todas mis pruebas en el nexo 4 emuladores. Así que si quieres tot est reproducción de vídeo intentaría evitar emuladores con API 21.
Diferentes versiones de SO Android soportan diferentes combinaciones de codificaciones de audio y video dentro del contenedor de video. Así que depende de la versión que su reproductor de Android está emulando. Para la tabla vea http://developer.android.com/guide/appendix/media-formats.html#core