|
|
- #!/bin/sh /etc/rc.common
- # Copyright (C) 2017 OpenWrt.org
-
- # TODO:
- # * support start multiple streams with one server
- # * support multiple usernames
- # * support HLS, etc.
-
- START=90
- STOP=10
-
- USE_PROCD=1
-
- SERVICE=v4l2rtspserver
- PROG=/usr/bin/$SERVICE
-
- error() {
- logger -t "$SERVICE" "$@"
- }
-
- start_instance() {
- local s="$1"
-
- config_get_bool enabled "$1" 'enabled' 0
- [ $enabled -eq 0 ] && return
-
- # validate device
- config_get device "$s" 'device'
- if [ ! -c "$device" ]; then
- error "device '$device' does not exist"
- return 1
- fi
-
- # get options
- config_get port "$s" 'port'
- config_get resolution "$s" 'resolution'
- config_get fps "$s" 'fps'
- config_get username "$s" 'username'
- config_get password "$s" 'password'
- config_get path "$s" 'path'
- config_get format "$s" 'format'
-
- # pull out resolution width and height from string
- local w="$(echo $resolution | cut -d'x' -f1)"
- local h="$(echo $resolution | cut -d'x' -f2)"
-
- # make sure format is uppercase
- format="$(echo $format | tr a-z A-Z)"
-
- # build args
- local args="-s"
- args="$args -P $port"
- args="$args -u ${path}"
- args="$args -F $fps"
- args="$args -W $w"
- args="$args -H $h"
- args="$args -f$format"
- args="$args -c" # fixes issue with corrupt frames with H264
-
- if [ -n "$username" ]; then
- args="$args -U ${username}:${password}"
- fi
-
- cmd="$PROG $args $device"
-
- # procd stuff
- procd_open_instance
- procd_set_param file /etc/config/$SERVICE
- procd_set_param command $cmd
- procd_set_param stdout 1
- procd_set_param stderr 1
- procd_add_mdns "rtsp" "tcp" "$port" "daemon=$SERVICE" "path=/$path"
- procd_close_instance
- }
-
- start_service() {
- config_load "$SERVICE"
- config_foreach start_instance "$SERVICE"
- }
-
- service_triggers() {
- procd_add_reload_trigger "$SERVICE"
- }
|