سؤال

لدي ارتباك حول الطابع الزمني لحزمة RTP H264. أعرف أن معدل ساعة الحائط من الفيديو هو 90 كيلو هرتز الذي حددته في SIP SDP. معدل الإطار الخاص بي التشفير ليس بالضبط 30 إطارا في الثانية، فهو متغير. إنه يختلف من 15 إطارا في الثانية إلى 30 إطارا في الثانية على الطاير. لذلك، لا يمكنني استخدام أي طابع زمني ثابت.

يمكن لأي شخص أن يخبرني بقطاع الزمني الحزمة المشفرة التالية.
بعد 0 milisecond المشفرة rtp timestamp = 0 (دع الطية البداية
بعد 50 milisecond المشفرة rtp timestamp =؟
بعد 40 ميلاسوكون المشفرة RTP Timestamp =؟
بعد 33 milisecond المشفرة rtp timestamp =؟

ما هي الصيغة عندما يكون معدل الإطار المشفر متغير؟

شكرا لكم مقدما.

لا يوجد حل صحيح

نصائح أخرى

لا يهم إذا ترميز التشفير عن الفيديو عند 10FPS أو 30FPS، مع TTP Timestamp، فأخبر جهاز الاستقبال كم من الوقت بين الإطارات. لذلك تحدد ذلك على الطاير لكل إطار. بهذه الطريقة يمكنك إرسال 10 إطارات في ثانية واحدة (10FPS)، وفي الثانية الثانية، يمكنك إرسال 30 إطارات (30 إطارا). تحتاج فقط إلى تعيين الطابع الزمني RTP بشكل صحيح. وإذا حصلت على سؤالك، فأنت في شك في كيفية القيام بذلك ...

دع الطوابع الزمنية للبدء يكون 0، يمكنك إضافة وقت ساعة الحائط في مللي ثانية مضروبة في 100 إلى آخر الطابع الزمني RTP، أو يمكنك استخدام أي جدول زمني تريده. لجعل فك ترميز فك تشفير الفيديو 10FPS عند 30 إطارا في الثانية، أضف 333000 إلى الطابع الزمني RTP لكل حزمة ... ولكن دعنا ننظر إلى مثالك:

Frame #      RTP Time   Time between frames [ms]
[  1]               0   0
[  2]           50000   50
[  3]           90000   40
[  4]          420000   33  

لذلك إذا قمت بتعيين DTP Timestamp مثل هذا (Time in ms * 100000) ستجعل تحميل وحدة فك الترميز وإطار فك التشفير 1، ثم قم بتحميل وإطار فك التشفير 2، لكنه سوف ينام لمدة 50 مللي ثانية (الفرق الزمني بين الإطار 1 والإطار 2) قبل أن يرسم الإطار 2، وهكذا ...

وكما ترون، يستخدم وحدة فك الترميز الطوابع الزمنية RTP لمعرفة متى تعرض كل واحد، ولا تمانع إذا تم ترميز الفيديو عند 30 أو 10 إطارا في الثانية.

أيضا، إذا كان الفيديو 30 إطارا في الثانية، فإن هذا لا يعني أنه لكل ثانية سيكون هناك 30 حزم RTP. في بعض الأحيان يمكن أن يكون هناك أكثر من ذلك 100، لذلك لا يمكنك الحصول على صيغة تضمن حساب الطابع الزمني الصحيح RTP.

أعتقد أن هذا هو ما تحتاجه ... آمل أن أساعدت، لا، أنا إذا لم أكن ... =)

لا توجد صيغة بسيطة لهذا.

إن الفورية المستخدمة لأخذ عينات من الإطار قبل الترميز يسمى PTS. (عرض الطابع الزمني التقديمي). إنه أمر خارج نطاق التشفير، يجب أن تتذكره في تدفق بياناتك عند التقاط الإطارات.

من هناك، لديك 2 إمكانيات:

  1. لا يولد تشفير H264 إطار B، ثم يجب أن يكون TTP Timestamp هو PTS + إزاحة عشوائية (نفسها لجميع جلسة البث)
  2. إذا كان التشفير ينشئ إطارات B (أو S-Slices)، فيجب تعديل أمر فك التشفير، نظرا لأن B-Frame يتطلب فكك الإطار التالي ليتم فك تشفيره، لذلك يجب إرساله من قبل.

في الحالة الأخيرة، تنص RFC6184 على أن لديك طريقة متعددة لدفق الوحدات NAL المشفرة.

سيستخدم معظم برامج التدفق الوضع المسمى "غير Interleved"، والذي يجب عليك فيه، يجب عليك ضبط الطابع الزمني RTP على PTS + إزاحة، ولكن إرسالها في ترتيب فك التشفير، لذلك لن تزيد الطابع الزمني رتنايا. هذا يعني أيضا أن العميل سيتعين على فك تشفير الطلب الوارد وليس إعادة ترتيب الإطارات في ترتيب PTS.

أنا لا أستخدم المصطلح DTS. هنا لسبب ما، لأنك لا تحتاج إلى فك التشفير الطابع الزمني لهذا العمل، فقط النظام.

الوضع الأخير الموصوف في RFC6184 هو ما يسمى بالترتيب المتداخل حيث يمكنك إعادة ترتيب الوحدات NAL. في هذه الحالة، عليك أن تنفذ بعض منطق التطبيق لإعادة ترتيب الوحدات، يرجى الرجوع إلى RFC6184 للحصول على التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top