Peu importe si votre encodeur code une vidéo à 10FPS ou 30FPS, avec l'horodatage RTP, vous indiquez au récepteur la durée de la pause entre les deux images. Donc, vous déterminez à la volée pour chaque image. De cette façon, vous pouvez envoyer 10 images en une seconde (10fps), et en une seconde vous pouvez envoyer 30 images (30 fps). Vous devez seulement définir l'horodatage RTP correctement. Et si j'ai votre question, vous êtes dans le doute comment faire ceci ...
Laissez l'horodatage de départ être 0, vous ajoutez l'horloge murale en millisecondes multiplié par 100 à la dernière horodatage RTP, ou vous pouvez utilisez n'importe quelle échelle de temps que vous voulez. Pour le décodeur décodage vidéo 10fps à 30fps, ajouter 333000 à horodatage RTP pour chaque paquet ... mais permet de regarder votre exemple:
Frame # RTP Time Time between frames [ms]
[ 1] 0 0
[ 2] 50000 50
[ 3] 90000 40
[ 4] 420000 33
Donc, si vous définissez l'horodatage RTP comme celui-ci (Time in ms * 100000)
vous ferez la charge de décodeur et décoder le cadre 1, puis charger et décoder le cadre 2, mais il va dormir pendant 50 ms (différence de temps entre les images 1 et 2) avant de dessiner le cadre 2, et ainsi de suite ...
Et comme vous peut voir, le décodeur utilise des horodatages RTP pour savoir quand afficher chacun, et cela ne dérange pas si la vidéo a été encodée à 30 ou 10 fps. De plus, si la vidéo est à 30 ips, cela ne veut pas dire que pour chaque seconde il y aura 30 paquets RTP. Parfois, il peut y en avoir plus de 100, donc vous ne pouvez pas avoir une formule qui assure le bon calcul d'horodatage RTP.
Je suppose que c'est ce que vous avez besoin ... J'espère aidé, me DonT -1 si je na pas ... =)
Ce n'est pas très clair pour moi. J'ai un [bitstream] (http://stackoverflow.com/questions/10562549/send-android-h264-capture-over-a-rtp-stream) où j'essaye d'analyser nalu et de les envoyer par rtp. Le fait est que je dois calculer l'horodatage moi-même. Actuellement, je suis sûr que je me trompe (timestamp-lasttimestamp) * 100000. Je règle le nouvel horodatage chaque fois que je lis un nouveau nalu à partir du bitstream mais cette forme fera varier l'horodatage entre les paquets et le paquet A pourrait avoir un horodatage plus grand que le paquet B! – FlaPer87
L'horodatage RTP indique l'heure absolue en plus de la différence de temps entre les images. Sinon, il ne peut pas être utilisé pour synchroniser entre audio et vidéo. –
@RioWing Non, vous ne pouvez pas définir une valeur de temps absolue de 64 bits de façon fiable dans un champ d'entier de 32 bits. Il est préférable de le faire par rapport à 0. Le point est que l'horodatage doit augmenter linéairement, la même valeur d'horodatage doit correspondre aux trames AV correspondantes et vous devez garder la valeur CLOCK RATE à l'esprit lors de la définition des horodatages, donc dans 1 seconde AV last_frame_timestamp - first_frame_timestamp = CLOCK_RATE'. Vous avez l'en-tête de l'extension RTP pour stocker toutes les autres données que vous voulez, comme l'horodatage correct (ticks), etc. – Cipi