4 votes

Lecture vidéo Android à partir de l'objet HttpResponse

Je veux lire le contenu vidéo à partir de l'objet HttpResponse. Le contenu est téléchargé à partir d'un serveur de streaming.

Mon besoin est de créer une requête HTTP POST vers le serveur. La requête contient l'URL de la vidéo, le nom d'utilisateur et le mot de passe de l'utilisateur à des fins d'authentification.

Je souhaite savoir comment créer une requête HTTP POST et lire/télécharger la vidéo.

Veuillez fournir quelques indications, étapes/code pour continuer.

Merci,

5voto

renam.antunes Points 693

Je ne suis pas sûr à 100%, mais je pense que vous ne pouvez pas diffuser la plupart des vidéos en raison de la manière dont le format stocke les métadonnées de la vidéo. C'est pourquoi YouTube doit convertir vos fichiers vidéo au lieu de les montrer dans n'importe quel format. Il existe des protocoles qui encapsulent ces métadonnées et vous permettent de diffuser n'importe quelle vidéo (c'est ce que fait YouTube sur mobile). Vous devriez jeter un coup d'œil à RTSP : http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol

Si vous utilisez un lien RTSP dans un videoView, la vidéo devrait être diffusée sans problème. Le problème est lié au serveur et non au client.

À titre d'exercice, vous pourriez récupérer un lien RTSP depuis m.youtube.com et le passer à un videoView en utilisant setVideoPath et cela devrait fonctionner.

Si vous ne pouvez pas changer l'implémentation du serveur, alors vos solutions seraient probablement les suivantes:

1) Téléchargez et décodez la vidéo vous-même, vous devriez gérer toutes les métadonnées et vous assurer que la vidéo fonctionne. Vous pourriez, théoriquement, compiler ffmpeg pour Android pour vous aider, mais je n'ai pas pu le compiler pour Android avec l'option réseau activée. C'est beaucoup de travail.

2) Écrivez votre propre implémentation de RTSP ou d'un autre protocole de streaming. Téléchargez la vidéo dans un thread et créez un serveur local sur l'appareil pour diffuser ce fichier vidéo vers une instance de videoView. J'ai en fait cela qui fonctionne dans une application. Android ne prend pas en charge le protocole spécifique utilisé par les serveurs clients et j'ai dû le faire fonctionner. Cela m'a pris un mois entier pour le faire. Je ne peux pas publier de code exemple car tout est la propriété du client, mais je pourrais vous donner plus d'informations à ce sujet si cela vous intéresse.

De toute façon, si vous ne pouvez pas changer le serveur/le format de la vidéo, alors vous devriez vous préparer à beaucoup de travail.

4voto

success_anil Points 1802

Vérifiez le code ci-dessous pour afficher une url http ou rtsp dans Video View.

Maintenant, avant d'appeler votre videoview .. juste obtenez

public class VideoViewDemo extends Activity {

    /**
     * TODO: Définissez la variable de chemin vers une URL de vidéo en streaming ou un chemin de fichier multimédia local.
     */
    private String path = "";
    private VideoView mVideoView;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.videoview);
        mVideoView = (VideoView) findViewById(R.id.surface_view);

        if (path == "") {
            // Indiquez à l'utilisateur de fournir une URL/chemin de fichier multimédia.
            Toast.makeText(
                    VideoViewDemo.this,
                    "Veuillez modifier l'activité VideoViewDemo et définir le chemin"
                            + " variable vers votre fichier multimédia URL/chemin",
                    Toast.LENGTH_LONG).show();

        } else {

            /*
             * Sinon, pour un média en streaming, vous pouvez utiliser
             * mVideoView.setVideoURI(Uri.parse(URLstring));
             */
            mVideoView.setVideoPath(path);
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.requestFocus();

        }
    }
}

Maintenant, comme vos besoins sont différents, commencez par envoyer une requête http post à votre serveur ... obtenez le flux d'entrée désiré.. écrivez ce flux en mp4 dans votre système de fichiers local. puis vous pouvez utiliser le code ci-dessous pour lire le contenu

// cela peut être un chemin sur le système de fichiers
 String path="/adf.mp4"  ; 
    public void playVideo() { 

        MediaController mediaController = new MediaController(this);
        mediaController.setMediaPlayer(videoView);
        videoView.setVideoPath(path);   
        videoView.setMediaController(mediaController);
        videoView.requestFocus();
        videoView.start();
        mediaController.show();

2voto

Francisco Cruz Points 21

J'ai essayé cela et ça a fonctionné pour moi :D pas de rtsp, rien du tout, juste une URL avec une vidéo mp4 et ça a marché !

public class VideoActivity extends Activity {
    public static final String KEY = "video_id";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fotogaleria_video);
    Intent i = getIntent();
    if(i.hasExtra(KEY)){
        String url = "https://sites.google.com/site/tempmp4download/bnm.mp4";
        VideoView vv = (VideoView)findViewById(R.id.fotogaleria_video);
        // vv.setVideoPath(url);
        vv.setVideoURI(Uri.parse(url));
        vv.setMediaController(new MediaController(this));
        vv.requestFocus();
        vv.start();

        }

    }
}

1voto

Ashwani K Points 1421

Regardez les liens suivants

http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

http://w3mentor.com/learn/java/android-development/android-http-services/performa-a-http-post-request-with-the-httpclient-in-android/

Pour le streaming, je pense que vous devez télécharger le fichier complet, puis le montrer dans le lecteur vidéo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X