Для этого нам потребуется доп.ПО: dvswitch, dvsource, dvsilk и ffmpeg
Как правило всё это есть в репозиториях и сложности в установки нет.
1.) Запускаем dvswitch
#!/bin/bash
dv_host="127.0.0.1" #ip адрес ПК с запущенным dvswitch
dv_port="54321" #порт который будит слушать dvswitch
dvswitch -h ${dv_host} -p ${dv_port};
exit 0
2.) Подключаем dv камеры, вот тут много "подводных камней".
Начнем, если Вы планируете подключить только одну dv-камеру то тут всё просто:
#!/bin/bash
dv_host="127.0.0.1" #ПК с запущенным dvswitch
dv_port="54321" #порт dvswitch
dvsource-firewire -h ${dv_host} -p ${dv_port};
exit 0
Если у Вас несколько dv-камер, то по документации достаточно добавить параметр -c hex_GUID_dv-камеры
А вот тут начинаются приколы:
I.) Как узнать эти GUID?
grep "firewire_core: created device" /var/log/dmesg
Только нужно учесть что здесь будит не только GUID dv-камер, но и GUID чипов в вашей карты ieee1394, так что не удивляйтесь.
Так же можно поставить GTK+ программу gscanbus и посмотреть в ней.
II.) Если у вас каждая dv-камера подключена к отдельной плате ieee1394, то проблем тоже нет, указываем hex_guid и всё нормально, но в моём случаи на плате ieee1394 было 2 выхода и чип один. При этом при попытки подключить камеру стандартным методом подключалась только 1 камера и на указание GUID вообще не реагирует!!!
Пришлось извращаться:
#!/bin/bash
dv_guid="0x0800460103F54296" #GUID камеры
dv_host="-h 127.0.0.1" #ПК с dvswitch
dv_port="-p 54321" #порт dvswitch
dv_fifo="/tmp/"${dv_guid} #потоковый файл
audio="-ab 96k -f alsa -ac 2 -i pulse -ar 44100"
mkfifo ${dv_fifo}; #создаём потоковый файл
dvgrab -guid ${dv_guid} - | ffmpeg -i - -f dv ${audio} -target pal-dv - > ${dv_fifo}& #через dvgrab заводим видео в потоковый файл
dvsource-file ${dv_host} ${dv_port} ${dv_fifo}; #подключаем поток к dvswitch
exit 0
Задержка видео примерно 10сек., зато работает)))
3.) Если нужно подключить web-камеру
#!/bin/bash
dv_host="-h 127.0.0.1" #ПК с dvswitch
dv_port="-p 54321" #порт dvswitch
dev_web="video0"
web_fifo="/tmp/"${dev_web}
mkfifo ${web_fifo};
ffmpeg -f video4linux2 -s vga -r 25 -i /dev/${dev_web} -f s16le -ar 48000 -ac 2 -i /dev/zero -target pal-dv - > ${web_fifo}&
dvsource-file ${dv_host} ${dv_port} ${web_fifo}
exit 0
По аналогии с предыдущем, думаю всё понятно.
4.) Вещаем собранный поток из dvswitch
#!/bin/bash
dv_host="127.0.0.1";
dv_port="54321";
rtmp="tcp://ip_медиасервера:порт";
kadr="-r 25";
video="-vcodec libx264 -b 200k -vpre slow -s 720x530";
audio="-ab 96k -f alsa -ac 2 -i pulse -ar 44100";
str_name="-metadata streamName=livestream"; #имя нашего потока
dvsink-command -h ${dv_host} -p ${dv_port} -- ffmpeg -i - -f dv ${audio} ${video} -bufsize 20000k ${kadr} ${str_name} -threads 0 -f flv ${rtmp};
exit 0
Как правило всё это есть в репозиториях и сложности в установки нет.
1.) Запускаем dvswitch
#!/bin/bash
dv_host="127.0.0.1" #ip адрес ПК с запущенным dvswitch
dv_port="54321" #порт который будит слушать dvswitch
dvswitch -h ${dv_host} -p ${dv_port};
exit 0
2.) Подключаем dv камеры, вот тут много "подводных камней".
DV камеру не рекомендуется подключать "на живую" есть шанс что сгорит
Начнем, если Вы планируете подключить только одну dv-камеру то тут всё просто:
#!/bin/bash
dv_host="127.0.0.1" #ПК с запущенным dvswitch
dv_port="54321" #порт dvswitch
dvsource-firewire -h ${dv_host} -p ${dv_port};
exit 0
Если у Вас несколько dv-камер, то по документации достаточно добавить параметр -c hex_GUID_dv-камеры
А вот тут начинаются приколы:
I.) Как узнать эти GUID?
grep "firewire_core: created device" /var/log/dmesg
Только нужно учесть что здесь будит не только GUID dv-камер, но и GUID чипов в вашей карты ieee1394, так что не удивляйтесь.
Так же можно поставить GTK+ программу gscanbus и посмотреть в ней.
II.) Если у вас каждая dv-камера подключена к отдельной плате ieee1394, то проблем тоже нет, указываем hex_guid и всё нормально, но в моём случаи на плате ieee1394 было 2 выхода и чип один. При этом при попытки подключить камеру стандартным методом подключалась только 1 камера и на указание GUID вообще не реагирует!!!
Пришлось извращаться:
#!/bin/bash
dv_guid="0x0800460103F54296" #GUID камеры
dv_host="-h 127.0.0.1" #ПК с dvswitch
dv_port="-p 54321" #порт dvswitch
dv_fifo="/tmp/"${dv_guid} #потоковый файл
audio="-ab 96k -f alsa -ac 2 -i pulse -ar 44100"
mkfifo ${dv_fifo}; #создаём потоковый файл
dvgrab -guid ${dv_guid} - | ffmpeg -i - -f dv ${audio} -target pal-dv - > ${dv_fifo}& #через dvgrab заводим видео в потоковый файл
dvsource-file ${dv_host} ${dv_port} ${dv_fifo}; #подключаем поток к dvswitch
exit 0
Задержка видео примерно 10сек., зато работает)))
3.) Если нужно подключить web-камеру
#!/bin/bash
dv_host="-h 127.0.0.1" #ПК с dvswitch
dv_port="-p 54321" #порт dvswitch
dev_web="video0"
web_fifo="/tmp/"${dev_web}
mkfifo ${web_fifo};
ffmpeg -f video4linux2 -s vga -r 25 -i /dev/${dev_web} -f s16le -ar 48000 -ac 2 -i /dev/zero -target pal-dv - > ${web_fifo}&
dvsource-file ${dv_host} ${dv_port} ${web_fifo}
exit 0
По аналогии с предыдущем, думаю всё понятно.
4.) Вещаем собранный поток из dvswitch
#!/bin/bash
dv_host="127.0.0.1";
dv_port="54321";
rtmp="tcp://ip_медиасервера:порт";
kadr="-r 25";
video="-vcodec libx264 -b 200k -vpre slow -s 720x530";
audio="-ab 96k -f alsa -ac 2 -i pulse -ar 44100";
str_name="-metadata streamName=livestream"; #имя нашего потока
dvsink-command -h ${dv_host} -p ${dv_port} -- ffmpeg -i - -f dv ${audio} ${video} -bufsize 20000k ${kadr} ${str_name} -threads 0 -f flv ${rtmp};
exit 0