VideoView no Android, Entendendo e Utilizando

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /VideoView no Android, Entendendo e Utilizando

VideoView no Android, Entendendo e Utilizando

Vinícius Thiengo
(7707) (16)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloTest-Driven Development: Teste e Design no Mundo Real
CategoriaEngenharia de Software
Autor(es)Mauricio Aniche
EditoraCasa do Código
Edição1
Ano2012
Páginas194
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa! Blz?

Nesse vídeo mostro como colocar vídeos nativos em nossas APPs Android utilizando o componente visual VideoView, que por sinal é uma view como qualquer outra. Fique atento quanto ao macete para descobrir qual é o diretório que está sendo utilizado pelo SDCARD, precisamos disso no exemplo somente para podermos descarrgar o vídeo na mão nesse diretório, em uma aplicação real não há a necessidade disso, pois o recurso android.os.Environment.getExternalStorageDirectory() já faz isso para agente. è importante ressaltar também o uso da classe MediaController para que o vídeo tenha os controles padrões de acesso (play/pause, seguir, voltar, ...). Note a necessidade de solicitação de permissão de acesso a Internet quando queremos utilizar um vídeo que está em um servidor remoto.

Obs. : não mostrei nesse vídeo o uso do VideoView via XML, mas é possível também, tanto que se você for em "Images & Media" no nosso construtor de interface terá lá a opção VideoView disponível.

Então é isso, vou evitar mais delongas e deixar você assistir ao vídeo.

O link para download do projeto se encontra logo abaixo no post.

Página do componente VideoView no site oficial do Android

Página da classe MediaController no site oficial do Android

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Criando Suporte ActionBar Android Com ActionBarSherlockCriando Suporte ActionBar Android Com ActionBarSherlockAndroid
Entendendo e Utilizando o ConfigChanges no AndroidEntendendo e Utilizando o ConfigChanges no AndroidAndroid
Colocando Botão de Update no ActionBar AndroidColocando Botão de Update no ActionBar AndroidAndroid
Customizando ActionBar Android Com ActionBar Style GeneratorCustomizando ActionBar Android Com ActionBar Style GeneratorAndroid

Compartilhar

Comentários Facebook

Comentários Blog (16)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
17/01/2019
Tudo bem Thiengo?

Estou precisando de uma orientação.

Desenvolvi um app com 3 vídeos internos de curta duração (5 segs no máximo), o app está funcionando, mas gostaria que quando o usuário apertasse o botão, iniciasse um vídeo aleatório na pasta raw. Resumidamente, num único botão, após clicado, o vídeo saísse diferente de outro vídeo, de forma randômica.

Se for para  rodar um vídeo num único botão, consigo rodar perfeitamente, mas quando coloco pra ativar de forma randômica, o aplicativo trava, aparecendo a mensagem de que o video não pode ser executado.

Não estou conseguindo um código que funcione que ao clicar o mesmo botão, permite rodar de forma aleatória os vídeos!

Segue o código:

import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;

import java.util.Random;


public class VideosActivity extends AppCompatActivity {

    VideoView videoView;

    private Random videoAleatorio;

    private final int VID_01 = 1;
    private final int VID_02 = 2;
    private final int VID_03 = 3;


    private Button btn;


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

        videoAleatorio = new Random();

        videoView = (VideoView) findViewById(R.id.videoView);
        videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.vid_01));
        videoView.start();
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            
        });


Tem como me ajudar?
Responder
Vinícius Thiengo (0) (0)
05/02/2019
Ligia, tudo bem?

O que você precisa, o algoritmo de escolha randômica de vídeo, é tranquilo de fazer. Siga o roteiro abaixo:

-> Crie um array de inteiros que conterá três posições onde cada posição terá o ID do vídeo na pasta /raw. Exemplo: o ID do vídeo um é R.raw.vid_01;

-> Inicie o objeto Random com o limite superior não atingível. Exemplo: new Random( 3 ) vai liberar números de 0 a 2, exatamente as posições do array criado no item anterior;

-> Coloque na VideosActivity o listener de clique que será vinculado ao botão em tela;

-> No onCreate() da VideosActivity é possível já realizar o vínculo do botão em tela ao objeto listener de clique;

-> Todo o algoritmo de videoView e o algoritmo de geração de randômico deve estar dentro do método onClick() do listener de clique;

-> Assim que obter o vídeo de maneira randômica depois do acionamento do botão em tela, carregue ele como a seguir: videoView.setVideoURI( Uri.parse("android.resource://" + getPackageName() + "/" + arrayVideos[ positionRandom ]) ).

Ligia, notei que a parte de obtenção de vídeo de maneira randômica não foi colocada em seu projeto.

Caso você precise de desenvolvedores para esta parte, entre em contato pelo e-mail oficial do Blog e canal que eu lhe indico alguns:

thiengocalopsita@gmail.com

Abraço.
Responder
Robson (1) (0)
09/12/2018
Olá Thiengo boa noite, prezado vi os teus materiais que abordam foto e vídeo, meu intuito seria capturar fotos em um determinado intervalo de tempo e por ser desta forma não haveria a interação do usuário, pelo que li e pelo que já fiz acredito que foto seria impossível agora se a câmera estiver gravando um video pode ser que seja possivel "extrair" em determinados intervalos, as imagens, procurei muito mais não achei, estou lendo a dois dias sobre a OpenCV mais não estou tendo muito sucesso, o prezado saberia dizer se isto é possivel? Obrigado.
Responder
Vinícius Thiengo (0) (0)
15/12/2018
Robson, tudo bem?

