2012-06-01 4 views
0

J'ai des données H264 provenant d'une carte d'acquisition d'images. En utilisant ces données, j'ai déjà écrit un serveur de streaming RTP/H264 (en utilisant live555) et un client RTP/H264 (en utilisant ffmpeg et live555).Enregistrement de données codées H.264 dans un fichier à l'aide de ffmpeg

Je souhaite ajouter une nouvelle fonctionnalité à mon serveur: Enregistrer directement les données codées H264 dans un fichier (sans transcodage) dans n'importe quel format (avi, mp4, mkv, etc.) qui permet de regarder ultérieurement des vidéos utilisant VLC.

Pour le client d'affichage, essentiellement, j'ai effectué:

1) Créer des paquets de données H264 en utilisant ffmpeg/av_new_packet()

2) Données Decode H264 ffmpeg/avcodec_decode_video2()

3) Format décodé cadre à l'aide ffmpeg/sws_scale()

4) Affichage

quelqu'un pourrait-il me conseiller rapidement pour la vi fonction d'enregistrement de fichier deo sans décodage/transcodage des données et en utilisant ffmpeg? Il suffit de

1) Choisissez un contexte de sortie (format)

2) Construire des paquets de données H264 en utilisant ffmpeg/av_new_packet()

3) Enregistrez le paquet à l'aide ffmpeg/av_ (entrelacée) _write_frame() (et aussi av_write_trailer() et av_write_header())?

?

Merci tous

Répondre

-1

S'il vous plaît voir ffplay.c:

static int video_thread(void *arg) 
{ 
... 
ret = get_video_frame(is, frame, &pts_int, &pkt); 
... 
} 

Le PKT est paquet de H264 brut. enregistrer pkt.data dans le fichier est OK.

fwrite(pkt.data, 1, pkt.size, pf); 

si ce fichier ne peux pas jouer mplayer, s'il vous plaît d'abord ajouter:

unsigned char const start_code[4] = {0x00, 0x00, 0x00, 0x01}; 
fwrite(start_code, 4,1, pf); 
+1

Ceci n'est guère une réponse, la question concerne la mise en paquets et non l'écriture dans un fichier. –

0

je l'ai fait semblable; ffmpeg utilisé pour l'encodage. J'ai trouvé ffmpeg exemple de remixage 1 et cela a fonctionné pour moi. (Il est trop tard pour répondre, mais j'espère que cela aidera quelqu'un d'autre.)