Xamarin Android Player - не удается воспроизвести это видео
Я использую VideoView Android для воспроизведения встроенного видео в моем приложении. Он отлично работает на моем устройстве, но я продолжаю получать сообщение "не могу воспроизвести это видео" и черный экран в проигрывателе Xamarin Android.
соответствующий журнал ошибок выглядит следующим образом:
Unable to play video
[MediaPlayer] Error (1,-38)
[VideoView] Error: 1,-38
Я нашел несколько сообщений об этой ошибке, но ни один из них не помог мне решить эту проблему и я не могу найти подходящее описание для этого кода состояния.
мой C# код выглядит так:
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 ();
2 ответов
кажется, проблема с типом кодировки, которую поддерживает эмулятор, если вы устанавливаете ffmpeg, если ваш на mac, выполнив следующие команды:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ffmpeg
затем обработайте свой видеофайл с помощью:
ffmpeg -i big_buck_bunny_720p_1mb.mp4 -c:v libx264 -profile:v baseline -c:a aac -strict -2 -b:a 128k output.mp4
и попробуйте воспроизвести вывод, он не покажет эту ошибку, но это будет пустое видео (просто черный экран). Поэтому я думаю, что проблема заключается в правильном кодировании, попробовали разные кодировки, но все, кажется, просто показывают черный экран.
будет делать еще некоторые рытья, но на данный момент кажется, что только эмулятор не поддерживает вашу кодировку.
редактировать
хорошо, так что я получил видеоплей работает, я обработал видео с:
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
проверить это сайт для параметров ffmpeg.
Я настраиваю свой VideoView
вот так:
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 ();
}
}
это, похоже, работает на Xamarin Android Player, но только для версий API 16 (JellyBean) и 19 (Kitkat). 21 (леденец) просто не загружает видео.
затем я скачал GenyMotion эмулятор (необходимо создать учетную запись, но бесплатно для личного использования), чтобы проверить, был ли это Xamarin Player или нет. Он работает на всех (16,17,18,19,20 + 22), кроме 21(леденец). похоже, что-то не так с эмуляторами для 21, я сделал все свое тестирование на эмуляторах nexus 4. Поэтому, если вы хотите воспроизвести видео, я бы постарался избежать эмуляторов с API 21.
различные версии ОС Android поддерживают различные комбинации аудио и видео кодировок в контейнере видео. Так что это зависит от того, какую версию эмулирует ваш Android-плеер. Для таблицы см. http://developer.android.com/guide/appendix/media-formats.html#core