Как я могу записать видео в реальном времени с gstreamer без пропуска кадров? - PullRequest
4 голосов
/ 24 марта 2009

Я пытаюсь использовать gstreamer 0.10 из Python для одновременного отображения источника видео v4l2 и записи его в xvid-in-avi. В течение длительного периода времени компьютер будет достаточно быстрым, чтобы сделать это, но если другая программа использует диск, она сбрасывает кадры. Это достаточно плохо, но при воспроизведении в видео возникают всплески движения, когда кадры пропускаются вместо отображения кадров, которые мы могли кодировать с более низкой частотой кадров.

Трубопровод v4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesink, и тройник также опускается до queue ! xvimagesink sync=false. Я пытался добавить videorate перед xvidenc, но это, кажется, усугубляет ситуацию.

Я рассмотрел подкачку несжатого видео на диск в этом конвейере и кодирование его в фоновом потоке. Что еще я мог сделать, чтобы решить эту проблему? xvidenc или avimux делают неправильные вещи с пропущенными кадрами? Могу ли я значительно увеличить размер очереди, предшествующей моему кодеру?

Ответы [ 2 ]

5 голосов
/ 24 марта 2009

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

2 голосов
/ 10 февраля 2010

и вам нужно написать xvimagesink, а не xvimagesync

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...