1

В моем приложении есть фотогалерею, в которой отображается постоянный список изображений. Мне нужно добавить один видео в этот список (только один, предоставленный мной). Это видео находится в файле расширения . Я хотел бы позволить пользователю решить, какой видеоплеер он хочет использовать для воспроизведения видео. Так что я пошел на намерения подхода:Невозможно воспроизвести видео через намерение

public void playVideo(View view){ 
    Intent videoint = new Intent(Intent.ACTION_VIEW); 
    Uri uri = CustomAPEZProvider.buildUri("test.3gp"); 
    Log.d("TEST", uri.toString()); 
    videoint.setDataAndType(uri, "video/*"); 
    startActivity(videoint); 
} 

Мои CustomAPEZProvider является следующее:

public class CustomAPEZProvider extends APEZProvider { 
    private static final String AUTHORITY = "com.myapp.package.provider"; 

    @Override 
    public String getAuthority() { 
     return AUTHORITY; 
    } 

    public static Uri buildUri(String path) { 
     StringBuilder contentPath = new StringBuilder("content://"); 
     contentPath.append(AUTHORITY); 
     contentPath.append(File.separator); 
     contentPath.append(path); 
     return Uri.parse(contentPath.toString()); 
    } 
} 

Кроме того, я добавил это мой манифест:

<provider android:name="com.myapp.package.CustomAPEZProvider" 
    android:authorities="com.myapp.package.provider" > 
    android:exported="true" 
    android:multiprocess="true"> 
    <meta-data 
     android:name="mainVersion" 
     android:value="4"/> 
</provider> 

provider имеет этот meta-data, потому что версия файла расширения отличается от кода версии приложения.

Я понимаю, что файл найден, но видеоплееры не могут его воспроизвести. Они запускают не могут воспроизводить это видео окно (и никаких ошибок). Я тестировал его на многих устройствах и с различными типами видео. Видео 3gp, которое я использую для тестирования, можно воспроизвести как можно лучше в родной галерее телефона.

Линия 3 по методу playVideo печатает этот

содержание: //com.myapp.package.provider/test.3gp

Это правильно, верно?

Файл расширения не имеет папок, файлы просто загружаются в корень.

Кроме того, мне действительно нужно воспроизвести это видео test.3gp с файла patch. Будет ли разница в этом случае? На данный момент я устраняю это препятствие. Я знаю, что должен добавить его к метаданным провайдера.

Дополнительная информация: файл расширения содержит несколько аудиофайлов, которые я могу играть с помощью MediaPlayer без каких-либо проблем. Конечно, это другое, потому что в этом случае я делаю это, получая файл AssetFileDescriptor в файл расширения obb, тогда как с видео мне нужен Uri, который меняет все.

Я прочитал много вопросов с похожими проблемами, но они не помогли. У кого-то была такая же проблема?

Методы обхода также приветствуются. Например, я мог бы согласиться использовать VideoView, если это необходимо.

UPDATE

Я просто понял, что видео плеер не работает, даже если файл является ресурсом (внутри Drawable, сырой, или любой другой).Мне удалось воспроизвести видео на код ниже:

public void playVideo(View view){ 
    Uri uri = CustomAPEZProvider.buildUri("test.3gp"); 
    getWindow().setFormat(PixelFormat.TRANSLUCENT); 
    VideoView videoHolder = new VideoView(this); 
    videoHolder.setMediaController(new MediaController(this)); 
    videoHolder.setVideoURI(uri); 
    setContentView(videoHolder); 
    videoHolder.start(); 
} 

Но это не совсем то, что я хочу, я бы очень хотел, чтобы позволить пользователю выбрать видеоплеер его предпочтения. В основном потому, что я хочу освободиться от ответственности за кодирование видеопроигрывателя с приятным взглядом.

ответ

1

Я не думаю, что проблема лежит в любом месте вашего кода. Или, если это так, это не ваша самая большая проблема.

Я думаю, что ваша самая большая проблема заключается в использовании файла 3GP. Этот формат не поддерживается всеми устройствами. Вам лучше с MP4. И даже тогда убедитесь, что он закодирован кодеком, который все устройства Android понимают.

+0

Но как насчет этого (цитирую себя)? * Видео в 3gp, которое я использую для тестирования, может быть отлично воспроизведено из собственной галереи телефона. * Я также тестирую файл mp4, и у меня такая же проблема. – user4830843

Смежные вопросы