Мне нужно воспроизвести видео с SD-карты на VideoView
, и я всегда получаю сообщение «Не удается воспроизвести это видеосообщение». Я тестирую на физическом устройстве. Файл находится во внешнем хранилище, и его можно без проблем воспроизвести с помощью встроенных приложений телефона.
Я читал некоторые темы раньше и пытался изменить формат файла и разрешение безрезультатно.
Второй догадкой был путь к файлу, поэтому пытался изменить его несколько раз во многих вариантах, используя Android.OS.Environment.ExternalStorageDirectory.AbsolutePath
, создавая переменную File и получая путь из File.Path
.
Получил TextView
, где я каждый раз ставлю путь, и он всегда правильный.
Я понятия не имею, почему это не работает.
Код:
Java.IO.File file = new Java.IO.File (Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/myimage/", "video.mp4");
tView.Text = file.Path;
MediaController mediaController = new MediaController(context: this);
vView.SetMediaController(mediaController);
mediaController.SetAnchorView(vView);
vView.SetVideoPath(file.Path);
vView.Start();
File.Path
значение:
"/storage/emulated/0/myimage/video.mp4"
Обновлено: я создал «сырую» папку в файле ресурса, помещенном туда, а затем использовал следующий путь:
vView.SetVideoPath("android.resource://" + PackageName + "/" + Resource.Raw.video);
Это работает, но если кто-нибудь знает, как получить правильный путь к папке на SD-карте?
Вы можете посмотреть на это: воспроизведение видео с использованием видеопросмотра в xamarin-android
Спасибо за совет, но ничего из этого не помогает.
Можешь попробовать вставить видео в свой проект и проверить, работает ли оно?
Как я писал в "редактировать", так оно и работает, но мне нужно, чтобы скачивать файлы с ftp на sdcard и воспроизводить их в цикле.
Наконец я понял это. Проблема заключалась в том, что мой телефон установил карту по пути /storage/xxxx-xxxx/. Мои исследования показали, что имя каталога происходит от серийного номера тома (где Android автоматически монтирует карту), а ExternalStorageDirectory относится к другим местам в каждом устройстве Android. Иногда это внутренний, иногда USB-накопитель.
В любом случае не удалось найти какой-либо метод, который возвращает путь, поэтому создал следующий метод:
string GetCardMountPoint()
{
string[] listOfDirs = Directory.GetDirectories("/storage/");
string path = null;
foreach ( string dir in listOfDirs)
{
if (dir.Contains('-'))
{
path = dir;
}
}
return path;
Это не очень сложное решение, но пока оно работает.
Попробуйте вместо этого:
var path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/myimage/video.mp4"; vView.SetVideoPath(path);
(не нужно создаватьFile
)