2012-10-08 8 views
1

Je dois enregistrer un fichier vidéo généré par deux flux vidéo provenant de deux sources différentes. J'utilise rtsp sur tcp/ip, et les vidéos sont encodées avec h264. Je dois d'abord enregistrer la vidéo de la première source et ensuite continuer avec la deuxième source. Alors que j'ai essayé était de déclarer deux instances AVFormatContext, initialiser à la fois avec avformat_open_input(&context, "rtsp://......",NULL,&options) puis lire des trames avec av_read_frame(context,&packet) et les écrire dans le fichier vidéo av_write_frame(oc,&packet); Il fonctionne sauver bien la vidéo de la première source, mais si par exemple, je sauvé y cadres du premier contexte, lorsque je tente de lire et enregistrer les images du second contexte dans le même fichier, pour la première y cadres Je suis Tring pour sauver, av_write_frame(oc,&packet2); se retun -22, et que n'ajoute pas le cadre au fichier.Android ffmpeg enregistrer et ajouter h264 vidéos en streaming

Je pense que le problème est que la variable de contexte se souvient combien d'images ont été lues, et donne à chaque paquet lu un numéro d'identification, pour s'assurer qu'il n'est pas écrit deux fois. Mais lorsque j'utilise un nouveau contexte, ces numéros d'identification sont réinitialisés, l'AVOutputFormat ou l'AVFormatContext conservent également l'identifiant du paquet qu'ils attendent de recevoir, et n'écriraient rien tant qu'ils n'auraient pas reçu un paquet avec cet identifiant. Maintenant, je me demande comment j'ai pu résoudre ce problème. Je ne trouve aucun setter pour cet identifiant, ni aucun moyen de réutiliser le même contexte. J'ai pensé modifier les sources ffmpeg mais elles sont assez complexes et je n'ai pas trouvé ce que je cherchais. Une alternative serait d'enregistrer les deux vidéos dans deux fichiers différents, mais, je ne sais pas comment les ajouter après, car ffmpeg ne peut ajouter que des vidéos encodées avec mpeg et rencoding la vidéo n'est pas vraiment une option, comme il le fera prendre beaucoup de temps. Aussi, je n'ai pas trouvé d'autre moyen fonctionnel d'ajouter deux vidéos mp4 encodées avec h264.

Je serai heureux d'entendre toute idée utilisable à ce problème.

+0

Avez-vous trouvé une solution pour enregistrer le flux RTSP dans android ?? –

Répondre

1

Si vous enregistrez les cours d'eau h.264 brut pourquoi stocker non seulement deux courants séparés et concaténer ensuite les morceaux de fichiers sur la ligne de commande à l'aide séparement un système de commande du système (« cat file1 file2> finalfile »)

Si votre sortie est l'un des éléments suivants vous pouvez ajouter directement à l'aide chat

  1. flux de transport [ts] avec les mêmes codecs
  2. .mpg
  3. fichiers h.264 premières
  4. fichiers mpeg4 premières qui ont exactement les en-têtes d'encodage mêmes [mêmes dimensions, le profil et les boîtes à outils mentionnés dans la tête]
  5. ruisseaux H.263

Vous ne pouvez pas concaténer des fichiers directement ou mp4 fichiers 3GPP.

+1

J'ai besoin de mon application Android pour le faire automatiquement. Il ne serait pas trop amical de demander aux utilisateurs d'utiliser la ligne de commande. Y a-t-il un moyen d'y parvenir dans l'application? en langage C –

Questions connexes