качество живого потока против потери кадров? - PullRequest
2 голосов
/ 20 октября 2011

У меня есть специальное приложение FMS и вещатель Flash Player, который использует определение полосы пропускания для установки качества, например:

camera.setQuality( detected_bandwidth, 0 );

Это работает очень хорошо, чтобы избежать потери кадров вещателями с медленной скоростью загрузки, но теперь яхотел бы отдать предпочтение отбрасыванию кадров по качеству видео.Проблема в том, что независимо от любой другой команды setQuality, такой как:

camera.setQuality( detected_bandwidth, 90 );

или

camera.setQuality( 0, 90 );

, я получаю намного лучшее качество изображения с пропущенными кадрами по желанию, но с тем, как отбрасываются кадрыочень непоследователен и производит очень резкое видео.Например, кажется, что воспроизводится около 3 или 4 кадров, а затем пауза, а затем еще 3 или 4, затем еще одна пауза и т. Д.

Я также попытался выполнить многие настройки буфера, но безуспешно.Есть ли способ сгладить отбрасывание кадров, так что это больше похоже на 1 кадр, паузу, 1 кадр, паузу и т. Д.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Попробуйте изменить cam.setMode (), чтобы иметь небольшое разрешение. SetQuality изменяет качество и может уменьшать пропускную способность, но если режим вашей камеры имеет высокое разрешение, он отправляет много пиксельных данных в каждом кадре.

Кроме того, попробуйте использовать разные веб-камеры, потому что разные веб-камеры иногда дают разные результаты.

1 голос
/ 26 октября 2011

Нет серебряной пули, но у меня есть несколько хаков, которые вы можете попробовать.

Вы можете рассмотреть возможность изменения частоты кадров захвата камеры на основе результата обнаружения полосы пропускания.(Я предполагаю, что вы предоставляете некоторое пространство для любого отправляемого звука?).

Я никогда не пробовал этого, но если камера также должна отображаться локально с полным FPS, вы можете попробовать динамически подключить иотсоединение камеры к сетевому потоку и от него, чтобы имитировать низкую частоту кадров по вашему выбору - хотя это может привести к тому, что каждый кадр будет ключевым кадром, что приведет к пустой трате пропускной способности.максимум 48, если вы еще этого не сделали - каждый ключевой кадр непременно приведет к паузе в ситуациях с низкой пропускной способностью.В качестве альтернативы - вы можете использовать интервал ключевых кадров, равный 1, что означает, что каждый кадр является ключевым кадром.Вы будете тратить пропускную способность, но, поскольку каждому кадру потребуется некоторое время для отправки времени выполнения, не следует ставить в очередь кучу их в исходящем буфере, и вы можете получить более стабильный поток.

...