Tout d'abord, désolé pour mon mauvais anglais. J'écris un serveur de streaming vidéo en C++. J'ai plusieurs fichiers mpeg2-ts (films et publicités) dont j'ai besoin de diffuser via HTTP en un seul fichier TS-FILE. Le problème est que chaque fichier mpeg-ts a ses propres horodatages (PCR, PTS, DTS). Et, si je comprends bien, pour faire un flux de streaming continu, chaque nouvelle valeur de PCR (PTS, DTS) devrait continuer à partir de la dernière valeur de PCR (PTS, DTS).Fusion de plusieurs fichiers vidéo dans un seul fichier mpeg-ts "à la volée"
Voici une image pour une meilleure compréhension de ce que je dis sur: http://i.stack.imgur.com/vL1m6.png (. Je ne peux pas inclure mon image directement dans le message Désolé)
Je dois remplacer pcr`1, pcr`2, pcr`3 timestamps avec les nouveaux. Par exemple, j'ai envoyé ts-paquet contenant l'horodatage pcr3 et après quelques autres paquets ts (ne contenant aucune valeur de PCR) je veux insérer ma publicité. Et ma question est: comment puis-je calculer les nouvelles valeurs pour pcr`1, pcr`2, pcr`3 et ainsi de suite?
Est-il correct de calculer le débit binaire de la vidéo en cours, puis de diviser la quantité de bits que le programme a envoyée depuis le dernier horodatage PCR (dans notre cas, c'est pcr3) par ce débit binaire? Je veux dire ce qui suit: (nouvel horodatage) = (horodatage précédent) + (la quantité de bits)/(débit binaire). Ou y a-t-il un moyen plus efficace de le faire?
En ce qui concerne les horodatages PTS et DTS, je lis here que ces horodatages peuvent être non-linéaires. Est-ce qu'il sera correct de le calculer par rapport au dernier PCR original que j'ai reçu? Je veux dire:
pts_new = (original_pts - last_original_pcr) + pcr_new.
dts_new = (original_dts - last_original_pcr) + pcr_new.
(original_pts - last_original_pcr) is the difference between pts and pcr values
pcr_new is the last modified pcr value
Mon programme peut lire et modifier ces horodateurs dans le flux mpeg-ts. Heureusement, il y a beaucoup de littérature sur la façon de le faire. Mais comment puis-je calculer les nouvelles valeurs pour ces horodatages?
Je viens de commencer à apprendre la spécification de mpeg2-ts, et s'il vous plaît corriger mes erreurs si je me trompe dans quelque chose. Merci d'avance. J'espère que vous m'avez compris. Mpeg2 "Splicing" est une forme d'art, et est beaucoup plus compliquée que la concaténation de deux flux.
est-il possible d'utiliser des utilitaires ou des bibliothèques existants (tels que gstreamer)? – Juster