Комментарии 22
Сразу скажу, что ffmpeg — не единственное решение. Но, например, с VLC у меня так ничего и не получилось: поддержка RTMP там пока экспериментальная.
И плюсом есть какие-то проблемы с HLS у модуля, по крайней мере live и просмотр hls на ipad у меня не пошло почему то.
Еще бы авторам модуля неплохо было-бы добавить запись не только в flv, но и в mp4/x264/aac
Еще бы авторам модуля неплохо было-бы добавить запись не только в flv, но и в mp4/x264/aac
С HLS полный порядок. Недавно я реализовал нативную поддержку HLS, теперь библиотеки ffmpeg не нужны для сборки с HLS.
nginx-rtmp не поддерживает RTMPT, что очень печально, т.к. часть клиентов (особенно в организациях) ходят в интернет через прокси, которая об RTMP ничего не знает.
Как быть с мобильными клиентами, которые не поддерживают flash?
А какие есть решения для записи с камеры через веб-страницу (flash, html5)?
У нас трансляция ведется с обычного компьютера, и адрес там динамический. Поэтому написал такой скрипт:
Соответственно в конфиге-заготовке nginx.conf.bone в директиве
Сам скрипт запускается по SSH, который в свою очередь авторизуется по ключу, чтобы девочкам не нужно было ничего водить. Они просто запускают ярлычок на рабочем столе, и все.
Кстати, победить нормальное вещание веб-камеры через ffmpeg так и не удалось, поэтому я тупо настроил Wirecast. Хоть он и избыточен для задачи, но у него есть возможность обращаться к командам из вне (кажется он подключается как COM).
Так как я быдлокодер, то смог победить только подключение по JS.
Само собой этот скрипт работает только из-под IE, и для того, чтобы не нужно было ничего тыкать в браузере дополнительно, необходимо html-файл добавлять в доверенные сайты, а для последних позволять запуск ActiveX без спроса.
Вообще можно настроить таким образом автоматическую смену камер, и прочие плюшки Wirecast, API позволяет многое.
#!/bin/bash
PUBLISER_IP=$(echo $SSH_CLIENT | grep -o "^\S*")
cp /usr/local/nginx/conf/nginx.conf.bone /usr/local/nginx/conf/nginx.conf
sed -i "s/%PUBLISHER_IP%/$PUBLISER_IP/g" /usr/local/nginx/conf/nginx.conf
killall nginx-rtmp
/usr/local/nginx/sbin/nginx-rtmp
Соответственно в конфиге-заготовке nginx.conf.bone в директиве
allow publish %PUBLISHER_IP%;
подменяется текст на адрес, с которого был залогинен клиент по SSH. Затем на всякий случай сносим nginx-rtmp со старым конфигом, и запускаем его заново.Сам скрипт запускается по SSH, который в свою очередь авторизуется по ключу, чтобы девочкам не нужно было ничего водить. Они просто запускают ярлычок на рабочем столе, и все.
Кстати, победить нормальное вещание веб-камеры через ffmpeg так и не удалось, поэтому я тупо настроил Wirecast. Хоть он и избыточен для задачи, но у него есть возможность обращаться к командам из вне (кажется он подключается как COM).
Так как я быдлокодер, то смог победить только подключение по JS.
var wirecast = new ActiveXObject("Wirecast.Application");
if (wirecast) {
var doc = wirecast.DocumentByName ("MyDocument", 2)
var layer = doc.LayerByIndex(1)
layer.ActiveShotID = doc.ShotIDByName('MainCamera', 2)
layer.Go()
doc.Broadcast('start');
}
Само собой этот скрипт работает только из-под IE, и для того, чтобы не нужно было ничего тыкать в браузере дополнительно, необходимо html-файл добавлять в доверенные сайты, а для последних позволять запуск ActiveX без спроса.
MyDocument
— название ранее сохраненного в Wirecast пресета, а MainCamera
название шота, который будет транслироваться.Вообще можно настроить таким образом автоматическую смену камер, и прочие плюшки Wirecast, API позволяет многое.
А как насчет ARM-донглов? есть поддержка? Будут проблемы?
Можно ли использовать предложенную вами USB плату захвата как микшерский пульт? Поясню: собираемся сделать конференцию в 4х залах, хотелось бы транслирвоать в сеть не 4 потока, а миксованные записи самых интересных выступлений. Но прерывания канала не должно быть. Как выход нашли только видеопульт за сумму свыше 100 тыс. рублей, подача с него видеосигнала на плату захвата. А в вашей плате я заметил сразу 4 входа, нет возможности протестировать? Может она будет решением и для нашего случая
Та плата имеет только 1 канал захвата видео. Но в можете купить 4 платы, так как они стоят просто копейки, а видео миксовать через Wirecast, например. Главное, чтобы компьютер справлялся с 4 потоками.
Ну если 4 канала одновременно записывать не надо, а только переключаться, то такая штука подойдет.
Мы делали через нее трансляцию конференции, когда у нас дорогая плата захвата отказалась работать.
Но под Windows 7 x64 на ней почему-то работает только канал №2 — дрова кривые.
vasiliy, какую ОС вы хотите использовать?
Мы делали через нее трансляцию конференции, когда у нас дорогая плата захвата отказалась работать.
Но под Windows 7 x64 на ней почему-то работает только канал №2 — дрова кривые.
vasiliy, какую ОС вы хотите использовать?
ОС могу использовать ту, под которой эта штука заведется. Каналы действительно записывать не надо, просто нужно переключиться на определенную камеру в определенный момент времени и подать картинку в поток. Так как вход для аудио здесь один, то думаю это решить каким нибудь ручным переключателем.
Товарищ автор, а не на х64 оно у вас завелось с переключением по каналам? Прямо с ffmpeg? Поведайте, пожалуйста!
У нас сейчас остро стоит вопрос с этими девайсинами: никак не выходит подружить их с компьютером и, тем более, с ffmpeg.
У нас сейчас остро стоит вопрос с этими девайсинами: никак не выходит подружить их с компьютером и, тем более, с ffmpeg.
Что делает параметр live=1?
Я так понимаю, что он нужен при онлайн-вещании.
У меня и без него с вебкамеры и с сетевой вещало, я поэтому и спрашиваю. Есть документ, описывающий все параметры?
ffmpeg вроде librtmp юзает, поэтому опции эти можно посмотреть в man librtmp.
Возможно, эта опция ничего и не меняет в нашем случае, можно не заморачиваться.
Возможно, эта опция ничего и не меняет в нашем случае, можно не заморачиваться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Онлайн вещание через Nginx-RTMP: несколько готовых рецептов