Команда teeчитает из стандартного ввода и копирует в любое количество файлов плюс стандартный вывод по умолчанию, см. man teeПодробности. Это означает, что вы можете попросить tee создать файл из ввода, а затем направить вывод во что-то еще.
Добавление дополнительной трубы теоретически добавляет немного неэффективности. Что касается того, важно это или нет, вам придется судить самим, используя собственный метод потоковой передачи. Мой текущий метод не является удовлетворительным при полном разрешении. Сейчас это не очень интересно, но когда это произойдет, я постараюсь найти что-то лучше (например, предположительно, gstreamer работает лучше, чем clvc).
Однако стоит отметить, что файл, сохраненный локально на пи одновременно, имеет отличное качество, поэтому активность не мешает распивиду. Вот пример:
raspivid -o - -t 0 | tee test_video.h264 |
cvlc -v stream:///dev/stdin --sout '#standard{access=http,mux=ts,dest=:8080' :demux=h264
Я разбил это на две строки для удобства чтения; вы можете нажать return после |(pipe) и завершить команду так же, как вы можете разбить строку \. Вы можете заменить на cvlcто, что вы хотите. Опять же, хотя поток был низкого качества, test_video.h264получилось идеально.
Если я уменьшу разрешение до 640x360, то это нормально, с задержкой в секунду или две, что я обычно получаю. Я не думаю, что teeвторой канал влияет на качество потока; они способны иметь гораздо более высокую пропускную способность, чем это необходимо, и не требуют большого количества системных ресурсов.
Процессор работал на 35-45%, что соответствует скорости потоковой передачи видео tee.
raspividвы можете сделатьteeвывод в файл и gstreamer или что-то еще (см.man tee). Пока один поток направляется прямо на диск, это не приведет к большим накладным расходам, но если вы хотите обрабатывать ввод в двух разных форматах одновременно, я думаю, что это будет слишком большой работой для пи.