Automatisk opstart af processer som eks. apache nginx eller andre services udføres nogle gange via /etc/rc.local men der er også bedre metoder eks. en desktop kan ha script som startes ved login og i dette eksempel vil vi gøre det med systemD.
Vi har måske en srt-server som håndtere SRT input, SRT output og rtmp input men det kunne også noget helt andet.
Vi skal lave et script som klare dette og den vil ikke starte op hvis network.taget altså netværket ikke er kørende og det er lidet af det smarte med systemd:
sudo joe /etc/systemd/system/srtsrt1.service
Du kan naturligvis benytte en anden editor end joe,vim,nano men kopier dette:
[Unit]
Description=SRTSRT og RTMP eksempel
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
#ExecStart=/usr/local/bin/srt-serverstart.sh
# srt 1935 lytter. Srt out 1936 og tcp 1937
ExecStart=/usr/local/bin/srt-server 1935 1936 1937
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
|
Du kan se den siger hvor vores script skal startes og at den vil genstarte den process hvis efter hvis den stopper.
Vores srtsrtrtmp.service fil skal lige ha korrekte rettigheder:
sudo chmod 640 /etc/systemd/system/srtsrtrtmp.service
Vi kan nu starte stoppe og se service med
sudo systemctl status srtsrtrtmp.service
Den kender placering på script/process via ExecStart angivelse.
Indholdet i srt-serverstart.sh udføres og vi kan enable eller disable en process med systemctl kommando.
Efter sudo systemctl start srtsrtrtmp.service så vil den måske se sådan ud:
sudo systemctl status srtsrtrtmp.service
● srtsrtrtmp.service - SRT SRT RTMP eksempel
Loaded: loaded (/etc/systemd/system/srtsrtrtmp.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2022-02-26 08:45:38 CET; 14s ago
Main PID: 17034 (srt-server)
Tasks: 9 (limit: 9404)
Memory: 1.0M
CPU: 2.364s
CGroup: /system.slice/srtsrtrtmp.service
└─17034 /usr/local/bin/srt-server 4001 4002 4003
feb 26 08:45:52 obs2nux srt-server[17076]: libavutil 56. 70.100 / 56. 70.100
feb 26 08:45:52 obs2nux srt-server[17076]: libavcodec 58.134.100 / 58.134.100
feb 26 08:45:52 obs2nux srt-server[17076]: libavformat 58. 76.100 / 58. 76.100
feb 26 08:45:52 obs2nux srt-server[17076]: libavdevice 58. 13.100 / 58. 13.100
feb 26 08:45:52 obs2nux srt-server[17076]: libavfilter 7.110.100 / 7.110.100
feb 26 08:45:52 obs2nux srt-server[17076]: libswscale 5. 9.100 / 5. 9.100
feb 26 08:45:52 obs2nux srt-server[17076]: libswresample 3. 9.100 / 3. 9.100
feb 26 08:45:52 obs2nux srt-server[17076]: libpostproc 55. 9.100 / 55. 9.100
feb 26 08:45:52 obs2nux srt-server[17076]: [rtmp @ 0x56039d1435c0] Cannot open connection tcp://0.0.0.0:4003?listen&lis>
feb 26 08:45:52 obs2nux srt-server[17076]: rtmp://0.0.0.0:4003/rtmp/rtmp2modageren: Address already in use
For at denne service selv starter op når maskinen genstartes skal du huske:
sudo systemctl enable srtsrtrtmp.service
På denne måde kan du også lave andre services med eksempelvis ffmpeg og srt input plus phassprahse
måske en opstart af srt-live-transmit [options] <input-uri> <output-uri> så behøver man næsten kun service filen.
En andet eksempel er opstart af srt forbindelse med passphrase
[Unit]
Description=SecureSrt1
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
# Placering af filen på Linux er /etc/systemd/system
ExecStart=/usr/bin/srt-live-transmit "srt://:1935?mode=listener&passphrase=supercoolpassword" srt://127.0.0.1:4001
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
|
På den måde kan man også sætte ffmpeg op til at vente på rtmp eller srt med bestemt password næsten som vi gør med srt-live-transmit.
I øvrigt er SRT ikke compileret ind i min aktuelle version af VLC på Linux men eksempelvis kan vi benytte srt-live-transmit sådan:
srt-live-transmit srt://:5002 udp://127.0.0.1:1234
Det betyder connect til lokalt til port 5002 med srt og send data ud på 127.0.0.1 port 1234 og ja det kunne være
man netop havde brug for denne function
Du kan nu i VLC åbne netværks adressen med vlc udp://:1234 eller udp://@:1234
https://github.com/ALLATRA-IT/srt-server har ikke passphrase muligheder så så den er åben... så man skal lige ha styr på hvilke porte man åbner.
Du kan måske med fordele benytte ffmpeg også sikre dig at output er h264 og acc - altså noget som vlc med sikkerhed forstår ;)