Метка «MJPEG»

Материал статьи отражает личный опыт автора и не претендует на научную точность. Буду рад любым исправлениям и дополнениям. Для тех, кто не хочет читать дальше, правильный ответ на главный вопрос: MJPEG.

Вступление

Клиенты часто предпочитают архаичные способы передачи проектных материалов и случаи, когда 5-минутный фильм присылают вложением по почте, сжатым до 20 МБ, не являются редкостью. Материал для ознакомления становится материалом для работы, что влечёт за собой ряд неочевидных проблем, основные из которых — низкая детализация картинки (вызванная чрезмерным сжатием) и использование видео кодеков, которые не предназначены для аудиомонтажа.

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

Низкое качество картинки так же усложняет определение звукорежиссёром начала и завершения динамичных визуальных событий, что влечёт за собой их нечёткую синхронизацию с аудио. Но чаще всего, отставание или опережение звуком картинки связано с особенностями видео кодека, который использовался в процессе аудомонтажа, о чём и пойдёт речь ниже.
Читать полностью »

Предисловие

Не так давно, возникла необходимость захвата видео с web камеры и передавать его по сети используя .Net.
Так как с подобной задачей я столкнулся впервые, то первым делом начал искать информацию по этому вопросу.
Как выяснилось, что в чистом .Net нет поддержки работы с web камерами. Перебрав несколько различных библиотек, свой выбор остановил на Aforge.net.

Aforge.net — это фреймворк для решения целого ряда задач, из которого нам понадобится библиотеки AForge.Video.

Захват изображения

Для захвата видео с устройства видео ввода существует класс AForge.Video.DirectShow.VideoCaptureDevice. Ему необходимо задать моникер устройства с которого будет происходить захват. Так же необходимо задать обработчик события NewFrame. Это событие возникает каждый раз, когда с устройства будет получен новый кадр, который и передается в обработчик в виде объекта Bitmap, где его уже можно обработать:

private void VideoSourceNewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
    var img = (Image) eventArgs.Frame;
    using (var ms=new MemoryStream())
    {
        img.Save(ms,ImageFormat.Jpeg);
       //Сохраняем изображение в массив байт, для последующего формирования mjpeg
        _bufImage = ms.ToArray();
    }
}

Читать полностью »

Наконец, продвижение вперёд. Всё, теперь домашние не посмеют назвать робота Митю «радиоуправляемой машинкой»!

Оказалось непросто найти относительно лёгкий и работающий способ передачи видео и аудио потоков от Android-гаджета к удалённому управляющему приложению на ПК. Без этого шага я категорически не хотел двигаться дальше, поэтому довольно надолго завяз в своём упрямстве.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js