2010-03-30 3 views
6

Мне очень трудно получить приложение для Android, чтобы воспроизводить видео с SD-карты. Неважно, какой размер, биттрейт, формат видео или любые другие настройки, о которых я могу думать, ни эмулятор, ни мой G1 не будут воспроизводить все, что я пытаюсь закодировать. Я также пробовал несколько видеороликов из Интернета (различные видеоформаты, битрейты, аудио и т. Д.), И ни одна из них не работает.Android - Невозможно воспроизвести видео (mp4/mov/3gp/etc.)?

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

«Невозможно воспроизвести видео»

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

В 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(); 

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

ответ

10

Хорошо, здесь идет. Видео, над которым я работал в Adobe Premiere, должно быть 480x800 (WxH), но у меня есть Adobe Media Encoder, выводящий последовательность как «несжатый Microsoft AVI», используя видеокодек «UYVY», частоту кадров 24 кадра в секунду, прогрессивную , квадратные пиксели и размеры: 720x800 (ШхВ). Это выводит довольно большой файл с черными границами 120 пикселей по обе стороны видеоконтента. После этого я взял видео в Handbrake 0.9.4 и используйте следующие настройки (я начал с регуляризовапо> 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 (WxH). После изменения ширины до 320 (более высокие значения не сработали), но сохраняя правильное соотношение сторон, выходное видео теперь воспроизводится без ошибок. Надеюсь, это поможет кому-то еще с подобной проблемой.

Сторона примечания: Я хочу, чтобы ограничения на видео для Android были лучше документированы.

+3

«Я хочу, чтобы ограничения на видео для Android были лучше документированы». Я не мог согласиться с тобой больше. Я даже последовал за вашим примером и до сих пор не могу передать видео в поток. –

+0

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

+0

Да, это настоящая боль для работы с VideoView и MediaPlayer. Спасибо за ваши вопросы и ответы. –

3

У меня было довольно много проблем с получением множества разных видеороликов для воспроизведения на моем телефоне (HTC Hero). Стандартная игра 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 + "'"); 
     } 
+0

Благодарим вас за ответ. Я принял ваши советы и загрузил видео с сайта, который вы предоставили, «The Lost Kitten 1938» (512k mpeg4), и он работал безупречно, используя тот же самый точный код, который я предоставил. Спасибо тебе за это.Я попробую и перекодирую свои видео в соответствии со спецификациями загруженного образца и вернусь, чтобы опубликовать детали. Возможно, вы знаете точные настройки, которые я должен использовать в своем кодере (я могу использовать либо Adobe Media Encoder, либо Handbrake)? – RyanM

0

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

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + "your app name "; 
Смежные вопросы