Ainda não trabalhei em um domínio de problema que exigisse isso: acesso a imagens do local atual, isso em tempos aleatórios.

É sim possível extrair imagens de qualquer vídeo, até porque um vídeo nada mais é do que uma coleção de frames, imagens.

A sua dificuldade será em inicializar a câmera em momentos onde o aparelho estiver em Doze Mode, modo soneca.

Para entender melhor o Doze Mode, estude o conteúdo do link a seguir. Nele também há dicas de como ultrapassar algumas limitações impostas pelo Doze Mode:

https://developer.android.com/training/monitoring-device-state/doze-standby?hl=pt-br

Robson, outra coisa que será essencial é a solicitação de permissão de câmera em tempo de execução:

https://www.thiengo.com.br/sistema-de-permissoes-em-tempo-de-execucao-android-m

Provavelmente as permissões READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE também serão necessárias para poder ler e salvar os vídeos em disco, caso esses passos sejam parte de sua lógica de negócio para poder adiar, por exemplo, a extração de imagens de um vídeo.

Agora sobre a extração de frames de algum vídeo, veja os links a seguir:

-> Discussão sobre o assunto no Stack Overlow, incluindo algumas respostas: https://stackoverflow.com/questions/22684347/extract-all-video-frames-in-android

-> APIs que utilizam a FFMpeg para trabalho com vídeo: https://android-arsenal.com/search?q=ffmpeg

Abraço.
Responder
Robson (1) (0)
15/12/2018
Olá bom dia Thiengo!
Cara mais uma vez obrigado pelo comentário, eu consegui fazer usando o JavaCv e mandei um agendamento com Timer para pegar os frames.
Valeu meu caro.
Responder
Gabrielly (1) (0)
27/09/2017
Boa noite Vinicius,
Segui todos os seus passos no vídeo, porém encontrei um problema, por exemplo, com o link (http://www.villopim.com.br/android/video.3gp ) dá certo, só que, com o link que estou tentando transmitir que é streaming, não dá certo, fica aparecendo que não foi possível reproduzir. Pra streaming o videoView não funciona? Ou tenho que tentar outro recurso? Já procurei nos foruns e não encontrei nada que resolve-se o problema.
Responder
Vinícius Thiengo (0) (0)
27/09/2017
Gabrielly, tudo bem?

Se me lembro bem o VideoView passa streaming sem problemas. Porém não são todos os formatos que são aceitos.

Está tentando quais formatos? No link a seguir, mais precisamente na seção ?Video streaming requirements" tem os formatos aceitos: https://developer.android.com/guide/topics/media/media-formats.html

Abraço.
Responder
Gabrielly (1) (0)
28/09/2017
Olá Vinicius,
O link é esse (https://kshost.com.br/playertv/jose53567&as=true ), é de uma empresa que transmite leilões ao vivo. Pesquisei sobre o kshost e o formato padrão é H.264 AVC. Toda vez q troco o link por esse aparece que não é possível reproduzir, será que esse link ta errado?
Responder
Vinícius Thiengo (0) (0)
28/09/2017
Gabrielly, tentei acessar o link. mas somente fica carregando, não há conteúdo.

Vou pedir que se possível você tente a reprodução do conteúdo com a API do link a seguir: https://android-arsenal.com/details/1/3481

Há outras APIs de streaming de vídeo no link a seguir: https://android-arsenal.com/search?q=streaming

Gabrielly, a vantagem dessas APIs é que elas tendem a tratar algumas limitações encontradas no VideoView, mesmo sabendo que este suporta streaming.

Abraço.
Responder
27/09/2017
tem como reproduzir um video q está no firebase ou youtube?
Responder
Vinícius Thiengo (0) (0)
27/09/2017
Joyce, tudo bem?

Vídeos do Firebase Storage, sim. Vídeos do YouTube somente com o player do YouTube, ou WebView, ou com Intent, neste último caso seu algoritmo invocará o aplicativo do YouTube instalado no device do usuário.

Veja se alguma das APIs do link a seguir lhe ajuda com isso: https://android-arsenal.com/search?q=youtube

Abraço.
Responder
Elias Martins (1) (0)
21/04/2016
Boa noite Vinicius, queria saber se você tem um exemplo de, como pegar o vídeo de uma câmera, ou um link ou mesmo um material qualquer, para que eu possa estudar, obrigado, abraços.
Responder
Vinícius Thiengo (1) (0)
23/04/2016
Fala Elias, blz?
Veja se esse conteúdo lhe ajuda (http://developer.android.com/intl/pt-br/training/camera/videobasics.html ). Abraço
Responder
Elias Martins (1) (0)
23/04/2016
vlw Vinicius, obrigado pela ajuda.
Responder
06/07/2014
teria como pegar o link do video de um banco de dados que está na pasta assets ??
Responder
Vinícius Thiengo (0) (0)
06/07/2014
Fala Edgar, blz?
Vc já consegui acessar esse banco de dados no folder assets? Pq não utiliza a persistência em outros lugares (SQLite, SharedPreferences)? Abraço
Responder