1

Y a-t-il un moyen d'implémenter l'enregistrement au ralenti et en accéléré à l'aide de l'API Camera?Comment implémenter l'enregistrement vidéo SlowMotion et TimeLapse à l'aide de l'API Camera

J'ai essayé d'utiliser MediaRecorder la mise VideoFrameRate, VideoBitRateVideoCaptureRate mais le travail de rien pour moi.

J'ai implémenté avec succès l'utilisation de JNI mais j'ai trouvé que cela prend trop de temps et n'est pas optimisé.

Si vous trouvez une autre solution disponible, aidez-moi s'il vous plaît.

+0

Les deux défis sont très différents. Tandis que SlowMotion dépend de la prise en charge d'une caméra native FPS élevée, TimeLapse peut être réalisé avec MediaCodec. Voir http://stackoverflow.com/questions/30972081/how-to-drop-frames-while-recording-with-mediacodec-and-inputsurface et https://github.com/saki4510t/TimeLapseRecordingSample –

+0

Un autre projet open-source est https://github.com/mercyorangi/sky-camera –

+0

@AlexCohn merci d'essayer mais au dessus du code ne fonctionne pas pour moi, en cas de ralenti. – IshRoid

Répondre

6

Je l'ai résolu moi-même et je partage mon morceau de code de travail, juste en utilisant l'API de la caméra au ralenti et timelapse sont mis en œuvre

Avant de commencer, vous devez connaître la définition de setCaptureRate(double fps)

Régler la vitesse de capture d'image vidéo . Cela peut être utilisé pour fixer un taux de capture d'image vidéo différente de celle du taux de lecture de la vidéo enregistrée . Cette méthode règle également le mode d'enregistrement sur le temps écoulé. Dans l'enregistrement vidéo time-lapse, seule la vidéo est enregistrée. Les paramètres liés à l'audio sont ignorés lorsqu'une session d'enregistrement démarre, si une application les définit.

TimeLapse
Pour laps de temps vous devez utiliser suivant le profil de la caméra, selon vous la largeur du cadre vidéo et de la hauteur. Choisissez une en bas profil ou vous pouvez choisir d'autres selon vos besoins.

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_1080P); 

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_720P); 

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P); 

Et maintenant, vous devez configurer votre vidéo setCaptureRate et setVideoEncodingBitRate

video_recorder.setCaptureRate(profile.videoFrameRate/6.0f); 
video_recorder.setVideoEncodingBitRate(profile.videoBitRate); 

et enfin vous devez définir votre profil configuré à votre MediaRecorder.

video_recorder.setProfile(profile); 

Slow Motion
Pour un mouvement lent, vous devez également configurer CamcorderProfile j'utilise config pour le profil d'écoulement.

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH); 
video_recorder.setCaptureRate(profile.videoFrameRate/0.25f); 
video_recorder.setVideoEncodingBitRate(profile.videoBitRate); 
video_recorder.setProfile(profile); 

Pour slowmotion, vous devez utiliser CameraAPI2 sinon il ne fonctionnera pas.

+0

Bonjour, merci pour la réponse, connaissez-vous une application de caméra Android (tiers) qui capture déjà à un taux de 120 fps? Merci –

+0

Google Camera API 2 Capture d'échantillon 120fps. mais l'API 2 dépend du matériel de l'appareil. – IshRoid