2012-05-14 10 views
0

Я хотел бы захватить видео, сжать его и мультиплексировать его как mpeg2 ts. Все это довольно просто с библиотеками ffmpeg, но то, что я хотел бы сделать, вместо того, чтобы записывать его в файл, - это захват пакетов ts в буфере и использование этого потока другими способами. Есть ли простой способ сделать это?Получить пакеты TS в буфер из libavformat

Чтобы записать закодированные кадры в файл прямо сейчас, я использую av_interleaved_write_frame (oc, & pkt). OC - ​​это выходной контекст с указанием имени файла и формата. pkt - это AVPacket, содержащий сжатый кадр. Av_interlaced_write_frame выполняет мультиплексирование и запись файла.

В конечном итоге я хотел бы написать один и тот же поток ts для нескольких файлов, а также начать и прекратить запись разных файлов независимо друг от друга. Запуск нового мультиплексора для каждого потока кажется неэффективным, поскольку поток TS не должен нуждаться в каком-либо заголовке или правильном окончании для правильного воспроизведения (если то, что я прочитал правильно)

Я как бы потерялся, пытаясь найти хорошие примеры в коде ffmpeg, а библиотеки не очень хорошо документированы. Любые данные по этому вопросу оцениваются. Спасибо!

ответ

1

Наконец-то он работал. Один из способов сделать это - использовать avio_alloc_context для настройки обратного вызова, когда вы делаете то, что хотите с потоком. Этот парень имеет хороший пример этого:

https://github.com/EvilTengil/kinect-streamer/blob/master/src/kstreamer/ffv1_depth_encoder.cpp

+2

хранилище GitHub по ссылке вы вывесили ушел; если вы помните или используете какой-то код, не могли бы вы разместить фактический пример кода? –