Не удается воспроизвести это видео Xamarin.Android

Мне нужно воспроизвести видео с 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-карте?

Попробуйте вместо этого: var path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/myimage/video.mp4"; vView.SetVideoPath(path); (не нужно создавать File)

Mehdi Dehghani 08.04.2019 07:12

Вы можете посмотреть на это: воспроизведение видео с использованием видеопросмотра в xamarin-android

nevermore 08.04.2019 08:41

Спасибо за совет, но ничего из этого не помогает.

vintoriez 09.04.2019 20:28

Можешь попробовать вставить видео в свой проект и проверить, работает ли оно?

nevermore 10.04.2019 09:10

Как я писал в "редактировать", так оно и работает, но мне нужно, чтобы скачивать файлы с ftp на sdcard и воспроизводить их в цикле.

vintoriez 10.04.2019 18:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
404
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец я понял это. Проблема заключалась в том, что мой телефон установил карту по пути /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;

Это не очень сложное решение, но пока оно работает.

Другие вопросы по теме