A reproduzir um vídeo em VideoView no Android

Não consigo perceber porque não consigo reproduzir o vídeo na minha VideoView. Só recebo uma mensagem:

não é possível reproduzir vídeo: Desculpe, este vídeo não pode ser reproduzido.

Também criei um cartão SD para o meu emulador. Preciso de colocar o meu cartão SD numa pasta em particular no meu SDK? Comentar.

Aqui está o layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
   android:id="@+id/LinearLayout01"
   android:layout_height="fill_parent"     
   android:paddingLeft="2px"
   android:paddingRight="2px"
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:paddingTop="2px"
   android:paddingBottom="2px"
   android:layout_width="fill_parent"
   android:orientation="vertical">

      <VideoView 
         android:layout_height="fill_parent"
         android:layout_width="fill_parent" 
         android:id="@+id/VideoView" />

</LinearLayout>

Aqui está o código:

package com.examples.videoviewdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoViewDemo extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        VideoView videoView = (VideoView)findViewById(R.id.VideoView);
        //MediaController mediaController = new MediaController(this);
        // mediaController.setAnchorView(videoView);
        //videoView.setMediaController(mediaController);

        videoView.setVideoPath("/sdcard/blonde_secretary.3gp");

        videoView.start();  
    }
}
À espera da resposta...

 49
Author: jacefarm, 2010-07-16

13 answers

O meu palpite é que o teu vídeo é incompatível com o Android. Tenta com um vídeo diferente. este definitivamente funciona usado para trabalhar com Android (mas não em dispositivos mais recentes, por alguma razão). Se esse vídeo funciona, e o seu não, então o seu vídeo não é compatível com o Android.

Como outros indicaram, por favor, testem isto num dispositivo. A reprodução de vídeo no emulador requer muita energia.

 28
Author: CommonsWare, 2014-07-05 21:55:05

Exemplo De Projecto

Finalmente tenho um projecto de demonstração para trabalhar, por isso vou partilhá-lo aqui.

Configure o layout

A configuração é assim, onde a área cinzenta clara é a VideoView.

enter image description here

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.videotest.MainActivity">

    <VideoView
        android:id="@+id/videoview"
        android:layout_width="300dp"
        android:layout_height="200dp"/>

    <Button
        android:text="Play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/videoview"
        android:onClick="onButtonClick"
        android:id="@+id/button"/>

</RelativeLayout>
Preparem o vídeo clip.

De acordo com a documentação , o Android deverá suportar a reprodução mp4 H. 264 (descodificação) para todos os níveis da API. No entanto, ser um monte de fatores que afetam se um vídeo real vai reproduzir ou não. A resposta mais profunda que consegui encontrar que dizia Como codificar os vídeos é aqui. Ele usa a poderosa ferramenta da linha de comandos ffmpeg para fazer a conversão para algo que deve ser jogável em todos (Esperemos?) Android devices. Leia a resposta a que liguei para mais explicações. Eu usei uma versão ligeiramente modificada porque eu estava recebendo erros com a versão original.

ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4
Eu definitivamente leria um muito mais em cada um desses parâmetros para ver o que precisa ajustar tanto quanto a qualidade de vídeo e áudio ir.

A seguir, mude o nome output_file.mp4 para test.mp4 e coloque-o na pasta do seu projecto Android /res/raw. Crie a pasta se ela já não existir.

Código

Não há muito no código. O vídeo toca quando o botão" Play " é clicado. Graças a esta resposta para pedir ajuda.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onButtonClick(View v) {
        VideoView videoview = (VideoView) findViewById(R.id.videoview);
        Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.test);
        videoview.setVideoURI(uri);
        videoview.start();
    }
}

Terminado

É tudo. Você deve ser capaz de jogar o vídeo clip no simulador ou um dispositivo real agora.
 16
Author: Suragch, 2017-05-23 11:33:26
Adiciona android.permissao.READ_EXTERNAL_STORAGE in manifest, worked for me
 5
Author: Sharat, 2015-02-17 06:52:35

Fazer {[1] } uma variável membro da sua classe de actividade em vez de a manter como local para a função onCreate:

VideoView videoView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    videoView = (VideoView)findViewById(R.id.VideoView);        
    videoView.setVideoPath("/sdcard/blonde_secretary.3gp");
    videoView.start();  
}
 3
