Android Не удается воспроизвести видео (mp4/mov/3gp/и т. д.)?

У меня большие трудности с тем, чтобы приложение для Android воспроизводило видео с SD-карты. Неважно, какой размер, битрейт, формат видео или любые другие настройки я могу придумать, ни эмулятор, ни мой G1 не воспроизведут ничего, что я пытаюсь кодировать. Я также пробовал несколько видео из Интернета (различные видеоформаты, битрейты, со звуковыми дорожками и без них и т. д.), и ни одно из них не работает.

Все, что я продолжаю получать, это диалоговое окно, в котором говорится:

"Не удается воспроизвести видео"

"К сожалению, это видео не может быть воспроизведено."

В LogCat сообщается об ошибках, но я их не понимаю и безуспешно пытался найти в Интернете дополнительные объяснения. Увидеть ниже:

03-30 05:34:26.807: ERROR/QCOmxcore(51): OMXCORE API :  Free Handle 390d4
03-30 05:34:26.817: ERROR/QCOmxcore(51):  Unloading the dynamic library for OMX.qcom.video.decoder.avc
03-30 05:34:26.817: ERROR/PlayerDriver(51): Command PLAYER_PREPARE completed with an error or info PVMFErrNoResources
03-30 05:34:26.857: ERROR/MediaPlayer(14744): error (1, -15)03-30 05:34:26.867: ERROR/MediaPlayer(14744): Error (1,-15)

Иногда я также получаю это:

03-30 05:49:49.267: ERROR/PlayerDriver(51): Command PLAYER_INIT completed with an error or info PVMFErrResource
03-30 05:49:49.267: ERROR/MediaPlayer(19049): error (1, -17)
03-30 05:49:49.347: ERROR/MediaPlayer(19049): Error (1,-17)

Вот код, который я использую (в моем методе onCreate()):

this.setContentView(R.layout.main);
//just a simple VideoView loading files from the SD card
VideoView myIntroView = (VideoView) this.findViewById(R.id.VideoView01);
MediaController mc = new MediaController(this);
myIntroView.setMediaController(mc);
myIntroView.setVideoPath("/sdcard/test.mp4");
myIntroView.requestFocus();
myIntroView.start();

Пожалуйста помоги!


person RyanM    schedule 30.03.2010    source источник


Ответы (3)


Ладно, пошли. Видео, над которым я работал в Adobe Premiere, должно иметь разрешение 480x800 (ШxВ), но Adobe Media Encoder выводит последовательность как «несжатый Microsoft AVI» с использованием видеокодека «UYVY», частота кадров 24 кадра в секунду, прогрессивная развертка. , квадратные пиксели и размеры: 720x800 (ШxВ). Это выводит довольно большой файл с черными границами 120 пикселей по обе стороны от видеоконтента. Затем я переношу видео в Handbrake 0.9.4 и использую следующие настройки (я начал с пресета Regular->Normal):

Container: MP4 File
Large file size: [un-Checked]
Web-optimized: [un-Checked]
iPod 5G support: [un-Checked]

Width: 320 (this is key, any higher than 320 and it won’t work)
Height: 528
Keep Aspect Ratio: [Checked]
Anamorphic: None

Crop Left: 120
Crop Right: 120

Everything under the "Video Filter" tab set to "Off"

Video Codec: H.264(x264)
Framerate: same as source
2-Pass Encoding: [Checked]
Turbo first pass: [un-Checked]
Avg Bitrate: 384

Create chapter markers: [un-Checked]

Reference Frames: 2
Mixed References: [un-Checked]
B-Frames: 0
Motion Estimation Method: Uneven Multi-Hexagon
Sub-pixel Motion Estimation: 9
Motion Estimation Range: 16
Analysis: Default
8x8 DCT: [un-Checked]
CABAC Entropy Coding: [un-Checked]
No Fast-P-Skip: [un-Checked]
No DCT-Decimate: [un-Checked]
Deblocking: Default, Default
Psychovisual Rate Distortion: [MAX]

