Comment écrire un Live555 FramedSource pour me permettre de flux H. 264 en direct

J'ai essayé d'écrire une classe qui dérive de FramedSource dans Live555 qui va me permettre de flux de données en direct de mon D3D9 application à un MP4 ou similaire.

Ce que je fais chaque image, c'est prendre le backbuffer dans la mémoire du système comme une texture, puis de le convertir en RVB -> YUV420P, puis l'encoder à l'aide de x264, alors idéalement passage de la NALE des paquets sur Live555. J'ai fait une classe appelée H264FramedSource qui découle de la FramedSource essentiellement par la copie de la DeviceSource fichier. Au lieu de l'entrée d'un fichier d'entrée, j'ai fait un dernier paquet que j'ai mise à jour de chaque image.

Je suis assez nouveau pour les codecs et de diffusion, afin que je puisse tout faire, complètement faux. Dans chaque doGetNextFrame() dois-je en attrapant la NALE de paquets et de faire quelque chose comme

memcpy(fTo, nal->p_payload, nal->i_payload)

Je suppose que la charge est mon bloc de données en octets? Si quelqu'un a un exemple d'une classe dérivée de FramedSource qui pourrait au moins être proche de ce que je suis en train de faire, j'aimerais le voir, c'est tout nouveau pour moi et un peu difficile à comprendre ce qui se passe. Live555 de la documentation est à peu près le code lui-même qui n'est pas exactement le rendre facile pour moi de comprendre.

  • Je ne sais pas si ça va résoudre ton problème ou pas, mais gardez à l'esprit, NALE, les paquets ne sont pas 1-1 avec les images, vous pouvez obtenir 0-nombre NAL paquets d'un seul cadre de l'encodage.
  • Merci pour la réponse, j'étais sûr que c'était le cas. Comment ceux FramedSource compte pour qui?
  • Avez-vous envisagé d'utiliser H264VideoStreamDiscreteFramer au lieu de H264VideoStreamFramer? Je vais faire un peu plus de recherche et voir si quelque chose apparaît. (voir comments.gmane.org/gmane.comp.multimedia.live555.devel/8450)
  • Oui, j'ai, il aura encore besoin de moi à la sous-classe FramedSource, est-ce correct? Je suis à essayer de comprendre ce qui doit arriver dans les fonctions comme, doGetNextFrame, deliverFrame, etc.
  • Avez-vous ce travail?
  • Salut, je suis encore à obtenir que cela fonctionne parfaitement. Je peux le faire pour flux dans un fichier et je peux regarder ce fichier live à l'aide de ffmpeg. J'ai encore besoin d'obtenir que cela fonctionne avec le protocole RTP/similaire.

InformationsquelleAutor Garviel | 2012-12-13