Хабрахабр

Стример из MiniDV-видеокамеры

Иногда может захотеться странного. Вот вроде бы лежит себе видеокамера стандарта MiniDV и лежит. Есть не просит. А что если взять и записать на её кассеты вовсе даже не видео, а, скажем, файлы. Запись-то всё равно цифровая. Пусть объём кассеты всего лишь около 13 ГБ (под данные получилось занять около 9.5 ГБ), пусть скорость чтения 3.5 МБ в секунду, но ведь получится простой домашний стример. Так сказать, “стример для бедных”. Почему бы не отправить на несколько кассет, скажем, какие-либо важные файлы. Просто так, на всякий случай. Попробуем!
На чём основана запись данных на MiniDV видеокамеру? Да просто можно вместо аудиоданных и части видеоданных подсунуть данные файлов — формат-то цифровой с отдельным сжатием каждого кадра по одинаковому алгоритму. Осталось дело за программой, которая это сможет сделать.

Для Windows, например, это были DVStreamer Pro и DVStreamer Lite. Поискав по интернету, как использовать бытовую видеокамеру как стример, я нашёл на форумах и в статьях десятилетней давности упоминания нескольких программ. Вторая бесплатная, но с массой ограничений (256 файлов не более 8 Мб каждый или один файл не более гигабайта). За первую лет десять назад авторы просили примерно 60$. Скачав со странички производителя данное ПО (версии Lite там почему-то больше нет – похоже, программа теперь одна), обнаружился ещё 30-дневный срок на, так сказать, пробу. Плюс многочисленные жалобы на нестабильную работу обеих версий. Зато она умеет непосредственно управлять камерой и автоматически выполнять перемотку к требуемому файлу. И да, эта программа так же, как и десятилетие назад, нестабильно работает и запросто вылетает от перемены погоды на Марсе.

Оказывается, кое-что доступно, а именно dvbackup-0. Ну что ж, а что же у нас доступно для Linux? 4. 0. Ну и в обратном порядке, он может так же извлечь файлы из RAW DV. Эта программа способна переданный ей поток данных упаковать в RAW DV формат и передать для записи другой программе dvcontrol, входящей в комплект.

А что если разобраться с dvbackup и самому сформировать RAW DV файл со своими собственными прибамбасами? К сожалению, завести dvcontrol мне не удалось – она стабильно не видела данных по ieee1394 от видеокамеры. А впрочем, всё это давно умеет видеоредактор Kino. Например, вместо статичного логотипа, показываемого видеокамерой во время воспроизведения видео от dvbackup, сделать свой логотип, добавив полоску прогресса и имя записываемого файла, а также добавить поддержку папок.
Осталось решить, чем бы такой RAW файл считать и записать на камеру. Сказано – сделано. Вот его-то мы и будем использовать для работы с видеокамерой. А вот считать не может. Разобрав dvbackup на части, и довольно быстро сформировав файл данных, я убедился, что Kino может записать этот файл на камеру (при этом ругаясь на невозможную частоту). Камера меж тем этот самый видеопоток на экранчике прекрасно отображает. Нет, говорит, видеопотока.

Ряд данных пришлось расшифровывать прямо с реального потока от видеокамеры, так как в моём описании DV-формата такие идентификаторы блоков не описаны. Вот тут-то и пришлось очень внимательно пройтись по формату DV, постепенно заменяя части из dvbackup (часто, с комментариями автора про “магические числа” и неизвестные назначения) на корректные и соответствующие описанию DV-формата. Правда, судя по всему, причина изначального неприятия была в том, что я отключил аудио, когда создавал RAW DV файл первый раз. В результате, после очередной доработки напильником, выяснилось, что Kino полученный видеофайл вполне удовлетворяет и он способен производить и запись и чтение данного файла без проблем. Только ли в этом было дело, я сейчас даже проверять не стал

Итак, в результате экспериментов получилась вот такая вот программа для Windows:

Так же можно очистить отчёт и прервать обработку, если вы передумали. Она умеет собирать файлы в RAW DV видеофайл и извлекать файлы из такого видеофайла. Всё это настраивается в диалогах программы. В начале видеоданных и перед каждым файлом можно задать префикс — это такой пустой блок, облегчающий позиционирование на начало файла (между файлами (локальный префикс) можно и не делать вовсе, а вот в самом начале (глобальный префикс) стоит чаще всего задать — это облегчит поиск начала блока файлов). В этом режиме файлы извлекаются, но не сохраняются. Так же есть режим проверки данных в DV-видеофайле.

В одном из вариантов программы я сделал сборку RAW DV внутрь AVI файла, но оказалось, что использованные мной видеоредакторы при экспорте теряют данные, помещённые в DV-формат. Полученный видеофайл вы можете записать на ленту любым редактором, который позволяет записывать файлы RAW DV. Поэтому от этого варианта пришлось отказаться.

Запись данных на видеокамеру в Kino выглядит вот так:

А так выглядит процесс записи на видеокамере:

Я записал на кассету часть фотоальбома 9. Насколько надёжен такой стример? При считывании сбой был зафиксирован у трёх файлов. 5 ГБ как набор файлов фотографий в формате jpg примерно по 1-3 МБ.

Единственная книжка, где хоть что-то было написано – это “Программирование аппаратных средств Windows”, но указанный там пример, во-первых, содержит ошибки, а во-вторых, просто отыскал мне устройство платы ieee1394, установленную в компьютере, а вовсе не видеокамеру. Конечно, хотелось бы управлять камерой напрямую, но я пока ещё не нашёл внятного описания работы с камерой по ieee1394. Поэтому, если кто-нибудь может рассказать о работе с камерой по ieee1394 с использованием WinAPI и на Си/Си++, то буду очень ему благодарен. Попытка отправить и принять данные с платы не увенчалась успехом.

Найденное мной описание формата DV.

Репозиторий программы на GitHub

Исходник и исполняемый файл программы

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть