Я собираюсь повторить то, что я понял о настройке, и надеюсь, что это правильно; если нет, пожалуйста, обновите вопрос. Вот картинка, IP адреса составлены:
Computer A Blackbox B Blackbox C Computer D
Laptop etc. Embedded Embedded Laptop
10.0.0.1/24 --- 10.0.0.2/24... 10.0.1.2/24 --- 10.0.1.1/24
Port 123 Port 123
Итак, A и B соединены через Ethernet (LAN ), B и C через вашу радиостанцию, а C и D снова через Ethernet. Существует приложение, работающее на B и C, которое прослушивает порт 123 и пересылает все с этого порта или на него на другую сторону по радио. Вы хотите запустить VLC на A и D и транслировать видео, чтобы продемонстрировать задержку.
В этом случае я бы установил туннель с socat
следующим образом. На А,
socat TCP4:10.0.0.2:12 TUN:10.0.2.1/24,iff-up
и на Б,
socat TCP4:10.0.1.2:12 TUN:10.0.2.2/24,iff-up
Проверьте с помощью ip route
на A и D, что у вас есть что-то вроде
10.0.2.0/24 dev tun0 proto kernel scope link src...
Это своего рода притворство, что A и D подключены напрямую, как по локальной сети, как на этом рисунке:
A D
10.0.2.1/24 ---- 10.0.2.2/24
tun0 tun0
Проверьте, работает ли это, выполнив ping 10.0.2.2
из A, а если радиосоединение двунаправленное, с помощью ping 10.0.2.1
из D. Если соединение не двунаправленное, у вас могут возникнуть проблемы, я не уверен.
(Я проверил это, используя немного другую настройку, но не могу проверить однонаправленное соединение. Я не тестировал потоковую передачу VLC, как описано ниже ).
Теперь вы можете запустить поток, отправляющий экземпляр VLC, на A и поток, принимающий экземпляр VLC, на D. Теоретически все протоколы должны работать (, если радиосоединение двунаправленное ), попробуйте их все. Если радиосоединение однонаправленное, RTP и UDP должны работать. Пункт назначения потока — это10.0.2.2
(адрес туннеля D )для методов UDP и RTP. Если вы отправляете через HTTP, получателю нужно что-то вроде vlc http://10.0.2.1:8080/go.mpg
.
Запустите вторую функцию как фоновый подпроцесс -, а затем завершите все подпроцессы при выходе из сценария оболочки:
second_process () {
while true
do
wc -l output.txt
sleep 1
done
}
clean_db () {
second_process &
for i in $(seq 5);
do
echo "kfjdjkfdf" >> output.txt
echo "Done adding" $i
sleep 1
done
}
clean_db
pkill -P $$
Обратите внимание, что pkill -P $$
убивает все подпроцессы -.
Окончательное и полное решение состоит в следующем:
Check_process () {
while true
do
wc -l output.txt | awk '{ print $1 }'
sleep 5
done
}
clean_db () {
# The following sets build in bash trap for Ctrl+C and kills background process when Ctrl+C is detected
trap 'kill $BGPID; exit' INT
Check_process &
BGPID=$!
while read i
do
Some_long_process >> output.txt
done < input_db
}
clean_db