2009-08-09 8 views
10

Je construis une application de caméra, où les vidéos sont continuellement capturées et enregistrées sur la carte SD. Les vidéos sont courtes (quelques minutes) et leur longueur est prédéfinie avec setMaxDuration().Android: Comment initialiser MediaRecorder sans une surface valide pour l'aperçu vidéo?

L'ensemble du processus fonctionne bien, tandis que l'activité principale est au premier plan. Mais, lorsque je passe à une autre activité (par exemple les réglages), l'enregistrement vidéo ne fonctionne en arrière-plan que jusqu'à ce que la durée maximale soit atteinte. Le fichier est enregistré, mais une nouvelle séquence ne peut pas être démarrée car prepare() échoue, apparemment parce que setPreviewDisplay() n'aime pas ne pas avoir de surface à attacher.

J'ai essayé d'utiliser une surface factice, un SurfaceHolder fictif, lockCanvas(), et divers autres trucs, mais rien ne fonctionne. Est-il possible d'initialiser MediaRecorder sans une surface valide?

Répondre

-1

Implémentez-vous des rappels de surface? Pourquoi avez-vous besoin d'initialiser MediaRecorder sans surface valable?

Etes-vous censé enregistrer même lorsque vous quittez l'activité principale? ou l'enregistrement s'arrête-t-il avant l'apparition de l'autre activité?

+0

Oui, j'ai implémenté les callbacks Surface. Tout fonctionne correctement quand il y a une surface d'aperçu valide. Mais, je veux enregistrer même quand je quitte l'activité principale. L'application doit pouvoir démarrer l'enregistrement vidéo, que la surface d'aperçu soit visible ou non. Mais, tout ce que j'ai essayé suggère simplement que ce n'est pas encore possible avec Android. Quelqu'un peut-il me prouver le contraire? – Robert

0

Je pense que l'application IP Webcam peut le faire, mais je ne sais pas comment. Peut-être que cela ne fonctionne que sur> = 2.3. Je ne suis pas sûr de quelle version je l'ai vu fonctionner. J'ai posé une question pour trouver comment ça marche.

Questions connexes