Зачем нужна SetSampleDuration? Я предположил, что нам не нужна длительность выборки, если мы предоставляем время выборки для каждой выборки. Средство записи приемника может рассчитать разницу между текущим и последним кадрами как длительность выборки
Почему ошибка не генерируется для первых нескольких кадров с помощью API writeSample .WriteSample выдает ошибку только через определенное время (кадр через 1,48 секунды). Указывает ли он c на определенные кадры.
Сэмплы могут не иметь длительности, верно Но медиа-сток, который вы используете, ожидает, что длительности присутствуют, поэтому вы должны иметь их там. Или вы не можете использовать приемник, потому что он был бы несовместим.
Ваш ввод ставится в очередь и обрабатывается асинхронно. Это объясняет, почему у вас нет ошибки сразу.
... Но в потоке временные метки RTP равны 0, 7470, 11970, 18000, .... Интервал не одинаков, но в целом мы получаем 15 кадров в секунду. Как установить длительность в этом сценарии: 1. Установите значение 660000 для всей выборки или 2. Для длительности набора первой выборки - (83-0) * 10000, а для длительности набора второй выборки - (133-83) * 10000
Вопрос легкий и сложный одновременно. Формат MP4 имеет свои предположения и ожидания, когда приемник создает выходной файл, трек в нем, со своими собственными значениями шкалы времени. Несмотря на то, что он технически может следовать вашим эффективным временным параметрам и сохранять там значения 90 кГц, он сделан в предположении, что видеопоток имеет фиксированную частоту кадров. Раковина принимает ваше значение атрибута MF_MT_FRAME_RATE
и извлекает из него время. Кроме того, поведение даже может стать более жестким или более смягченным с Windows обновлениями, потому что указанное c поведение не задокументировано, не обещано.
Вам нужно найти компромисс в решении этой проблемы. Один из вариантов заключается в том, чтобы перераспределить время вашего кадра в единую последовательность отметок времени с фиксированной скоростью. Другим решением может быть указание более высокой скорости и ожидание того, что ваши истинные кадры будут смешаны с «пропущенными» кадрами. Вы должны попытаться найти то, что работает для вас. В конечном итоге файл MP4 будет иметь значение шкалы времени, а время отдельных кадров будет выражаться в виде увеличения целочисленных значений по отношению к этой частоте.