blob: 7a19ef5202a6b19d448a6f36c5dd3366af0c74a3 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2017 OpenWrt.org
3
4# TODO:
5# * support start multiple streams with one server
6# * support multiple usernames
7# * support HLS, etc.
8
9START=90
10STOP=10
11
12USE_PROCD=1
13
14SERVICE=v4l2rtspserver
15PROG=/usr/bin/$SERVICE
16
17error() {
18 logger -t "$SERVICE" "$@"
19}
20
21start_instance() {
22 local s="$1"
23
24 config_get_bool enabled "$1" 'enabled' 0
25 [ $enabled -eq 0 ] && return
26
27 # validate device
28 config_get device "$s" 'device'
29 if [ ! -c "$device" ]; then
30 error "device '$device' does not exist"
31 return 1
32 fi
33
34 # get options
35 config_get port "$s" 'port'
36 config_get resolution "$s" 'resolution'
37 config_get fps "$s" 'fps'
38 config_get username "$s" 'username'
39 config_get password "$s" 'password'
40 config_get path "$s" 'path'
41 config_get format "$s" 'format'
42
43 # make sure format is uppercase
44 format="$(echo $format | tr a-z A-Z)"
45
46 # build args
47 local args="-s"
48 args="$args -P $port"
49 args="$args -u ${path}"
50 args="$args -F $fps"
51 args="$args -G ${resolution}"
52 if [ ! -z "$format" ]; then
53 args="$args -f$format"
54 fi
55 args="$args -c" # fixes issue with corrupt frames with H264
56
57 if [ -n "$username" ]; then
58 args="$args -U ${username}:${password}"
59 fi
60
61 cmd="$PROG $args $device"
62
63 # procd stuff
64 procd_open_instance
65 procd_set_param file /etc/config/$SERVICE
66 procd_set_param command $cmd
67 procd_set_param stdout 1
68 procd_set_param stderr 1
69 procd_add_mdns "rtsp" "tcp" "$port" "daemon=$SERVICE" "path=/$path"
70 procd_close_instance
71}
72
73start_service() {
74 config_load "$SERVICE"
75 config_foreach start_instance "$SERVICE"
76}
77
78service_triggers() {
79 procd_add_reload_trigger "$SERVICE"
80}