Author: DJ7, 2012-06-22 15:14:12
O código parece ser impecável! Simples e simples.
Deve funcionar ao telefone. O emulador está a ter dificuldade em reproduzir vídeos, também me aconteceu a mim.

Tente aumentar o nível de API necessário para o mais recente, pode ajudar!

Carregue com o botão direito no projecto aberto, escolha as propriedades > Android > verifique a versão mais recente do lado direito...

Igor

 2
Author: Igor, 2010-07-19 14:16:19

Pode aceder ao seu cartão SD através do DDMS

 2
Author: poeschlorn, 2010-07-19 14:19:46

Para confirmar que o vídeo está no formato correcto (resolução, bitrate, codec, etc.) verificar com a documentação oficial - extracto abaixo:

Definição Padrão (Qualidade Baixa)
Video codec-H. 264
Resolução Vídeo-176 x 144 px
Taxa de imagens de vídeo-12 fps
Taxa de dados de vídeo-56 Kbps
Codec de áudio-AAC-LC
Canais de áudio - (mono)
Taxa de dados de áudio-24 Kbps

Definição Padrão (alta qualidade)
Codificador de vídeo - H. 264
Resolução Vídeo-480 x 360 px
Taxa de imagens de vídeo-30 fps
Taxa de dados de vídeo-500 Kbps
Codec de áudio-AAC-LC
Canais de áudio-2 (estéreo)
Taxa de dados de áudio-128 Kbps

Alta definição 720p (N / A em todos os dispositivos)
Video codec-H. 264
Resolução vídeo-1280 x 720 px
Taxa de imagens de vídeo-30 fps
Taxa de dados de vídeo-2 Mbps
Codec de áudio-AAC-LC
Canais de áudio-2 (estéreo)
Taxa de dados de áudio-192 Kbps

 2
Author: Tr0yJ, 2014-04-29 23:12:51
VideoView videoView =(VideoView) findViewById(R.id.videoViewId);

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/yourvideo");

 videoView.setVideoURI(uri);
videoView.start();

Em vez de usar setVideoPath use setVideoUri. você pode obter o caminho do seu vídeo armazenado no armazenamento externo Usando (Ambiente.getExternalStorageDirectory().getAbsolutePath ()+" / yourvideo") e analisá-lo em Uri. Se o seu vídeo for gravado em sdcard / MyVideo / video. mp4 substitua "/ yourvideo "em código por" / MyVideo/video. mp4"

Isto funciona bem para mim. `
 2
Author: Vikash Kumar Verma, 2016-02-19 05:52:38
O VideoView só pode transmitir vídeos de 3gp. recomendo este código para transmitir o seu vídeo. ou tente uma versão mais alta do android. Tenta Vídeo Online.
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.main);
    String videourl = "http://something.com/blah.mp4";
    Uri uri = Uri.parse(videourl);
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    intent.setDataAndType(uri, "video/mp4");
    startActivity(intent);
}

OuClique aqui para ver o Tutorial de Streaming de vídeo do Android .

 2
Author: Jaymelson Galang, 2016-04-13 14:46:55
Bem ! se você está usando um vídeo de compatibilidade android, então a única causa deste alerta é que você deve estar usando um vídeo dimensionado mais do que os 300MB. O Android não suporta vídeo grande (>300MB). Podemos obtê-lo usando a otimização NDK.
 0
Author: Suresh Sharma, 2012-04-16 10:49:46
Tenho quase o mesmo problema com o VideoView. Eu tento jogar um vídeo (1080 * 1080) com um Nexus 5 e funciona bem, mas o mesmo vídeo no Galaxy ace 2 Me dá a mensagem não pode jogar vídeo. Mas reparei que com uma definição mais baixa do vídeo (120x120), funciona bem. Então, talvez seja só uma questão de tamanho. (e especialmente com o subsecretário "blonde_".Vídeo 3gp ....)
 0
Author: Tobliug, 2015-02-25 19:20:08
//just copy this code to your main activity.

 if ( ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ){
            if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)){

            }else {
                ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},1);
            }
        }else {
        }
 0
Author: Mohamad azmand, 2017-04-21 13:21:20
O problema pode ser com o formato do Filme. Se estiver codificado em H264, certifica-te que está no perfil inicial.
 0
Author: Ajith Memana, 2018-04-18 09:05:52