Моя основная проблема заключалась в том, что я пытался вывести файл mp4 с размерами 480x800 (ШхВ). После изменения ширины на 320 (более высокие значения не работали), но с сохранением правильного соотношения сторон, выходное видео теперь воспроизводится без ошибок. Я надеюсь, что это поможет кому-то еще с аналогичной проблемой.

Примечание: хотелось бы, чтобы ограничения на видео для Android были лучше задокументированы.

person RyanM    schedule 30.03.2010
comment
Я бы хотел, чтобы ограничения на видео для Android были лучше задокументированы. Я не мог не согласиться с вами больше. Я даже последовал вашему примеру и до сих пор не могу транслировать видео. - person John Giotta; 09.04.2010
comment
не могли бы вы опубликовать код, что вы здесь сделали, не понятно, на самом деле я новичок в этой области, любая помощь будет оценена. - person UMAR-MOBITSOLUTIONS; 20.06.2011
comment
Да, работать с VideoView и MediaPlayer очень тяжело. Спасибо за вопросы и ответы. - person Ovidiu Latcu; 27.07.2011
comment
можете ли вы указать, какие изменения вы внесли в свой код, чтобы решить проблему.. у меня тоже такая же проблема, поэтому, пожалуйста, если вы можете помочь..?? - person MKJParekh; 14.10.2011
comment
@Frankenstein Я действительно не менял код; Я изменил настройки кодирования видео в приложении (Handbrake... это бесплатно), которое я использовал для создания/кодирования видео. Тем не менее, эти настройки могут не работать для вас. Они работали на меня. - person RyanM; 16.10.2011

У меня было довольно много проблем с воспроизведением множества разных видео на моем телефоне (герой HTC). Стандартное воспроизведение 512K mp4 (пример: http://www.archive.org/details/more_animation ), сначала уточните у них, чтобы убедиться, что это не ваш код.

Вот мой код из onCreate() в поддействии, которое воспроизводит только видеофайл:




    protected VideoView mine;
    protected boolean done = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoshow);  
        mine = (VideoView) findViewById(R.id.video);   // Save the VideoView for touch event processing 
        try {
            String myURI = "/sdcard/" + path + "/v/" 
                          + currentItem.getFile() 
                          + "." + currentItem.getFileType();
            Uri video = Uri.parse(myURI); 
            mine.setVideoURI(video);
            mine.start();
            mine.setOnCompletionListener(new OnCompletionListener() {

                public void onCompletion(MediaPlayer mp) {  
                    result.putExtra("com.ejf.convincer01.Finished", true);
                    done = true;
                }
            });
        } catch (Exception ex) {
            Log.d(DEBUG_TAG, "Video failed: '" + ex + "'" );
        }
person Donald Scott Wilde    schedule 30.03.2010
comment
Спасибо за ответ. Я последовал вашему совету и загрузил с предоставленного вами сайта видео The Lost Kitten 1938 (512k mpeg4), и оно работало безупречно, используя тот же самый код, который я предоставил. Спасибо тебе за это. Я попытаюсь перекодировать свои видео, чтобы они соответствовали характеристикам загруженного образца, и вернусь, чтобы опубликовать подробности. Возможно, вы знаете точные настройки, которые я должен использовать в своем кодировщике (я могу использовать либо Adobe Media Encoder, либо Handbrake)? - person RyanM; 31.03.2010

Я сталкивался с этой проблемой, пока не понял, что проблема была в каталоге моего видео. Я сохранял свои видео в каталог, недоступный для просмотра видео. Поэтому каждый раз, когда я пытаюсь воспроизвести видео, появляется сообщение об ошибке: «Не удается открыть видео» или что-то в этом роде. Попробуйте сохранить видео в этот каталог, который также будет виден в телефонной галерее.

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + "your app name ";
person Mansour Fahad    schedule 06.10.2014