2017-10-12 13 views
0

Je enregistre la vidéo en utilisant l'appareil photo intégré d'Android, mais quand j'envoie au serveur via Retrofit2, la vidéo ne peut pas vu dans le navigateur.Après long temps de recherche, je sais que la vidéo que je enregistre par android, le codec est MP42 donc je dois le convertir en codec H.264 afin de le rendre jouable dans le navigateur.Comment convertir un codec vidéo enregistré par un appareil photo Android intégré?

Voici comment je capture la vidéo

private void recordVideo() { 

     Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 

     fileUri = getOutputMediaFileUri(); 
     intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri); 
     intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,15); 
     startActivityForResult(intent, REQUEST_VIDEO_CAPTURE); 
    } 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK){ 
      Uri uri =data.getData(); //so the video file I get it here 
      Log.d("videoData",data.getData().toString()); 
      videoView.setVideoURI(uri); 
      videoView.start(); 
     } 
    } 

Je reçois la uri de la vidéo dans onActivityResult, la vidéo est en MP42 codec, comment puis-je convertir en H.264?

J'ai essayé d'utiliser MediaCodec Documentation, mais je ne savais pas où entrer mon Uri (mp42) pour obtenir la sortie en vidéo codec H.264 (que je veux jouer dans le navigateur).

Quelqu'un s'il vous plaît me donner quelques conseils ..

+0

MP42 est un conteneur (il est aussi un MScodec mais doute est-ce le cas ici) - pouvez-vous partager un lien vers une vidéo par exemple et nous pouvons être en mesure d'aider à mieux – Mick

+0

cette vidéo est MP42 que je dirige Téléchargez-le sur le serveur .. il suffit d'apparaître comme ceci – ken

+2

Utilisez l'API 'MediaRecorder' pour capturer la vidéo. Pendant le code d'installation, vous pouvez choisir H.264 comme codec. –

Répondre

2

(1) de fixation fichier vidéo en cours:

Votre vidéo est le format H.263 (ou Mpeg-2) en utilisant le profil Simple. Correctement comme vous l'avez dit, cela signifie que vous devez convertir. Vous devez le faire ré-encoder en tâche H.264 en utilisant un outil vidéo gratuit.

Par exemple: L'utilisation Handbrake vous pouvez faire ...

  • Choisissez d'ouvrir votre "ne joue pas" fichier MP4. Devrait être détecté comme MP4, maintenant cochez (ou activez) l'option web optimized.

  • Dans Video onglet Paramètres, choisissez Encoder Profile comme principal et encodeur level comme .

  • Dans Destination mettez votre dossier de sortie préféré et votre nom de fichier.
    (juste parcourir un dossier, puis tapez votre nouveau nom de fichier à créer ici).

  • Cliquez sur le bouton vert Start Encode et testez le nouveau fichier de sortie MP4 dans le navigateur.

(2) de fixation code Android pour les futurs enregistrements:

Vous devez définir le codec H.264 dans vos MediaRecorder paramètres d'objet comme:

myMediaRec = new MediaRecorder(); //create MediaRecorder object 
myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //set video codec 

Donc, fondamentalement votre le code devrait ressembler à: (code non testé, juste utiliser pour l'étude ou l'orientation) ...

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK) 
    { 
     //# Create a new instance of MediaRecorder 
     myMediaRec = new MediaRecorder(); //create MediaRecorder object 
     mMediaRec.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mMediaRec.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
     myMediaRec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 

     //# Video settings 
     myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //contained inside MP4 
     myMediaRec.setVideoSize(640, 480); //width 640, height 480 
     myMediaRec.setVideoFrameRate(30); //30 FPS 
     myMediaRec.setVideoEncodingBitRate(3000000); //adjust this for picture quality 

     //# Audio settings 
     myMediaRec.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //must always be AAC 
     myMediaRec.setAudioEncoder(MediaRecorder.getAudioSourceMax()); 
     myMediaRec.setAudioEncodingBitRate(16); 
     myMediaRec.setAudioSamplingRate(44100); 

    } 
}