diff --git a/kernel b/kernel index 12527c7..dee0af5 100755 Binary files a/kernel and b/kernel differ diff --git a/rootfs/etc/init.d/rcS b/rootfs/etc/init.d/rcS index ad49e73..937825a 100644 --- a/rootfs/etc/init.d/rcS +++ b/rootfs/etc/init.d/rcS @@ -3,13 +3,12 @@ /bin/mount -a echo " - _ _ _ _ _ _ _ _ _ _ _ _ - \ _ _ _ _ _ ___ - / /__/ \ |_/ - / __ / - _ ___ - / / / / / / - _ _ _ _/ / / \_/ \_ ______ -___________\___\__________________ + _____ _ __ _______ _ + |_ _| (_) [ | _ |_ __ \ (_) + | | __ _ .--. | | / ] | |__) |__ + | | _ [ | [ \`.-. | | '' < | ___/[ | + _| |__/ | | | | | | | | |\`\ \ _| |_ | | + |________|[___][___||__][__| \_]|_____| [___] " for initscript in /etc/init.d/S[0-9][0-9]* do @@ -20,41 +19,4 @@ do fi done -/sbin/sysctl -p /etc/sysctl.conf - -cd /ko -./load3521d -i - -telnetd - -chown root:root /var/empty -/usr/local/sbin/sshd - -#UART3 -#himm 0x120F0100 1 -#himm 0x120F0100 1 - -#UART1 -himm 0x120F00F8 1 -himm 0x120F00FC 1 - -#I2S -himm 0x120F00A0 1 -himm 0x120F00A4 1 -himm 0x120F00A8 1 -himm 0x120F00AC 1 -himm 0x120F00B0 1 -himm 0x120F00B4 1 -himm 0x120F00B8 1 -himm 0x120F00BC 1 - -#QOS -himm 0x12120084 0x66663666 - -#i2c -himm 0x120F00E0 1 -himm 0x120F00E4 1 - /link/shell/init.sh - - diff --git a/rootfs/etc/sysctl.conf b/rootfs/etc/sysctl.conf index be8b9a9..5496906 100644 --- a/rootfs/etc/sysctl.conf +++ b/rootfs/etc/sysctl.conf @@ -12,5 +12,7 @@ net.ipv4.tcp_wmem = 32768 4336600 873200 net.ipv4.tcp_rmem = 32768 4336600 873200 net.ipv4.tcp_mem = 786432 1048576 1572864 -net.ipv4.ip_forward = 1 +#net.ipv4.ip_forward = 1 +#net.ipv4.tcp_tw_recycle = 1 +#net.ipv4.tcp_tw_reuse = 1 diff --git a/rootfs/etc/udev/automount.sh b/rootfs/etc/udev/automount.sh index 631d860..eec66c4 100644 --- a/rootfs/etc/udev/automount.sh +++ b/rootfs/etc/udev/automount.sh @@ -1,3 +1,5 @@ #!/bin/sh -mount -t vfat -o sync /dev/sda1 /root/usb -mount -t ext4 -o sync /dev/sda1 /root/usb +/bin/umount /root/usb +/bin/mount -t vfat -o codepage=936,utf8 /dev/sda1 /root/usb +/bin/mount -t ext4 /dev/sda1 /root/usb +/usr/bin/ntfs-3g /dev/sda1 /root/usb diff --git a/rootfs/ko/load3521d b/rootfs/ko/load3521d index 7cede28..0c13c0e 100644 --- a/rootfs/ko/load3521d +++ b/rootfs/ko/load3521d @@ -4,7 +4,7 @@ # -i : insmod all modules # default : rmmod all moules and then insmod them # - +. /link/shell/util/hardware.sh ####################Variables Definition########################## AD_TYPE=6134 # ad type @@ -15,7 +15,7 @@ os_mem_size=200; # 64M, os mem mmz_start=0x8C800000; # mmz start addr mmz_size=312M; # 128M, mmz size board_mode="demo"; # demo or sck -if [ "`cat /link/config/fac`" == "SH" ]; then +if [ "$fac" == "SH" ]; then mem_total=1024; # 512M, total mem mem_start=0x80000000; # phy mem start @@ -115,7 +115,11 @@ insert_ko() insmod hi3521d_vpss.ko insmod hi3521d_vou.ko +if [ "$fac" == "SH" ]; then insmod hifb.ko video="hifb:vram0_size:32400,vram1_size:8100" softcursor="off" +else + insmod hifb.ko video="hifb:vram0_size:8100" softcursor="off" +fi insmod hi3521d_hdmi.ko insmod hi3521d_rc.ko @@ -132,7 +136,7 @@ insert_ko() insmod hi_ir.ko insmod extdrv/gpio_com_drv.ko -if [ "`cat /link/config/fac`" == "SH" ]; then +if [ "$fac" == "SH" ]; then insmod extdrv/gs2971a.ko insmod extdrv/8821cu_21.ko insmod extdrv/8852bu_21.ko diff --git a/rootfs/link/bin/Encoder b/rootfs/link/bin/Encoder index 0aaae08..4712b44 100644 Binary files a/rootfs/link/bin/Encoder and b/rootfs/link/bin/Encoder differ diff --git a/rootfs/link/config/config.json b/rootfs/link/config/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/config/config.json +++ b/rootfs/link/config/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/config/default/config.json b/rootfs/link/config/default/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/config/default/config.json +++ b/rootfs/link/config/default/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/config/default/defLays.json b/rootfs/link/config/default/defLays.json new file mode 100644 index 0000000..36e24cb --- /dev/null +++ b/rootfs/link/config/default/defLays.json @@ -0,0 +1,356 @@ +[ + { + "layId": 0, + "layName": "9宫格", + "layNameEn": "grid 3x3", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "key": 73249, + "pos": { + "a": 1, + "x": 0, + "y": 0, + "w": 0.3333, + "h": 0.3333, + "index": 1 + } + }, + { + "id": -2, + "name": "/", + "lock": true, + "key": 53394, + "pos": { + "a": 1, + "x": 0.3333, + "y": 0, + "w": 0.3333, + "h": 0.3333, + "index": 2 + } + }, + { + "id": -3, + "name": "/", + "lock": true, + "key": 28676, + "pos": { + "a": 1, + "x": 0.6667, + "y": 0, + "w": 0.3333, + "h": 0.3333, + "index": 3 + } + }, + { + "id": -4, + "name": "/", + "lock": true, + "key": 69702, + "pos": { + "a": 1, + "x": 0, + "y": 0.3333, + "w": 0.3333, + "h": 0.3333, + "index": 4 + } + }, + { + "id": -5, + "name": "/", + "lock": true, + "key": 9107, + "pos": { + "a": 1, + "x": 0.333, + "y": 0.333, + "w": 0.3333, + "h": 0.3333, + "index": 5 + } + }, + { + "id": -6, + "name": "/", + "lock": true, + "key": 79639, + "pos": { + "a": 1, + "x": 0.6667, + "y": 0.3333, + "w": 0.3333, + "h": 0.3333, + "index": 6 + } + }, + { + "id": -7, + "name": "/", + "lock": true, + "key": 45145, + "pos": { + "a": 1, + "x": 0, + "y": 0.6667, + "w": 0.3333, + "h": 0.3333, + "index": 7 + } + }, + { + "id": -8, + "name": "/", + "lock": true, + "key": 96008, + "pos": { + "a": 1, + "x": 0.3333, + "y": 0.6667, + "w": 0.3333, + "h": 0.3333, + "index": 8 + } + }, + { + "id": -9, + "name": "/", + "lock": true, + "key": 81693, + "pos": { + "a": 1, + "x": 0.6667, + "y": 0.6667, + "w": 0.3333, + "h": 0.3333, + "index": 9 + } + } + ] + }, + { + "layId": 1, + "layName": "4分屏", + "layNameEn": "grid 2x2", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0", + "w": "0.5", + "h": "0.5", + "index": 1 + }, + "enable": false, + "key": 27788 + }, + { + "id": -2, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0.5", + "y": "0", + "w": "0.5", + "h": "0.5", + "index": 2 + }, + "enable": false, + "key": 35441 + }, + { + "id": -3, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0.5", + "w": "0.5", + "h": "0.5", + "index": 3 + }, + "enable": false, + "key": 9422 + }, + { + "id": -4, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0.5", + "y": "0.5", + "w": "0.5", + "h": "0.5", + "index": 4 + }, + "enable": false, + "key": 77627 + } + ] + }, + { + "layId": 2, + "layName": "1+2", + "layNameEn": "1+2", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0.1667", + "w": "0.6667", + "h": "0.6667", + "index": 1 + }, + "enable": false, + "key": 38752 + }, + { + "id": -2, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0.6667", + "y": "0.1667", + "w": "0.3333", + "h": "0.3333", + "index": 2 + }, + "enable": false, + "key": 23016 + }, + { + "id": -3, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0.6667", + "y": "0.5", + "w": "0.3333", + "h": "0.3333", + "index": 3 + }, + "enable": false, + "key": 62826 + } + ] + }, + { + "layId": 3, + "layName": "画中画", + "layNameEn": "PinP", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0", + "w": "1", + "h": "1", + "index": 1 + }, + "enable": false, + "key": 25939 + }, + { + "id": -2, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0.6667", + "y": "0.6667", + "w": "0.25", + "h": "0.25", + "index": 2 + }, + "enable": false, + "key": 70744 + } + ] + }, + { + "layId": 4, + "layName": "单画面", + "layNameEn": "Single", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0", + "w": "1", + "h": "1", + "index": 1 + }, + "enable": false, + "key": 41656 + } + ] + }, + { + "layId": 5, + "layName": "上下", + "layNameEn": "UpDown", + "enable": false, + "layouts": [ + { + "id": -1, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0", + "w": "1", + "h": "0.5", + "index": 1 + }, + "enable": false, + "key": 33095 + }, + { + "id": -2, + "name": "/", + "lock": true, + "pos": { + "a": 1, + "x": "0", + "y": "0.5", + "w": "1", + "h": "0.5", + "index": 2 + }, + "enable": false, + "key": 81595 + } + ] + } +] \ No newline at end of file diff --git a/rootfs/link/config/default/group.json b/rootfs/link/config/default/group.json index 056176f..911beaa 100644 --- a/rootfs/link/config/default/group.json +++ b/rootfs/link/config/default/group.json @@ -1,5 +1,5 @@ { - "type":"ENC1H", + "type":"ENC1V2", "groupId":0, "order":[] } diff --git a/rootfs/link/config/default/intercom.json b/rootfs/link/config/default/intercom.json new file mode 100644 index 0000000..53d4413 --- /dev/null +++ b/rootfs/link/config/default/intercom.json @@ -0,0 +1,27 @@ +{ + "intercom": { + "buf": 8, + "did": 0, + "enable": false, + "gain": 0, + "ip": "127.0.0.1", + "name": "Director", + "hid": "/dev/headphone", + "port": 7000, + "tid": -1, + "vad": 50 + }, + "server": { + "enable": false + }, + "tally": { + "enable": false, + "uart": "/dev/ttyTally" + }, + "vmix": { + "enable": false, + "ip": "192.168.1.56", + "mode": "vmix", + "uart": "/dev/ttyAMA1" + } +} diff --git a/rootfs/link/config/default/misc/colorKey.json b/rootfs/link/config/default/misc/colorKey.json new file mode 100644 index 0000000..e69a6c4 --- /dev/null +++ b/rootfs/link/config/default/misc/colorKey.json @@ -0,0 +1,8 @@ +{ + "enable":false, + "point":[{"x":0,"y":0},{"x":0.1,"y":0.1},{"x":0.3,"y":0.3}], + "autoUpdate":false, + "tolerance":20, + "srcA":0, + "srcB":{"type":"img","path":"/link/res/x1.jpg","id":2} +} diff --git a/rootfs/link/config/default/misc/preset.json b/rootfs/link/config/default/misc/preset.json new file mode 100644 index 0000000..5c2ec3f --- /dev/null +++ b/rootfs/link/config/default/misc/preset.json @@ -0,0 +1,42 @@ +[ + [ + -72000, + 7200, + 100 + ], + [ + -72000, + 68040, + 100 + ], + [ + 0, + 0, + 100 + ], + [ + 0, + 0, + 100 + ], + [ + 0, + 0, + 100 + ], + [ + 0, + 0, + 100 + ], + [ + 0, + 0, + 100 + ], + [ + 0, + 0, + 100 + ] +] diff --git a/rootfs/link/config/default/misc/timezone/tzselect.json b/rootfs/link/config/default/misc/timezone/tzselect.json new file mode 100644 index 0000000..82f57c5 --- /dev/null +++ b/rootfs/link/config/default/misc/timezone/tzselect.json @@ -0,0 +1 @@ +{"timeArea":"Asia","timeCity":"Beijing"} diff --git a/rootfs/link/config/default/ntp.json b/rootfs/link/config/default/ntp.json index 2f5f285..775a8eb 100644 --- a/rootfs/link/config/default/ntp.json +++ b/rootfs/link/config/default/ntp.json @@ -1 +1,4 @@ -{"server":"cn.pool.ntp.org","enable":false} +{ + "enable":false, + "server":"ntp1.aliyun.com" +} diff --git a/rootfs/link/config/default/push.json b/rootfs/link/config/default/push.json index 19dc9e8..9df61d5 100644 --- a/rootfs/link/config/default/push.json +++ b/rootfs/link/config/default/push.json @@ -1,7 +1,7 @@ { "autorun": false, - "srcA": 6, - "srcV": 6, + "srcA": 0, + "srcV": 0, "srcV_chn":"main", "url": [ { diff --git a/rootfs/link/config/default/service.json b/rootfs/link/config/default/service.json new file mode 100644 index 0000000..3530ccb --- /dev/null +++ b/rootfs/link/config/default/service.json @@ -0,0 +1,12 @@ +{ + "telnet":true, + "ssh":true, + "php":true, + "nginx":true, + "crond":true, + "onvif":true, + "ndi":true, + "sls":true, + "frp":false, + "trans":false +} diff --git a/rootfs/link/config/default/theme.json b/rootfs/link/config/default/theme.json new file mode 100644 index 0000000..e2d662f --- /dev/null +++ b/rootfs/link/config/default/theme.json @@ -0,0 +1,8 @@ +{ + "used": "default", + "themes": [ + "default", + "salmon", + "skyBlue" + ] +} diff --git a/rootfs/link/config/default/uart.json b/rootfs/link/config/default/uart.json new file mode 100644 index 0000000..66b1797 --- /dev/null +++ b/rootfs/link/config/default/uart.json @@ -0,0 +1,6 @@ +{ + "baudRate": 115200, + "device": "/dev/ttyAMA1", + "ip": "192.168.1.1", + "port": "3000" +} diff --git a/rootfs/link/config/group.json b/rootfs/link/config/group.json index 056176f..911beaa 100644 --- a/rootfs/link/config/group.json +++ b/rootfs/link/config/group.json @@ -1,5 +1,5 @@ { - "type":"ENC1H", + "type":"ENC1V2", "groupId":0, "order":[] } diff --git a/rootfs/link/config/hardware.json b/rootfs/link/config/hardware.json new file mode 100644 index 0000000..fdcff27 --- /dev/null +++ b/rootfs/link/config/hardware.json @@ -0,0 +1,55 @@ +{ + "fac":"V2", + "model":"ENC1V2", + "chip":"HI3520DV400", + "interfaceV":[ + {"name":"HDMI","type":"HDMI"} + ], + "capability":{ + "decode":{ + "channels":2 + }, + "encode":{ + "maxSize":"1080P", + "maxPixel":165888000, + "BFrame":false + }, + "maxInput":"1080P60", + "maxOutput":"1080P60", + "extraVo":"VGA", + "eth1":false + }, + "function":{ + "record":true, + "carousel":true, + "overlay":true, + "dhcp":true, + "wifi":true, + "videoOut":true, + "line":true, + "mix":true, + "portCtrl":true, + "ndi":true, + "srt":true, + "hls":true, + "serialport":true, + "button":false, + "intercom":true, + "remote":true, + "rtspAuth":true, + "netPic":true + }, + "other":{ + "help":"120.78.2.184" + }, + "gpio":{ + "type":"himm", + "name":"gpio11_5", + "mux":"himm 0x120F0104 0x0", + "dir":"himm 0x12200400 0x0", + "addr":"0x12200080" + }, + "usb":{ + "lnk":"1-1" + } +} diff --git a/rootfs/link/config/misc/colorKey.json b/rootfs/link/config/misc/colorKey.json new file mode 100644 index 0000000..e69a6c4 --- /dev/null +++ b/rootfs/link/config/misc/colorKey.json @@ -0,0 +1,8 @@ +{ + "enable":false, + "point":[{"x":0,"y":0},{"x":0.1,"y":0.1},{"x":0.3,"y":0.3}], + "autoUpdate":false, + "tolerance":20, + "srcA":0, + "srcB":{"type":"img","path":"/link/res/x1.jpg","id":2} +} diff --git a/rootfs/link/config/misc/overlayDemo.json b/rootfs/link/config/misc/overlayDemo.json new file mode 100644 index 0000000..0493b3a --- /dev/null +++ b/rootfs/link/config/misc/overlayDemo.json @@ -0,0 +1,68 @@ +[ + { + "alpha": "0.9", + "color": "#000000", + "content": "/link/res/banner.png", + "enable": false, + "font": "/link/res/font.ttf", + "h": 0, + "scale": 1, + "type": "pic", + "w": 0, + "x": "0.081", + "y": "0.688" + }, + { + "alpha": 1, + "color": "#000000", + "content": "This is an example of scrolling subtitles.", + "enable": false, + "font": "/link/res/font.ttf", + "h": 0, + "move": "-2", + "scale": "1.79", + "type": "text", + "w": "0.599", + "x": "0.195", + "y": "0.749" + }, + { + "alpha": "1", + "color": "#909090", + "content": "hh:mm:ss", + "enable": false, + "font": "/link/res/font.ttf", + "h": 0, + "scale": "1.46", + "type": "time", + "w": 0, + "x": "0.827", + "y": "0.806" + }, + { + "alpha": 1, + "color": "#ffffff", + "content": "THIS IS A TITLE", + "enable": false, + "font": "/link/res/font.ttf", + "h": 0, + "scale": "1", + "type": "text", + "w": 0, + "x": "0.431", + "y": "0.706" + }, + { + "alpha": 1, + "color": "#000000", + "content": "/link/res/logo.png", + "enable": false, + "font": "/link/res/font.ttf", + "h": 0, + "scale": 1, + "type": "pic", + "w": 0, + "x": "0.049", + "y": "0.049" + } +] diff --git a/rootfs/link/config/ndi.json b/rootfs/link/config/ndi.json index d6ac4df..130c75f 100644 --- a/rootfs/link/config/ndi.json +++ b/rootfs/link/config/ndi.json @@ -34,10 +34,10 @@ }, "rudp": { "send": { - "enable": true + "enable": false }, "recv": { - "enable": true + "enable": false } }, "vendor": { diff --git a/rootfs/link/config/ntp.json b/rootfs/link/config/ntp.json index 2f5f285..775a8eb 100644 --- a/rootfs/link/config/ntp.json +++ b/rootfs/link/config/ntp.json @@ -1 +1,4 @@ -{"server":"cn.pool.ntp.org","enable":false} +{ + "enable":false, + "server":"ntp1.aliyun.com" +} diff --git a/rootfs/link/config/push.json b/rootfs/link/config/push.json index 19dc9e8..9df61d5 100644 --- a/rootfs/link/config/push.json +++ b/rootfs/link/config/push.json @@ -1,7 +1,7 @@ { "autorun": false, - "srcA": 6, - "srcV": 6, + "srcA": 0, + "srcV": 0, "srcV_chn":"main", "url": [ { diff --git a/rootfs/link/config/service.json b/rootfs/link/config/service.json new file mode 100644 index 0000000..3530ccb --- /dev/null +++ b/rootfs/link/config/service.json @@ -0,0 +1,12 @@ +{ + "telnet":true, + "ssh":true, + "php":true, + "nginx":true, + "crond":true, + "onvif":true, + "ndi":true, + "sls":true, + "frp":false, + "trans":false +} diff --git a/rootfs/link/config/verLogs.json b/rootfs/link/config/verLogs.json index 5374103..c5e215a 100644 --- a/rootfs/link/config/verLogs.json +++ b/rootfs/link/config/verLogs.json @@ -1,4 +1,19 @@ [ + { + "version": "2.1.0 build 20230426", + "logs": [ + "修正了B帧解码的缓冲控制", + "减少了MP3编码的cpu占用", + "支持insta360Link最新固件", + "修正个别情况下网络流叠加特效的异常", + "修正解码插图在缩放、旋转等情况下的显示异常", + "修正某些机型的网路流旋转异常", + "解决srt对于ipv6域名解析的问题", + "更换升级包/资源上传组件", + "视频轮播支持解码、重编码(即U盘播放、推流)", + "实验室新增抠像功能,即绿幕抠图" + ] + }, { "version": "2.0.0 build 20230322", "logs": [ diff --git a/rootfs/link/config/version.json b/rootfs/link/config/version.json index 22973b6..3241538 100644 --- a/rootfs/link/config/version.json +++ b/rootfs/link/config/version.json @@ -1,5 +1,5 @@ { "app": "2.0.0 build 20220512_869", "sdk": "2.0.0 build 20220518_20716", - "sys": "2.0.0 build 20230322" + "sys": "2.1.0 build 20230426" } diff --git a/rootfs/link/fac/EX2/config/config.json b/rootfs/link/fac/EX2/config/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/fac/EX2/config/config.json +++ b/rootfs/link/fac/EX2/config/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/EX2/config/default/config.json b/rootfs/link/fac/EX2/config/default/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/fac/EX2/config/default/config.json +++ b/rootfs/link/fac/EX2/config/default/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/EX2/config/default/group.json b/rootfs/link/fac/EX2/config/default/group.json new file mode 100644 index 0000000..6092abc --- /dev/null +++ b/rootfs/link/fac/EX2/config/default/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENC1", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/EX2/config/group.json b/rootfs/link/fac/EX2/config/group.json new file mode 100644 index 0000000..6092abc --- /dev/null +++ b/rootfs/link/fac/EX2/config/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENC1", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/EX2/config/hardware.json b/rootfs/link/fac/EX2/config/hardware.json new file mode 100644 index 0000000..844ad1a --- /dev/null +++ b/rootfs/link/fac/EX2/config/hardware.json @@ -0,0 +1,55 @@ +{ + "fac":"EX2", + "model":"ENC1", + "chip":"HI3520DV400", + "interfaceV":[ + {"name":"HDMI","type":"HDMI"} + ], + "capability":{ + "decode":{ + "channels":2 + }, + "encode":{ + "maxSize":"1080P", + "maxPixel":165888000, + "BFrame":false + }, + "maxInput":"1080P60", + "maxOutput":"1080P60", + "extraVo":"VGA", + "eth1":false + }, + "function":{ + "record":true, + "carousel":true, + "overlay":true, + "dhcp":true, + "wifi":true, + "videoOut":true, + "line":true, + "mix":true, + "portCtrl":true, + "ndi":true, + "srt":true, + "hls":true, + "serialport":true, + "button":true, + "intercom":true, + "remote":false, + "rtspAuth":true, + "netPic":true + }, + "other":{ + "help":"120.78.2.184" + }, + "gpio":{ + "type":"himm", + "name":"gpio11_5", + "mux":"himm 0x120F0104 0x0", + "dir":"himm 0x12200400 0x0", + "addr":"0x12200080" + }, + "usb":{ + "lnk":"1-1" + } +} diff --git a/rootfs/link/fac/SH/config/config.json b/rootfs/link/fac/SH/config/config.json index 0443880..aecf3c3 100644 --- a/rootfs/link/fac/SH/config/config.json +++ b/rootfs/link/fac/SH/config/config.json @@ -4,107 +4,13 @@ "name": "SDI", "type": "vi", "enable": true, - "enable2": true, - "interface": "SDI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "sdi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,159 +134,31 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "SDI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -386,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -398,7 +186,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -409,15 +197,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -433,21 +225,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -463,7 +260,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -484,52 +282,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 2, @@ -537,102 +301,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa":"hw:1,0", - "lnk": "1-2", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -648,7 +322,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -660,26 +334,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -688,28 +366,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -718,14 +401,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -744,9 +428,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-2", + "channels": -1 }, { "id": 3, @@ -754,103 +440,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -866,7 +461,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -878,7 +473,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -889,15 +484,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -906,28 +505,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -936,14 +540,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -962,9 +567,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -972,103 +585,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1084,7 +606,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -1096,7 +618,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 4, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1107,15 +629,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1124,28 +650,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1154,14 +685,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1180,9 +712,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 5, @@ -1190,103 +730,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1302,11 +751,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1314,7 +763,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 5, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1325,15 +774,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1342,28 +795,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1372,14 +830,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1398,9 +857,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 6, @@ -1408,103 +875,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1520,11 +896,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1532,7 +908,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 6, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1543,15 +919,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1560,28 +940,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1590,14 +975,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1616,9 +1002,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 7, @@ -1626,22 +1020,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9008, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1657,21 +1052,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main7" - } + }, + "suffix": "stream7" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9108, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1687,7 +1087,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub7" - } + }, + "suffix": "sub7" }, "hls": { "hls_time": 5, @@ -1708,7 +1109,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 8, @@ -1716,20 +1119,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 8, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9009, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1738,28 +1184,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main8" - } + }, + "suffix": "stream8" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9109, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1768,14 +1219,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub8" - } + }, + "suffix": "sub8" }, "hls": { "hls_time": 5, @@ -1794,108 +1246,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 9, - "name": "Mix", - "type": "mix", - "enable": true, - "enable2": true, + "name": "ColorKey", + "type": "colorKey", + "enable": false, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1907,11 +1279,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1919,46 +1291,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 9, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 9, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9010, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1967,28 +1323,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main9" - } + }, + "suffix": "stream9" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9110, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1997,14 +1358,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub9" - } + }, + "suffix": "sub9" }, "hls": { "hls_time": 5, @@ -2023,18 +1385,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 10, + "name": "Mix", + "type": "mix", + "enable": true, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 10, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9011, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main10" + }, + "suffix": "stream10" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9111, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub10" + }, + "suffix": "sub10" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream10", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 10, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0", - "1" + 0 ], "layout": [ { @@ -2071,4 +1629,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/SH/config/default/config.json b/rootfs/link/fac/SH/config/default/config.json index 0443880..aecf3c3 100644 --- a/rootfs/link/fac/SH/config/default/config.json +++ b/rootfs/link/fac/SH/config/default/config.json @@ -4,107 +4,13 @@ "name": "SDI", "type": "vi", "enable": true, - "enable2": true, - "interface": "SDI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "sdi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,159 +134,31 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "SDI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -386,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -398,7 +186,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -409,15 +197,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -433,21 +225,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -463,7 +260,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -484,52 +282,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 2, @@ -537,102 +301,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa":"hw:1,0", - "lnk": "1-2", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -648,7 +322,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -660,26 +334,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -688,28 +366,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -718,14 +401,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -744,9 +428,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-2", + "channels": -1 }, { "id": 3, @@ -754,103 +440,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -866,7 +461,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -878,7 +473,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -889,15 +484,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -906,28 +505,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -936,14 +540,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -962,9 +567,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -972,103 +585,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1084,7 +606,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -1096,7 +618,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 4, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1107,15 +629,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1124,28 +650,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1154,14 +685,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1180,9 +712,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 5, @@ -1190,103 +730,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1302,11 +751,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1314,7 +763,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 5, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1325,15 +774,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1342,28 +795,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1372,14 +830,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1398,9 +857,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 6, @@ -1408,103 +875,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -1520,11 +896,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1532,7 +908,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 6, "gain": 0, "codec": "close", "samplerate": 48000, @@ -1543,15 +919,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1560,28 +940,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1590,14 +975,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1616,9 +1002,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 7, @@ -1626,22 +1020,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9008, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1657,21 +1052,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main7" - } + }, + "suffix": "stream7" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9108, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1687,7 +1087,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub7" - } + }, + "suffix": "sub7" }, "hls": { "hls_time": 5, @@ -1708,7 +1109,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 8, @@ -1716,20 +1119,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 8, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9009, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1738,28 +1184,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main8" - } + }, + "suffix": "stream8" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9109, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1768,14 +1219,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub8" - } + }, + "suffix": "sub8" }, "hls": { "hls_time": 5, @@ -1794,108 +1246,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 9, - "name": "Mix", - "type": "mix", - "enable": true, - "enable2": true, + "name": "ColorKey", + "type": "colorKey", + "enable": false, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1907,11 +1279,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1919,46 +1291,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 9, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 9, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9010, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1967,28 +1323,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main9" - } + }, + "suffix": "stream9" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9110, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1997,14 +1358,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub9" - } + }, + "suffix": "sub9" }, "hls": { "hls_time": 5, @@ -2023,18 +1385,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 10, + "name": "Mix", + "type": "mix", + "enable": true, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 10, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9011, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main10" + }, + "suffix": "stream10" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9111, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub10" + }, + "suffix": "sub10" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream10", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 10, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0", - "1" + 0 ], "layout": [ { @@ -2071,4 +1629,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/SH/config/default/group.json b/rootfs/link/fac/SH/config/default/group.json new file mode 100644 index 0000000..37eab9c --- /dev/null +++ b/rootfs/link/fac/SH/config/default/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENCSH", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/SH/config/group.json b/rootfs/link/fac/SH/config/group.json new file mode 100644 index 0000000..37eab9c --- /dev/null +++ b/rootfs/link/fac/SH/config/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENCSH", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/SH/config/hardware.json b/rootfs/link/fac/SH/config/hardware.json new file mode 100644 index 0000000..6a958f9 --- /dev/null +++ b/rootfs/link/fac/SH/config/hardware.json @@ -0,0 +1,56 @@ +{ + "fac":"SH", + "model":"ENCSH", + "chip":"HI3521DV100", + "interfaceV":[ + {"name":"SDI","type":"SDI"}, + {"name":"HDMI","type":"HDMI"} + ], + "capability":{ + "decode":{ + "channels":4 + }, + "encode":{ + "maxSize":"4K", + "maxPixel":373248000, + "BFrame":false + }, + "maxInput":"4K30", + "maxOutput":"4K30", + "extraVo":"VGA", + "eth1":false + }, + "function":{ + "record":true, + "carousel":true, + "overlay":true, + "dhcp":true, + "wifi":true, + "videoOut":true, + "line":true, + "mix":true, + "portCtrl":true, + "ndi":true, + "srt":true, + "hls":true, + "serialport":true, + "button":false, + "intercom":true, + "remote":false, + "rtspAuth":true, + "netPic":true + }, + "other":{ + "help":"120.78.2.184" + }, + "gpio":{ + "type":"himm", + "name":"gpio0_6", + "mux":"himm", + "dir":"himm 0x12150400 0x89", + "addr":"0x12150100" + }, + "usb":{ + "lnk":"1-2" + } +} diff --git a/rootfs/link/fac/SH/config/videoBuffer.json b/rootfs/link/fac/SH/config/videoBuffer.json index 3810091..2c13deb 100644 --- a/rootfs/link/fac/SH/config/videoBuffer.json +++ b/rootfs/link/fac/SH/config/videoBuffer.json @@ -3,21 +3,21 @@ "default":{ "sys":[ {"size":12441600,"cnt":8}, - {"size":3110400,"cnt":55}, + {"size":3133440,"cnt":55}, {"size":345600,"cnt":30} ] }, "4K_DEC":{ "sys":[ {"size":12441600,"cnt":8}, - {"size":3110400,"cnt":55}, + {"size":3133440,"cnt":55}, {"size":345600,"cnt":30} ] }, "4K_ENC":{ "sys":[ {"size":12441600,"cnt":20}, - {"size":3110400,"cnt":40}, + {"size":3133440,"cnt":40}, {"size":345600,"cnt":20} ] } diff --git a/rootfs/link/fac/V2/config/config.json b/rootfs/link/fac/V2/config/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/fac/V2/config/config.json +++ b/rootfs/link/fac/V2/config/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/V2/config/default/config.json b/rootfs/link/fac/V2/config/default/config.json index c4332b6..c84331a 100644 --- a/rootfs/link/fac/V2/config/default/config.json +++ b/rootfs/link/fac/V2/config/default/config.json @@ -4,107 +4,13 @@ "name": "HDMI", "type": "vi", "enable": true, - "enable2": true, - "interface": "HDMI", - "cap": { - "deinterlace": false, - "rotate": 0, - "crop": { - "L": 0, - "R": 0, - "T": 0, - "B": 0 - }, - "ntsc": false - }, + "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "h264", @@ -120,7 +26,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "h264", @@ -132,7 +38,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 0, "gain": 0, "codec": "aac", "samplerate": 48000, @@ -143,15 +49,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9001, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -167,21 +77,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main0" - } + }, + "suffix": "stream0" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9101, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -197,7 +112,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub0" - } + }, + "suffix": "sub0" }, "hls": { "hls_time": 5, @@ -218,52 +134,18 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [ - { - "type": "text", - "enable": false, - "font": "/link/res/font.ttf", - "content": "Overlay Text", - "x": 0.1, - "y": 0.136, - "scale": 2.2, - "color": "#669900", - "alpha": 1, - "move": -1, - "w": 0.515 - }, - { - "type": "pic", - "enable": false, - "content": "/link/res/logo.png", - "x": 0.1, - "y": 0.1, - "scale": 1, - "alpha": 1 - }, - { - "type": "mask", - "enable": false, - "content": "16", - "x": 0.4, - "y": 0.4, - "w": 0.2, - "h": 0.2 - }, - { - "type": "time", - "x": "0.581", - "y": "0.077", - "h": 0, - "w": 0, - "scale": "3.02", - "content": "yyyy-MM-dd hh:mm:ss", - "enable": false, - "color": "#ffffff", - "alpha": 1, - "font": "/link/res/font.ttf" + "interface": "HDMI", + "cap": { + "deinterlace": false, + "rotate": 0, + "ntsc": false, + "crop": { + "L": 0, + "T": 0, + "R": 0, + "B": 0 } - ] + } }, { "id": 1, @@ -271,102 +153,12 @@ "type": "usb", "enable": false, "enable2": false, - "alsa": "hw:0,0", - "lnk": "1-1", - "channels":-1, - "alarm": { - "enable": false, - "thresh": 800, - "cache": 20 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -382,7 +174,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -394,26 +186,30 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 1, "gain": 0, "codec": "close", "samplerate": 48000, - "bitrate": 32, + "bitrate": 128, "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9002, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -422,28 +218,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main1" - } + }, + "suffix": "stream1" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9102, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -452,14 +253,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3005 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub1" - } + }, + "suffix": "sub1" }, "hls": { "hls_time": 5, @@ -478,9 +280,11 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 110 + "mpegts_start_pid": 100 }, - "overlay": [] + "alsa": "hw:0,0", + "lnk": "1-1", + "channels": -1 }, { "id": 2, @@ -488,103 +292,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -600,7 +313,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -612,7 +325,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 2, "gain": 0, "codec": "close", "samplerate": 48000, @@ -623,15 +336,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9003, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -640,28 +357,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main2" - } + }, + "suffix": "stream2" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9103, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -670,14 +392,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3001 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub2" - } + }, + "suffix": "sub2" }, "hls": { "hls_time": 5, @@ -696,9 +419,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 112 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 3, @@ -706,103 +437,12 @@ "type": "net", "enable": false, "enable2": false, - "net": { - "bufferMode": 0, - "protocol": "tcp", - "framerate": -1, - "path": "rtsp://admin:admin@192.168.1.23/cam/realmonitor?channel=1&subtype=0", - "decodeV": false, - "decodeA": false, - "minDelay": 500 - }, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, "codec": "close", @@ -818,7 +458,7 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, "codec": "close", @@ -830,7 +470,7 @@ "Pqp": 25 }, "enca": { - "audioSrc": "hdmi", + "audioSrc": 3, "gain": 0, "codec": "close", "samplerate": 48000, @@ -841,15 +481,19 @@ "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9004, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -858,28 +502,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main3" - } + }, + "suffix": "stream3" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9104, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -888,14 +537,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3002 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub3" - } + }, + "suffix": "sub3" }, "hls": { "hls_time": 5, @@ -914,9 +564,17 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "net": { + "bufferMode": 1, + "protocol": "tcp", + "framerate": -1, + "path": "rtsp://admin:admin@192.168.1.64", + "decodeV": false, + "decode": false, + "minDelay": 500 + } }, { "id": 4, @@ -924,22 +582,23 @@ "type": "ndi", "enable": false, "enable2": false, - "ndirecv": { - "name": "" - }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9005, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -955,21 +614,26 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main4" - } + }, + "suffix": "stream4" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9105, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -985,7 +649,8 @@ "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub4" - } + }, + "suffix": "sub4" }, "hls": { "hls_time": 5, @@ -1006,7 +671,9 @@ "mpegts_pmt_start_pid": 4096, "mpegts_start_pid": 100 }, - "overlay": [] + "ndirecv": { + "name": "" + } }, { "id": 5, @@ -1014,20 +681,63 @@ "type": "file", "enable": false, "enable2": false, - "file": [], + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "close", + "profile": "base", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 5, + "gain": 0, + "codec": "close", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9006, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1036,28 +746,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main5" - } + }, + "suffix": "stream5" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9106, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1066,14 +781,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3003 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub5" - } + }, + "suffix": "sub5" }, "hls": { "hls_time": 5, @@ -1092,108 +808,28 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 114 + "mpegts_start_pid": 100 }, - "overlay": [] + "decodeV": false, + "decodeA": false, + "file": [] }, { "id": 6, - "name": "Mix", - "type": "mix", + "name": "ColorKey", + "type": "colorKey", "enable": false, "enable2": false, "encv": { - "roi": [ - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - }, - { - "enable": false, - "abs": false, - "qp": -15, - "framerate": -1, - "x": 0.3, - "y": 0.3, - "w": 0.3, - "h": 0.3 - } - ], "width": 1920, "height": 1080, "framerate": 30, "bitrate": 4000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 2, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1205,11 +841,11 @@ "height": 360, "framerate": 30, "bitrate": 1000, - "rcmode": "avbr", + "rcmode": "cbr", "lowLatency": false, "gop": 1, - "codec": "h264", - "profile": "high", + "codec": "close", + "profile": "base", "gopmode": 0, "minqp": 22, "maxqp": 36, @@ -1217,46 +853,30 @@ "Pqp": 25 }, "enca": { - "codec": "aac", + "audioSrc": 6, + "gain": 0, + "codec": "close", "samplerate": 48000, "bitrate": 128, - "channels": 2, - "audioSrc": "hdmi", - "gain": 0 - }, - "output": { - "enable": true, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "hdmi", - "rotate": 0, - "vid": 0 - }, - "output2": { - "enable": false, - "src": 0, - "ui": false, - "lowLatency": false, - "output": "1080P60", - "type": "vga", - "rotate": 0, - "vid": 1 + "channels": 2 }, "stream": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9007, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1265,28 +885,33 @@ "bandwidth": 100, "enable": false, "ip": "233.233.2.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_main6" - } + }, + "suffix": "stream6" }, "stream2": { "http": false, "hls": false, "rtmp": false, - "rtsp": true, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, "srt": { "enable": false, "mode": "listener", "ip": "127.0.0.1", "port": 9107, "latency": 50, - "passwd": "", - "streamid": "" + "passwd": "" }, "udp": { "rtp": false, @@ -1295,14 +920,15 @@ "bandwidth": 100, "enable": false, "ip": "233.233.3.1", - "port": 3004 + "port": 3000 }, "push": { "format": "auto", "enable": false, "hevc_id": 12, "path": "rtmp://127.0.0.1/live/test_sub6" - } + }, + "suffix": "sub6" }, "hls": { "hls_time": 5, @@ -1321,17 +947,214 @@ "mpegts_original_network_id": 1, "mpegts_transport_stream_id": 1, "mpegts_pmt_start_pid": 4096, - "mpegts_start_pid": 134 + "mpegts_start_pid": 100 + }, + "colorKey": { + "point": [ + { + "x": 0.2, + "y": 0.2 + }, + { + "x": 0.8, + "y": 0.2 + }, + { + "x": 0.2, + "y": 0.8 + }, + { + "x": 0.8, + "y": 0.8 + } + ], + "autoUpdate": false, + "tolerance": 20, + "srcA": 0, + "srcB": { + "type": "img", + "path": "/link/res/background.jpg", + "id": 2 + } + } + }, + { + "id": 7, + "name": "Mix", + "type": "mix", + "enable": false, + "enable2": false, + "encv": { + "width": 1920, + "height": 1080, + "framerate": 30, + "bitrate": 4000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 2, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "encv2": { + "width": 640, + "height": 360, + "framerate": 30, + "bitrate": 1000, + "rcmode": "cbr", + "lowLatency": false, + "gop": 1, + "codec": "h264", + "profile": "high", + "gopmode": 0, + "minqp": 22, + "maxqp": 36, + "Iqp": 25, + "Pqp": 25 + }, + "enca": { + "audioSrc": 7, + "gain": 0, + "codec": "aac", + "samplerate": 48000, + "bitrate": 128, + "channels": 2 + }, + "stream": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9008, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.2.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_main7" + }, + "suffix": "stream7" + }, + "stream2": { + "http": false, + "hls": false, + "rtmp": false, + "rtsp": { + "enable": true, + "name": "admin", + "passwd": "admin", + "auth": false + }, + "srt": { + "enable": false, + "mode": "listener", + "ip": "127.0.0.1", + "port": 9108, + "latency": 50, + "passwd": "" + }, + "udp": { + "rtp": false, + "ttl": 5, + "flowCtrl": true, + "bandwidth": 100, + "enable": false, + "ip": "233.233.3.1", + "port": 3000 + }, + "push": { + "format": "auto", + "enable": false, + "hevc_id": 12, + "path": "rtmp://127.0.0.1/live/test_sub7" + }, + "suffix": "sub7" + }, + "hls": { + "hls_time": 5, + "hls_list_size": 5, + "hls_base_url": "/hls/", + "hls_filename": "-%06d.ts" + }, + "ndi": { + "name": "stream7", + "group": "", + "enable": false + }, + "ts": { + "tsSize": 1316, + "mpegts_service_id": 1, + "mpegts_original_network_id": 1, + "mpegts_transport_stream_id": 1, + "mpegts_pmt_start_pid": 4096, + "mpegts_start_pid": 100 + }, + "output": { + "enable": true, + "vid": 0, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "hdmi", + "rotate": 0, + "src": 0, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } + }, + "output2": { + "enable": false, + "vid": 1, + "ui": false, + "lowLatency": false, + "output": "1080P60", + "type": "vga", + "rotate": 0, + "src": 7, + "csc": { + "matrix": "identity", + "contrast": "50", + "hue": "50", + "luma": "50", + "saturation": "50" + } }, - "overlay": [], "srcV": [ - "0", - "-1", - "-1", - "-1" + 0, + 1, + 2, + 3 ], "srcA": [ - "0" + 0 ], "layout": [ { @@ -1368,4 +1191,4 @@ } ] } -] +] \ No newline at end of file diff --git a/rootfs/link/fac/V2/config/default/group.json b/rootfs/link/fac/V2/config/default/group.json new file mode 100644 index 0000000..911beaa --- /dev/null +++ b/rootfs/link/fac/V2/config/default/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENC1V2", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/V2/config/group.json b/rootfs/link/fac/V2/config/group.json new file mode 100644 index 0000000..911beaa --- /dev/null +++ b/rootfs/link/fac/V2/config/group.json @@ -0,0 +1,5 @@ +{ + "type":"ENC1V2", + "groupId":0, + "order":[] +} diff --git a/rootfs/link/fac/V2/config/hardware.json b/rootfs/link/fac/V2/config/hardware.json new file mode 100644 index 0000000..fdcff27 --- /dev/null +++ b/rootfs/link/fac/V2/config/hardware.json @@ -0,0 +1,55 @@ +{ + "fac":"V2", + "model":"ENC1V2", + "chip":"HI3520DV400", + "interfaceV":[ + {"name":"HDMI","type":"HDMI"} + ], + "capability":{ + "decode":{ + "channels":2 + }, + "encode":{ + "maxSize":"1080P", + "maxPixel":165888000, + "BFrame":false + }, + "maxInput":"1080P60", + "maxOutput":"1080P60", + "extraVo":"VGA", + "eth1":false + }, + "function":{ + "record":true, + "carousel":true, + "overlay":true, + "dhcp":true, + "wifi":true, + "videoOut":true, + "line":true, + "mix":true, + "portCtrl":true, + "ndi":true, + "srt":true, + "hls":true, + "serialport":true, + "button":false, + "intercom":true, + "remote":true, + "rtspAuth":true, + "netPic":true + }, + "other":{ + "help":"120.78.2.184" + }, + "gpio":{ + "type":"himm", + "name":"gpio11_5", + "mux":"himm 0x120F0104 0x0", + "dir":"himm 0x12200400 0x0", + "addr":"0x12200080" + }, + "usb":{ + "lnk":"1-1" + } +} diff --git a/rootfs/link/res/background.jpg b/rootfs/link/res/background.jpg new file mode 100644 index 0000000..13318c9 Binary files /dev/null and b/rootfs/link/res/background.jpg differ diff --git a/rootfs/link/res/banner.png b/rootfs/link/res/banner.png new file mode 100644 index 0000000..4c87b0b Binary files /dev/null and b/rootfs/link/res/banner.png differ diff --git a/rootfs/link/shell/app.sh b/rootfs/link/shell/app.sh new file mode 100644 index 0000000..981d6bd --- /dev/null +++ b/rootfs/link/shell/app.sh @@ -0,0 +1,11 @@ +/link/shell/enc.sh & +/link/shell/gpio.sh & + +if [ -f /link/bin/PortCtrl ] ;then +/link/bin/PortCtrl & +fi + +if [ -f /link/shell/ptz.sh ] ;then +/link/shell/ptz.sh & +fi + diff --git a/rootfs/link/shell/dhcp.sh b/rootfs/link/shell/dhcp.sh index d52cd40..2a21cbd 100644 --- a/rootfs/link/shell/dhcp.sh +++ b/rootfs/link/shell/dhcp.sh @@ -21,4 +21,6 @@ if [ "$interface" = "eth0" ]; then echo '{"dhcp":true,"ip":"'$ip'","mask":"'$subnet'","gateway":"'$router'","dns":"'$dns'"}' > /link/config/net.json echo $ip > /etc/hostname hostname -F /etc/hostname +else +echo '{"dhcp":true,"ip":"'$ip'","mask":"'$subnet'","gateway":"'$router'","dns":"'$dns'"}' > /link/config/net2.json fi diff --git a/rootfs/link/shell/fusb.sh b/rootfs/link/shell/fusb.sh index 4ec952e..b8d7747 100644 --- a/rootfs/link/shell/fusb.sh +++ b/rootfs/link/shell/fusb.sh @@ -14,11 +14,6 @@ umount_usb(){ done } -umount_usb -echo -e "d\n1\nd\n2\nd\n3\nd\n4\n\nw" | fdisk /dev/sda -sleep 1 -echo -e "n\np\n1\n1\n\nw" | fdisk /dev/sda -sleep 1 umount_usb if [ $1 == "ext4" ];then echo -e "\ny" | mkfs.ext4 -T largefile /dev/sda1 diff --git a/rootfs/link/shell/gpio.sh b/rootfs/link/shell/gpio.sh new file mode 100644 index 0000000..b238c0a --- /dev/null +++ b/rootfs/link/shell/gpio.sh @@ -0,0 +1,63 @@ +. /link/shell/util/hardware.sh +count=0 +type=`jget gpio.type` +himmGPIO() +{ + gpioName=`jget gpio.name` + gpioAddr=`jget gpio.addr` + eval "`jget gpio.mux` > /dev/null" + eval "`jget gpio.dir` > /dev/null" + + echo "Init $gpioName($gpioAddr) done." + + while [ true ] + do + ret=`himd.l $gpioAddr 1 | awk 'NR==4{print $2}'` + if [ "$ret" == "00000000" ]; then + count=$(($count+1)) + echo "keyDown $count" + if [ "$count" == "5" ]; then + echo "reset default config" + /link/shell/reset.sh + fi + else + count=0 + fi + sleep 1 + done +} + +sysfsGPIO() +{ + gpioName=`jget gpio.name` + gpioIndex=`jget gpio.index` + eval "`jget gpio.mux` > /dev/null" + if [ ! -d "/sys/class/gpio/gpio$gpioIndex" ];then + echo $gpioIndex > /sys/class/gpio/export + fi + echo "in" > /sys/class/gpio/gpio$gpioIndex/direction + + echo "Init $gpioName($gpioIndex) done." + + while [ true ] + do + ret=`cat /sys/class/gpio/gpio$gpioIndex/value` + if [ "$ret" == "0" ]; then + count=$(($count+1)) + echo "keyDown $count" + if [ "$count" == "5" ]; then + echo "reset default config" + /link/shell/reset.sh + fi + else + count=0 + fi + sleep 1 + done +} + +if [ "$type" == "himm" ]; then + himmGPIO +elif [ "$type" == "sysfs" ]; then + sysfsGPIO +fi diff --git a/rootfs/link/shell/init.sh b/rootfs/link/shell/init.sh index d47bb16..beb03d4 100644 --- a/rootfs/link/shell/init.sh +++ b/rootfs/link/shell/init.sh @@ -1,39 +1,23 @@ . /etc/profile -/link/bin/rtc -g time +. /link/shell/util/func.sh +. /link/shell/util/hardware.sh /link/shell/update.sh -mkdir /tmp/snap -mkdir /tmp/hls -mkdir /tmp/log -mkdir /root/usb - ifconfig lo 127.0.0.1 -/usr/php/sbin/php-fpm -R -p /usr/php -c /usr/php/etc/php.ini -/usr/nginx/sbin/nginx -p /usr/nginx +/sbin/sysctl -p /etc/sysctl.conf +/link/shell/init/filesystem.sh +/link/shell/init/chip.sh -ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` -if [ -z "$ip" ]; then -/link/shell/setMac.sh -sleep 1 -/link/shell/mountUsb.sh -/link/shell/setNetwork.sh -/link/shell/cron.sh & -/link/shell/ndi.sh & -sls_enable=$(cat /link/config/sls_enable |awk '{printf "%s",$1}') -if [ "$sls_enable" == "true" ]; then -/link/bin/sls -c /link/config/sls.conf & -fi -sleep 2 -/link/shell/enc.sh & -/link/shell/onvif.sh -/link/bin/Gpio & -/link/shell/oled.sh & -/link/shell/ptz.sh & -sleep 2 -/link/bin/PortCtrl & -/link/bin/WifiCtrl & +if nfsBoot ;then +/link/shell/init/service.sh +else +/link/shell/netManager.sh +/link/shell/init/service.sh +/link/shell/app.sh fi -#mount -t nfs -o nolock 192.168.1.28:/home/zc/nfs /root/nfs + + + diff --git a/rootfs/link/shell/init/chip.sh b/rootfs/link/shell/init/chip.sh new file mode 100644 index 0000000..7740c25 --- /dev/null +++ b/rootfs/link/shell/init/chip.sh @@ -0,0 +1,28 @@ +cd /ko +./load3521d -i + +#UART3 +#himm 0x120F0100 1 +#himm 0x120F0100 1 + +#UART1 +himm 0x120F00F8 1 +himm 0x120F00FC 1 + +#I2S +himm 0x120F00A0 1 +himm 0x120F00A4 1 +himm 0x120F00A8 1 +himm 0x120F00AC 1 +himm 0x120F00B0 1 +himm 0x120F00B4 1 +himm 0x120F00B8 1 +himm 0x120F00BC 1 + +#QOS +himm 0x12120084 0x66663666 + +#i2c +himm 0x120F00E0 1 +himm 0x120F00E4 1 + diff --git a/rootfs/link/shell/init/filesystem.sh b/rootfs/link/shell/init/filesystem.sh new file mode 100644 index 0000000..2b0733a --- /dev/null +++ b/rootfs/link/shell/init/filesystem.sh @@ -0,0 +1,16 @@ +mkdir /tmp/snap +mkdir /tmp/hls +mkdir /tmp/log +if [ ! -d /root/usb ]; then +mkdir /root/usb +fi +/link/shell/mountUsb.sh + +if [ -b /dev/mmcblk0p5 ]; then +/bin/mount -o remount,rw,sync,barrier=0 /dev/mmcblk0p5 / +fi + +if [ -b /dev/mmcblk0p6 ]; then +/bin/mount -o rw,sync,barrier=0 /dev/mmcblk0p6 /root/usb +fi + diff --git a/rootfs/link/shell/init/service.sh b/rootfs/link/shell/init/service.sh new file mode 100644 index 0000000..ffd8014 --- /dev/null +++ b/rootfs/link/shell/init/service.sh @@ -0,0 +1,40 @@ +. /link/shell/util/func.sh +jopen /link/config/service.json + +if [ `jget telnet` == "true" ]; then +/usr/sbin/telnetd +fi + +if [ `jget ssh` == "true" ] && ! procExists sshd; then +if [ ! -d /var/empty ];then + mkdir -p /var/empty +fi +chown root:root /var/empty +/usr/local/sbin/sshd +fi + +if [ `jget php` == "true" ]; then +/usr/php/sbin/php-fpm -R -p /usr/php -c /usr/php/etc/php.ini +fi + +if [ `jget nginx` == "true" ]; then +/usr/nginx/sbin/nginx -p /usr/nginx +fi + +if [ `jget crond` == "true" ]; then +/usr/sbin/crond -d 8 +fi + +if [ `jget onvif` == "true" ]; then +/link/shell/onvif.sh +fi + +if [ `jget ndi` == "true" ]; then +/link/shell/ndi.sh +fi + +if [ `jget sls` == "true" ]; then +/link/bin/sls -c /link/config/sls.conf & +fi + +/link/shell/ntp.sh & diff --git a/rootfs/link/shell/mountUsb.sh b/rootfs/link/shell/mountUsb.sh index 3affac6..d88b56a 100644 --- a/rootfs/link/shell/mountUsb.sh +++ b/rootfs/link/shell/mountUsb.sh @@ -1,11 +1,13 @@ #!/bin/sh -umount /root/usb if [ -e "/dev/sda" ]; then +umount /root/usb if [ -e "/dev/sda1" ]; then -/bin/mount -t vfat /dev/sda1 /root/usb +/bin/mount -t vfat -o rw,relatime,codepage=936,utf8 /dev/sda1 /root/usb /bin/mount -t ext4 /dev/sda1 /root/usb +/usr/bin/ntfs-3g /dev/sda1 /root/usb else -/bin/mount -t vfat /dev/sda /root/usb +/bin/mount -t vfat -o rw,relatime,codepage=936,utf8 /dev/sda /root/usb /bin/mount -t ext4 /dev/sda /root/usb +/usr/bin/ntfs-3g /dev/sda /root/usb fi fi diff --git a/rootfs/link/shell/ndi.sh b/rootfs/link/shell/ndi.sh index f88679a..20ead8b 100644 --- a/rootfs/link/shell/ndi.sh +++ b/rootfs/link/shell/ndi.sh @@ -6,7 +6,14 @@ sed -i "s/host-name=.*/host-name=`cat /link/config/mac`/g" /etc/avahi/avahi-daem else sed -i "s/host-name=.*/host-name=test/g" /etc/avahi/avahi-daemon.conf fi + +if [ -f /usr/local/var/run/dbus/pid ] ;then rm /usr/local/var/run/dbus/pid +fi + +if [ -f /run/avahi-daemon/pid ] ;then rm /run/avahi-daemon/pid +fi + /link/bin/dbus-daemon --config-file=/etc/dbus-1/system.conf /link/bin/avahi-daemon -f /etc/avahi/avahi-daemon.conf -D diff --git a/rootfs/link/shell/netManager.sh b/rootfs/link/shell/netManager.sh new file mode 100644 index 0000000..96172bf --- /dev/null +++ b/rootfs/link/shell/netManager.sh @@ -0,0 +1,15 @@ +. /link/shell/util/hardware.sh +/link/shell/setMac.sh +sleep 1 +/link/shell/setNetwork.sh +sleep 2 +/link/bin/WifiCtrl & + +if [ -d /sys/class/net/eth1 ]; then + /link/shell/setMac2.sh +if [ "$fac"=="ENC2" ] && [ -d /sys/class/net/eth2 ]; then + /link/shell/setNetwork2.sh eth2 +else + /link/shell/setNetwork2.sh eth1 +fi +fi diff --git a/rootfs/link/shell/ntp.sh b/rootfs/link/shell/ntp.sh new file mode 100644 index 0000000..0f1bde7 --- /dev/null +++ b/rootfs/link/shell/ntp.sh @@ -0,0 +1,14 @@ +. /link/shell/util/func.sh + +while [ true ] +do +jopen /link/config/ntp.json +if [ `jget enable` == "true" ]; then + if ! procExists ntpd ;then + ntpd -p `jget server` -N + fi +else + pkill ntpd +fi +sleep 1 +done diff --git a/rootfs/link/shell/reset.sh b/rootfs/link/shell/reset.sh index 4fbe91c..80d6b6c 100644 --- a/rootfs/link/shell/reset.sh +++ b/rootfs/link/shell/reset.sh @@ -1,2 +1,3 @@ cp /link/config/default/* /link/config/ +rm -rf /link/config/auto/* reboot diff --git a/rootfs/link/shell/setMac2.sh b/rootfs/link/shell/setMac2.sh new file mode 100644 index 0000000..e8f4398 --- /dev/null +++ b/rootfs/link/shell/setMac2.sh @@ -0,0 +1,8 @@ +if [ ! -f "/link/config/mac2" ]; then +/link/shell/makeMac.sh > /dev/null +/link/shell/makeMac.sh > /link/config/mac2 +fi + +/sbin/ifconfig $1 down +/sbin/ifconfig $1 hw ether `cat /link/config/mac2` +/sbin/ifconfig $1 up diff --git a/rootfs/link/shell/setNetwork.sh b/rootfs/link/shell/setNetwork.sh index e62fc24..62389d3 100644 --- a/rootfs/link/shell/setNetwork.sh +++ b/rootfs/link/shell/setNetwork.sh @@ -1,3 +1,4 @@ +. /link/shell/util/func.sh if [ -f /root/usb/local ];then cp /root/usb/local /link/config/net.json @@ -31,6 +32,10 @@ echo $ip > /etc/hostname hostname -F /etc/hostname if [ ! -f /root/usb/local -a "$dhcp" == "true" ]; then -ifconfig eth0 up -udhcpc -i eth0 -q -s /link/shell/dhcp.sh & + ifconfig eth0 up + if ! procExists udhcpc ;then + udhcpc -i eth0 -b -s /link/shell/dhcp.sh > /dev/null & + fi +else + pkill udhcpc fi diff --git a/rootfs/link/shell/setNetwork2.sh b/rootfs/link/shell/setNetwork2.sh new file mode 100644 index 0000000..5d9d9c1 --- /dev/null +++ b/rootfs/link/shell/setNetwork2.sh @@ -0,0 +1,15 @@ +cfg=/link/config/net2.json + +ip=`cat $cfg | grep -o '"ip":[0-9|.|"| ]*' | awk -F\" '{print $4}'` +mask=`cat $cfg | grep -o '"mask":[0-9|.|"| ]*' | awk -F\" '{print $4}'` +gw=`cat $cfg | grep -o '"gateway":[0-9|.|"| ]*' | awk -F\" '{print $4}'` +dns=`cat $cfg | grep -o '"dns":[0-9|.|"| ]*' | awk -F\" '{print $4}'` +dhcp=`cat $cfg | grep -o '"dhcp":[^(,|})]*' | awk -F: '{print $2}'` + + + +ifconfig $1 $ip netmask $mask up +if [ "$dhcp" == "true" ]; then +ifconfig $1 up +udhcpc -i $1 -b -s /link/shell/dhcp.sh > /dev/null & +fi diff --git a/rootfs/link/shell/update.sh b/rootfs/link/shell/update.sh index 74151cd..9f28ffa 100644 --- a/rootfs/link/shell/update.sh +++ b/rootfs/link/shell/update.sh @@ -1,15 +1,46 @@ -mv /link/update/* /link/update/update.tar -tar -xf /link/update/update.tar -C / -if [ -f "/link/update/kernel" ]; then -flash_erase /dev/mtd1 0 0 -nandwrite -p /dev/mtd1 /link/update/kernel +if [ ! -z "$(ls -A /link/update)" ]; then + mv /link/update/* /link/update/update.tar + tar -xf /link/update/update.tar -C / + + sleep 1 + if [ -c "/dev/mtd1" ]; then + if [ -f "/link/update/kernel" ]; then + flash_erase /dev/mtd1 0 0 + nandwrite -p /dev/mtd1 /link/update/kernel + fi + if [ -f "/link/update/logo.bin" ]; then + flash_erase /dev/mtd2 0 0 + nandwrite -p /dev/mtd2 /link/update/logo.bin + fi + if [ -f "/link/update/logo.jpg" ]; then + flash_erase /dev/mtd3 0 0 + nandwrite -p /dev/mtd3 /link/update/logo.jpg + fi + else + if [ -f "/link/update/kernel" ]; then + dd if=/link/update/kernel of=/dev/mmcblk0p2 + fi + if [ -f "/link/update/logo.bin" ]; then + dd if=/link/update/logo.bin of=/dev/mmcblk0p3 + fi + if [ -f "/link/update/logo.jpg" ]; then + dd if=/link/update/logo.jpg of=/dev/mmcblk0p4 + fi + fi + + rm /link/update/* + + if [ -f "/link/config/reboot" ]; then + rm /link/config/reboot + reboot + fi fi -if [ -f "/link/update/logo.bin" ]; then -flash_erase /dev/mtd2 0 0 -nandwrite -p /dev/mtd2 /link/update/logo.bin + +if [ -f "/link/shell/runOnce.sh" ]; then + chmod 777 /link/shell/runOnce.sh + /link/shell/runOnce.sh + rm /link/shell/runOnce.sh fi -if [ -f "/link/update/logo.jpg" ]; then -flash_erase /dev/mtd3 0 0 -nandwrite -p /dev/mtd3 /link/update/logo.jpg -fi -rm /link/update/* + + + diff --git a/rootfs/link/shell/util/func.sh b/rootfs/link/shell/util/func.sh new file mode 100644 index 0000000..7025ee0 --- /dev/null +++ b/rootfs/link/shell/util/func.sh @@ -0,0 +1,29 @@ +m_jsonpath="" +jopen() +{ + m_jsonpath=$1 +} + +jget() +{ + if [ "$2" ] ;then + jq -r .$1 $2 + else + jq -r .$1 $m_jsonpath + fi +} + +nfsBoot() +{ + if [ -z "`mount -t nfs`" ]; then + return 1 + else + return 0 + fi +} + +procExists() +{ +ps -ef | grep $1 | grep -v grep > /dev/null +return $? +} diff --git a/rootfs/link/shell/util/hardware.sh b/rootfs/link/shell/util/hardware.sh new file mode 100644 index 0000000..e464b79 --- /dev/null +++ b/rootfs/link/shell/util/hardware.sh @@ -0,0 +1,6 @@ +. /link/shell/util/func.sh +jopen /link/config/hardware.json + +fac=`jget fac` +chip=`jget chip` +model=`jget model` diff --git a/rootfs/link/web/carousel.php b/rootfs/link/web/carousel.php index 853df45..7fe119a 100644 --- a/rootfs/link/web/carousel.php +++ b/rootfs/link/web/carousel.php @@ -41,6 +41,18 @@ include( "head.php" ); Enable: + + + + + +
@@ -98,6 +110,24 @@ include( "head.php" ); return "[" + m + ":" + s + "]"; } + function formatName(name) { + var nn = name; + + var count = 7; + let reg = new RegExp("[\\u4E00-\\u9FFF]+","g") + if(!reg.test(name)) + count = 12 + + if(name.indexOf(".") > -1) { + if(name.length > (count+3)) + { + var lst = name.split("."); + nn = lst[0].substring(0,count)+"..."+lst[1]; + } + } + return nn; + } + $.getJSON( "config/config.json", function ( result ) { config = result; for ( var i = 0; i < config.length; i++ ) { @@ -122,7 +152,9 @@ include( "head.php" ); list.push( playList[ k ].name ); } config[ i ].file = list; - config[ i ].enable = $("#cfg .switch").is( ":checked" ); + config[ i ].enable = $("#cfg .switch").eq(0).is( ":checked" ); + config[ i ].decodeV = $("#cfg .switch").eq(1).is( ":checked" ); + config[ i ].decodeA = $("#cfg .switch").eq(2).is( ":checked" ); rpc( "enc.update", [ JSON.stringify( config, null, 2 ) ], function ( data ) { getList(); } ); @@ -164,12 +196,12 @@ include( "head.php" ); var ticks_positions = new Array(); var html = ""; for ( var i = 0; i < playList.length; i++ ) { - ticks_labels.push( playList[ i ].name ); + ticks_labels.push( formatName(playList[ i ].name) ); ticks.push( totalLen ); totalLen += playList[ i ].duration; html += ""; html += ''; - html += ''; + html += ''; html += ''; html += '
' + ( i + 1 ) + '' + playList[ i ].name + '' + formatName(playList[ i ].name) + '' + timeFormat( playList[ i ].duration ) + ' '; html += ' '; @@ -252,7 +284,7 @@ include( "head.php" ); for ( var i = 0; i < list.length; i++ ) { if ( list[ i ].type != "file" ) continue; - $( "#fileSelect" ).append( '' ); + $( "#fileSelect" ).append( '' ); } diff --git a/rootfs/link/web/colorKey.php b/rootfs/link/web/colorKey.php new file mode 100644 index 0000000..7fc9874 --- /dev/null +++ b/rootfs/link/web/colorKey.php @@ -0,0 +1,358 @@ + + +
+
+
+
+ +
+ +
+
+
+
+
+
+
+

+ 参数设定 + Setting +

+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+
+

+ 资源列表 + Resource +

+
+
+ +
+ +
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/rootfs/link/web/css/my.css b/rootfs/link/web/css/my.css index f2a9ae4..8c6ae94 100644 --- a/rootfs/link/web/css/my.css +++ b/rootfs/link/web/css/my.css @@ -4,12 +4,25 @@ html, body { font-size: 13px; background: #f0f0f4; font-family:"Microsoft YaHei",Arial,Helvetica,sans-serif,"SimSun"; - -ms-overflow-style: none; - scrollbar-width: none; } -body::-webkit-scrollbar { - display: none; /* Safari and Chrome */ +::-webkit-scrollbar { + width: 8px; + height: 8px; } + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #bbb; + border-radius: 10px; +} + +::-webkit-scrollbar-thumb:hover { + background: #888; +} + en,cn{ display: none; } @@ -731,4 +744,17 @@ color: #fb0; #zoom_frame .slider{ margin-left: 15px; width: 60% !important; +} + +#colorKey #pointFrame{ + position:absolute; top:0; width:100%; padding-bottom:56.25%; +} + +#colorKey .point{ + background-color: #ff0000; + width: 8px; + height: 8px; + margin-left: -4px; + margin-top: -4px; + position: absolute; } \ No newline at end of file diff --git a/rootfs/link/web/css/theme/theme.css b/rootfs/link/web/css/theme/theme.css index f04b1bd..7d43da7 100644 --- a/rootfs/link/web/css/theme/theme.css +++ b/rootfs/link/web/css/theme/theme.css @@ -166,6 +166,10 @@ input[type="checkbox"]:checked { border-color: var(--checkbox_active); } +input[type="checkbox"]:focus { + outline: none; +} + input[type="checkbox"]:checked:after { content: ''; display: block; diff --git a/rootfs/link/web/dashboard.php b/rootfs/link/web/dashboard.php index c700cb2..399429b 100644 --- a/rootfs/link/web/dashboard.php +++ b/rootfs/link/web/dashboard.php @@ -188,19 +188,12 @@ include("head.php"); { var cnt = 0; var config; - $.getJSON( "config/board.json", function ( data ) { + $.getJSON( "config/hardware.json", function ( data ) { var ifaceV=data.interfaceV; var htmlStr=""; - for(var name in ifaceV){ - - var pro="HDMI"; - if(ifaceV[name].protocols!=undefined) - pro=ifaceV[name].protocols[0]; - - if(name.endsWith("-L")) - name=name.substr(0,name.length-2); - if(name.endsWith("-R")) - continue; + for(var i=0;i' + @@ -289,7 +282,7 @@ include("head.php"); var k = 0; for ( var i = 0; i < config.length; i++ ) { - if ( !config[ i ].enable || config[ i ].type == "file" || ( config[ i ].type == "net" && !config[ i ].net.decodeV ) ) + if ( !config[ i ].enable || ( config[ i ].type == "net" && !config[ i ].net.decodeV ) ) continue; if ( config[ i ].enable ) diff --git a/rootfs/link/web/encode.php b/rootfs/link/web/encode.php index 88897f3..729b1e3 100644 --- a/rootfs/link/web/encode.php +++ b/rootfs/link/web/encode.php @@ -38,7 +38,7 @@ include( "groupList.php" );
-
+

@@ -85,7 +85,7 @@ include( "groupList.php" );

@@ -139,10 +132,6 @@ include( "groupList.php" );
-
辅流参数 Sub stream @@ -152,7 +141,7 @@ include( "groupList.php" );
@@ -202,9 +184,6 @@ include( "groupList.php" );
-

@@ -250,14 +229,6 @@ include( "groupList.php" ); - - -
@@ -385,7 +356,7 @@ include( "groupList.php" );
@@ -440,10 +404,6 @@ include( "groupList.php" );
-
@@ -453,7 +413,7 @@ include( "groupList.php" );
@@ -508,9 +461,6 @@ include( "groupList.php" );
-
@@ -564,15 +514,10 @@ include( "groupList.php" );
- @@ -842,14 +782,6 @@ include( "groupList.php" ); - - -
@@ -1017,7 +949,7 @@ include( "groupList.php" ); $( ".audioSrc" ).html(""); $( "#allAudio" ).find(".audioSrc").append('') $(".audioSrc").append('') @@ -1031,7 +963,7 @@ include( "groupList.php" ); if(config[i].enca.audioSrc == "hdmi" || config[i].enca.audioSrc == "sdi") config[i].enca.audioSrc = config[i].id; } - if(config[i].type != "file" && config[i].type != "ndi"){ + if(config[i].enca!=undefined){ $( ".audioSrc" ).append( '' ); } } @@ -1044,9 +976,11 @@ include( "groupList.php" ); if(config[ i ].enable){ audio.push( config[ i ] ); } - } else if ( config[ i ].type != "file" && config[ i ].type != "ndi" ) { - audio.push( config[ i ] ); - hdmi.push( config[ i ] ); + } else { + if ( config[ i ].enca != undefined ) + audio.push( config[ i ] ); + if ( config[ i ].encv != undefined ) + hdmi.push( config[ i ] ); } if ( config[ i ].type == "vi" ) video.push( config[ i ] ); @@ -1116,7 +1050,7 @@ include( "groupList.php" ); $( "#setAll" ).click( function ( e ) { for ( var i = 0; i < config.length; i++ ) { - if ( config[ i ].type == "file" || config[ i ].type == "ndi" ) + if ( config[ i ].encv ==undefined || config[ i ].enca ==undefined ) continue; $.extend( config[ i ].encv, all ); $.extend( config[ i ].encv2, all_sub ); @@ -1132,13 +1066,13 @@ include( "groupList.php" ); $( "#save" ).click(); } ); - var maxENC = ; + var maxENC = ; $( "#save" ).click( function ( e ) { var sum=0; for ( var i = 0; i < config.length; i++ ) { - if(config[i].enable && config[i].type!="file" && config[i].type!="ndi"){ + if(config[i].enable && config[i].encv!=undefined){ if(config[i].encv.codec!="close") sum+=config[i].encv.width*config[i].encv.height*config[i].encv.framerate; if(config[i].enable2 && config[i].encv2.codec!="close"){ @@ -1161,22 +1095,6 @@ include( "groupList.php" ); } } ); } - - for(var i=0;i= j) - layouts[j].rotate = config[k].cap.rotate; - } - } - } - } rpc( "enc.update", [ JSON.stringify( config, null, 2 ) ], function ( data ) { if ( typeof ( data.error ) != "undefined" ) { @@ -1206,20 +1124,7 @@ include( "groupList.php" ); grpSetStatus( index, data ? 1 : 2 ); k--; if ( k == 0 ) { - $.getJSON( "config/config.json", function ( result ) { - config = result; - for ( var i = 0; i < config.length; i++ ) { - if ( config[ i ].type == "net" ) { - net[ i ] = config[ i ]; - } else if ( config[ i ].type != "file" && config[ i ].type != "ndi" ) { - hdmi[ i ] = config[ i ]; - } - } - zcfg( "#templetHDMI", hdmi ); - zcfg( "#templetADV", hdmi ); - zcfg( "#templetNET", net ); - zcfg( "#templetAudio", audio ); - } ); + init(); } }, i ); } diff --git a/rootfs/link/web/explorer.php b/rootfs/link/web/explorer.php index 4b34fb4..a8408a2 100644 --- a/rootfs/link/web/explorer.php +++ b/rootfs/link/web/explorer.php @@ -46,6 +46,7 @@ include( "head.php" ); +
@@ -521,7 +522,6 @@ include( "head.php" ); } htmlAlert("#alert", "success", res.result, "", 300000); func("formatDisk",{"format":$("#diskFormat").val()},function (res) { - console.log(res) if(res.result == "OK"){ htmlAlert("#alert", "success", '格式化完成,请重新加载页面When formatting is complete, reload the page', "", 30000); } @@ -536,6 +536,34 @@ include( "head.php" ); } ); } + function onUmount() { + $.confirm( { + title: '

卸载磁盘Unmount Disk

', + content: "是否卸载磁盘,请确保没有处于录制状态Whether to unmount the disk, please make sure it is not in the recording state", + buttons: { + ok: { + text: "卸载Unmount", + btnClass: 'btn-warning', + keys: [ 'enter' ], + action: function () { + func("umountDisk",[],function (res) { + if(res.error != ""){ + htmlAlert("#alert", "danger", res.error, "", 3000); + return; + } + setTimeout(function () { + location.reload(); + },500); + }) + } + }, + cancel: { + text: "取消Cancel" + } + } + } ); + } + function onJumpPath(cur,index) { last = cur; var pathList = cur.split("/"); @@ -710,10 +738,10 @@ include( "head.php" ); $(ele).addClass("fa-spin"); func("mountDisk",[],function (res) { if(res.error != ""){ - if(res.error.indexOf("外部存储设备挂载失败") > 0) - onEraser(); - else - htmlAlert("#alert", "danger", res.error, "", 3000); + // if(res.error.indexOf("外部存储设备挂载失败") > 0) + // onEraser(); + // else + htmlAlert("#alert", "danger", res.error, "", 3000); setTimeout(function () { $(ele).removeClass("fa-spin"); },1000); @@ -975,6 +1003,10 @@ include( "head.php" ); } else { name = list[0]; param.name = name+"."+list[1]; + if(param.name.length > 17) { + param.name = name.substring(0,13); + param.name = param.name+"..."+list[1]; + } param.real = name+"*."+list[1]; param.type = "vdo"; if(list[1] == "mp4") diff --git a/rootfs/link/web/fac.php b/rootfs/link/web/fac.php index e049425..73e08ce 100644 --- a/rootfs/link/web/fac.php +++ b/rootfs/link/web/fac.php @@ -1,46 +1,18 @@
@@ -48,7 +20,7 @@ include( "head.php" );

- 机型切换 + 机型切换 Model switch

@@ -56,57 +28,21 @@ include( "head.php" );
@@ -115,7 +51,7 @@ include( "head.php" );
@@ -129,72 +65,41 @@ include( "head.php" );

- 功能开关 + 功能开关 Function Switch

-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
+
+ $value) + { + echo ' +
+
+
+ '.$key.' +
+
+
+
+
+ +
+
+
+ '; + } + ?>
+
-
+
@@ -225,7 +130,7 @@ include( "head.php" );
@@ -261,7 +166,7 @@ include( "head.php" );
@@ -302,247 +207,196 @@ include( "head.php" );
-
-
-
-

- LPH -

-
-
- -
- -
- -
-
-
-
- -
-
- -
-
-
+
+
+
+

+ LPH +

+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+

+ 主题 + Theme +

+
+
+
+
+
+

+ + 编辑 + Edit + +

+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ + + -
-
-
-
-

- OLED -

-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-

- 主题 - Theme -

-
-
-
-
-
-

- - 编辑 - Edit - -

-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
- -
-
-
-
-
-
-
-
+ + - + $.ajax({ + url: "config/curEDID", + success: function(data) { + $("#edidVal").val(data.replace(/[\r\n]/g, "")); - - - + }); + }); + + \ No newline at end of file diff --git a/rootfs/link/web/func.php b/rootfs/link/web/func.php index 8da38a4..25553ff 100644 --- a/rootfs/link/web/func.php +++ b/rootfs/link/web/func.php @@ -1,9 +1,11 @@ '' ); +$server = "help.linkpi.cn:5735"; +$rootPath = "/root/usb"; if ( isset( $_GET[ 'func' ] ) ) call_user_func( $_GET[ 'func' ] ); @@ -129,13 +131,13 @@ function setCron() { function startHelp() { global $result; - global $help; + global $hardware; $result->result = "OK"; $authCode=$_POST[ 'authCode' ]; $sshPort=2000+intval($authCode); $rtspPort=5000+intval($authCode); exec("pkill ngrokc" ); - exec("/usr/bin/ngrokc -SER[Shost:".$help.",Sport:4443] -AddTun[Type:http,Lhost:127.0.0.1,Lport:80,Sdname:".$authCode."] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:22,Rport:".$sshPort."] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:554,Rport:".$rtspPort."] > /tmp/ngrok &" ); + exec("/usr/bin/ngrokc -SER[Shost:".$hardware["other"]["help"].",Sport:4443] -AddTun[Type:http,Lhost:127.0.0.1,Lport:80,Sdname:".$authCode."] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:22,Rport:".$sshPort."] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:554,Rport:".$rtspPort."] > /tmp/ngrok &" ); } function stopHelp() { @@ -283,32 +285,18 @@ function setFrp() { function showFunc() { global $result; - $str = file_get_contents( '/link/web/config.php' ); - $lines = explode("\n",$str); - - $result->result = ""; - - foreach($_POST as $key => $val) + global $hardware; + + foreach($hardware["function"] as $key => $val) { - if($key == "netPic") - continue; - for($i=0;$i 0) - { - if(is_string($val) && $val!="true" && $val!="false") - $lines[$i]="$".$key."=\"".$val."\";"; - else - $lines[$i]="$".$key."=".$val.";"; - break; - } - } + if($_POST[$key]=="on") + $hardware["function"][$key]=true; + else + $hardware["function"][$key]=false; } - file_put_contents( '/link/web/config.php', join("\n",$lines)); - - $netPic = array( - no_signal=>$_POST["netPic"] - ); - file_put_contents( '/link/config/auto/netPic.json',json_encode($netPic)); + $json_string = json_encode( $hardware); + file_put_contents ( '/link/config/hardware.json' , $json_string ); + $result->result = "OK"; } function hadFiles() { @@ -344,6 +332,18 @@ function formatReady() { $result->result = "正在格式化,请勿关闭此页面Do not close this page while formatting"; } +function umountDisk() { + global $result; + exec("umount -l /root/usb"); + exec("sync"); + $output=""; + exec("df -h | grep /root/usb | wc -l",$output); + if($output[0] == "0") + $result->result = "OK"; + else + $result->error = "卸载失败,请确保设备没有被占用Unmount failed, please make sure the device is not in use"; +} + function formatDisk() { global $result; exec("/link/shell/fusb.sh ".$_POST["format"]); @@ -354,15 +354,15 @@ function mountDisk() { global $result; $output=array(); exec( "ls /dev/sda",$output); - //file_put_contents("/link/log.log",count($output).PHP_EOL,FILE_APPEND); if(count($output) == 0) { $result->error = "没有检测到外部存储设备No external storage device is detected"; return; } unset($output); - exec("mount -t vfat /dev/sda1 /root/usb"); + exec("mount -t vfat -o rw,relatime,codepage=936,utf8 /dev/sda1 /root/usb"); exec("mount -t ext4 /dev/sda1 /root/usb"); + exec("ntfs-3g /dev/sda1 /root/usb"); exec("df -h | grep /root/usb",$output); if(count($output) == 1) $result->result = "OK"; @@ -399,7 +399,7 @@ function checkHelpNet() { } function checkUpdate() { - global $result; + global $result,$server; $fac = file_get_contents("/link/config/fac"); $fac = str_replace("\n","",$fac); @@ -410,7 +410,7 @@ function checkUpdate() { $version = json_decode(file_get_contents("/link/config/version.json"),true); $sys_ary = explode(" ",$version["sys"]); $args = array("type"=>$fac,"build"=>$sys_ary[0],"sys_ver"=>$sys_ary[2]); - $ret = send("http://help.linkpi.cn:5735/api/patch/query_master",json_encode($args)); + $ret = send("http://".$server."/api/patch/query_master",json_encode($args)); if($ret["status"] == "error") $result->error = $ret["msg"]; else @@ -419,7 +419,7 @@ function checkUpdate() { function getPatch() { - global $result; + global $result,$server; $fac = file_get_contents("/link/config/fac"); $fac = str_replace("\n","",$fac); if(is_null($fac) || $fac == "") { @@ -429,7 +429,7 @@ function getPatch() { $version = json_decode(file_get_contents("/link/config/version.json"),true); $sys_ary = explode(" ",$version["sys"]); $args = array("type"=>$fac,"build"=>$sys_ary[0],"sys_ver"=>$sys_ary[2]); - $ret = send("http://help.linkpi.cn:5735/api/patch/query_patch",json_encode($args)); + $ret = send("http://".$server."/api/patch/query_patch",json_encode($args)); if($ret["status"] == "error") $result->error = $ret["msg"]; else @@ -437,7 +437,7 @@ function getPatch() { } function getPatchBySn() { - global $result; + global $result,$server; $fac = file_get_contents("/link/config/fac"); $fac = str_replace("\n","",$fac); if(is_null($fac) || $fac == "") { @@ -445,7 +445,7 @@ function getPatchBySn() { return; } $args = array("type"=>$fac,"sn"=>$_POST["sn"]); - $ret = send("http://help.linkpi.cn:5735/api/patch/query_sn_patch",json_encode($args)); + $ret = send("http://".$server."/api/patch/query_sn_patch",json_encode($args)); if($ret["status"] == "error") $result->error = $ret["msg"]; else @@ -453,7 +453,7 @@ function getPatchBySn() { } function getAliase() { - global $result; + global $result,$server; $fac = file_get_contents("/link/config/fac"); $fac = str_replace("\n","",$fac); if(is_null($fac) || $fac == "") { @@ -461,7 +461,7 @@ function getAliase() { return; } $args = array("fac"=>$fac); - $ret = send("http://help.linkpi.cn:5735/api/aliase/query_aliase",json_encode($args)); + $ret = send("http://".$server."/api/aliase/query_aliase",json_encode($args)); if($ret["status"] == "error") $result->error = $ret["msg"]; else diff --git a/rootfs/link/web/hardware.php b/rootfs/link/web/hardware.php new file mode 100644 index 0000000..ebcbb54 --- /dev/null +++ b/rootfs/link/web/hardware.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/rootfs/link/web/head.php b/rootfs/link/web/head.php index 3183112..6ea9315 100644 --- a/rootfs/link/web/head.php +++ b/rootfs/link/web/head.php @@ -1,115 +1,189 @@ -
+
\ No newline at end of file diff --git a/rootfs/link/web/headhead.php b/rootfs/link/web/headhead.php index 279f650..b0d53cf 100644 --- a/rootfs/link/web/headhead.php +++ b/rootfs/link/web/headhead.php @@ -14,7 +14,6 @@ - @@ -26,6 +25,6 @@ - + diff --git a/rootfs/link/web/js/global.js b/rootfs/link/web/js/global.js index 46de662..2d0d295 100644 --- a/rootfs/link/web/js/global.js +++ b/rootfs/link/web/js/global.js @@ -136,7 +136,7 @@ function getUsedLang() { $.ajaxSettings.async = true; } -function linkHref(path) { +function linkHref(path) { var link = document.createElement('link'); link.href = path; link.rel = 'stylesheet'; @@ -147,7 +147,6 @@ function linkHref(path) { var usedTheme=getUsedTheme(); if(usedTheme!="") { - linkHref("css/theme/clear.css"); linkHref("css/theme/"+getUsedTheme()+".css"); linkHref("css/theme/theme.css"); } diff --git a/rootfs/link/web/login.php b/rootfs/link/web/login.php index 0c32f8f..cba44f6 100644 --- a/rootfs/link/web/login.php +++ b/rootfs/link/web/login.php @@ -1,5 +1,4 @@
-
+
- + - + + + + + + + - -
+ +
@@ -43,31 +43,31 @@ include( "head.php" );
- -
- -
+ +
+ +
- +
-
> +
>
@@ -81,7 +81,8 @@ include( "head.php" );
@@ -90,43 +91,78 @@ include( "head.php" );
- -
- -
-
-
- -
- -
-
- -
- -
- -
-
-
- -
- -
-
-
-
-
- -
- -
-
-
- -
- -
-
- -
- -
- +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
-
- -
- -
-
-
-
- +
@@ -234,13 +374,15 @@ echo isset($extraVo)?$extraVo:"VGA";
+ +include("foot.php"); +?> \ No newline at end of file diff --git a/rootfs/link/web/overlay.php b/rootfs/link/web/overlay.php index 999a309..1cbefac 100644 --- a/rootfs/link/web/overlay.php +++ b/rootfs/link/web/overlay.php @@ -1,6 +1,7 @@ +
@@ -250,37 +251,28 @@ include( "head.php" );
-
@@ -444,6 +447,34 @@ include( "head.php" ); } zcfg( "#segment", fragmentData ); } + + function onUmount() { + $.confirm( { + title: '

卸载磁盘Unmount Disk

', + content: "是否卸载磁盘,请确保没有处于录制状态Whether to unmount the disk, please make sure it is not in the recording state", + buttons: { + ok: { + text: "卸载Unmount", + btnClass: 'btn-warning', + keys: [ 'enter' ], + action: function () { + func("umountDisk",[],function (res) { + if(res.error != ""){ + htmlAlert("#alert", "danger", res.error, "", 3000); + return; + } + setTimeout(function () { + location.reload(); + },500); + }) + } + }, + cancel: { + text: "取消Cancel" + } + } + } ); + } function setSegment() { rpc("rec.isRecordState", [], function (data) { @@ -737,7 +768,7 @@ include( "head.php" ); isRecordMark = true; } enabledChn.push(chns[j]); - html += '
'; + html += '
'; } } } diff --git a/rootfs/link/web/roi.php b/rootfs/link/web/roi.php index 3f930ca..9d350df 100644 --- a/rootfs/link/web/roi.php +++ b/rootfs/link/web/roi.php @@ -91,9 +91,7 @@ include( "head.php" ); - - - + - - + +
diff --git a/rootfs/link/web/upload.php b/rootfs/link/web/upload.php index 0f67841..a3303fe 100644 --- a/rootfs/link/web/upload.php +++ b/rootfs/link/web/upload.php @@ -1,165 +1,53 @@ = intval($cur_version)) + $up = "-2"; + } + } + } + + if($up != "0") + exec("rm /link/update/update.tar"); + + echo '{"upload":"'.$up.'"}'; } - while ($buff = fread($in, 4096)) { - fwrite($out, $buff); - } - @fclose($in); - @unlink("{$filePath}_{$index}.part"); } - flock($out, LOCK_UN); } - @fclose($out); + catch (Exception $e) + { + echo "{error:'上传失败," . $e->getMessage() . "'}"; + } } -// Return Success JSON-RPC response -die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); - -//if ( $_FILES[ "file" ][ "error" ] > 0 ) { -// echo $_FILES[ "file" ][ "error" ]; -//} else { -// -// if ( isset( $_GET[ 'path' ] ) ) { -// move_uploaded_file( $_FILES[ "file" ][ "tmp_name" ], "/itv/vod/" . $_FILES[ "file" ][ "name" ] ); -// } else { -// move_uploaded_file( $_FILES[ "file" ][ "tmp_name" ], "/var/www/temp/update.zip" ); -// } -// -// echo "OK"; -//} - -?> \ No newline at end of file diff --git a/rootfs/link/web/upload1.php b/rootfs/link/web/upload1.php new file mode 100644 index 0000000..b314717 --- /dev/null +++ b/rootfs/link/web/upload1.php @@ -0,0 +1,24 @@ +getMessage() . "'}"; + } +} diff --git a/rootfs/link/web/vendor/fileinput/css/fileinput.css b/rootfs/link/web/vendor/fileinput/css/fileinput.css new file mode 100644 index 0000000..48fb013 --- /dev/null +++ b/rootfs/link/web/vendor/fileinput/css/fileinput.css @@ -0,0 +1,401 @@ +/*! + * bootstrap-fileinput v4.3.6 + * http://plugins.krajee.com/file-input + * + * Author: Kartik Visweswaran + * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com + * + * Licensed under the BSD 3-Clause + * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md + */ +.file-loading { + top: 0; + right: 0; + width: 25px; + height: 25px; + font-size: 999px; + text-align: right; + color: #fff; + background: transparent url('../img/loading.gif') top left no-repeat; + border: none; +} + +.file-object { + margin: 0 0 -5px 0; + padding: 0; +} + +.btn-file { + position: relative; + overflow: hidden; +} + +.btn-file input[type=file] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + text-align: right; + opacity: 0; + background: none repeat scroll 0 0 transparent; + cursor: inherit; + display: block; +} + +.file-caption-name { + display: inline-block; + overflow: hidden; + height: 20px; + word-break: break-all; +} + +.input-group-lg .file-caption-name { + height: 25px; +} + +.file-zoom-dialog { + text-align: left; +} + +.file-error-message { + color: #a94442; + background-color: #f2dede; + margin: 5px; + border: 1px solid #ebccd1; + border-radius: 4px; + padding: 15px; +} + +.file-error-message pre, .file-error-message ul { + margin: 0; + text-align: left; +} + +.file-error-message pre { + margin: 5px 0; +} + +.file-caption-disabled { + background-color: #EEEEEE; + cursor: not-allowed; + opacity: 1; +} + +.file-preview { + border-radius: 5px; + border: 1px solid #ddd; + padding: 5px; + width: 100%; + margin-bottom: 5px; +} + +.file-preview-frame { + position: relative; + display: table; + margin: 8px; + height: 160px; + border: 1px solid #ddd; + box-shadow: 1px 1px 5px 0 #a2958a; + padding: 6px; + float: left; + text-align: center; + vertical-align: middle; +} + +.file-preview-frame:not(.file-preview-error):hover { + box-shadow: 3px 3px 5px 0 #333; +} + +.file-preview-image { + vertical-align: middle; + image-orientation: from-image; +} + +.file-preview-text { + display: block; + color: #428bca; + border: 1px solid #ddd; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + outline: none; + padding: 8px; + resize: none; +} + +.file-preview-html { + border: 1px solid #ddd; + padding: 8px; + overflow: auto; +} + +.file-zoom-dialog .file-preview-text { + font-size: 1.2em; +} + +.file-preview-other { + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; + text-align: center; + vertical-align: middle; + padding: 10px; +} + +.file-preview-other:hover { + opacity: 0.8; +} + +.file-actions, .file-other-error { + text-align: left; +} + +.file-other-icon { + font-size: 4.8em; +} + +/* noinspection CssOverwrittenProperties */ +.file-zoom-dialog .file-other-icon { + font-size: 8em; + font-size: 55vmin; +} + +.file-input-new .file-preview, .file-input-new .close, .file-input-new .glyphicon-file, +.file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button, +.file-input-ajax-new .fileinput-remove-button, .file-input-ajax-new .fileinput-upload-button { + display: none; +} + +.file-caption-main { + width: 100%; +} + +.file-input-ajax-new .no-browse .input-group-btn, +.file-input-new .no-browse .input-group-btn { + display: none; +} + +.file-input-ajax-new .no-browse .form-control, +.file-input-new .no-browse .form-control { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.file-thumb-loading { + background: transparent url('../img/loading.gif') no-repeat scroll center center content-box !important; +} + +.file-actions { + margin-top: 15px; +} + +.file-footer-buttons { + float: right; +} + +.file-upload-indicator { + display: inline; + cursor: default; + opacity: 0.8; + width: 60%; +} + +.file-upload-indicator:hover { + font-weight: bold; + opacity: 1; +} + +.file-footer-caption { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 160px; + text-align: center; + padding-top: 4px; + font-size: 11px; + color: #777; + margin: 5px auto; +} + +.file-preview-error { + opacity: 0.65; + box-shadow: none; +} + +.file-preview-frame:not(.file-preview-error) .file-footer-caption:hover { + color: #000; +} + +.file-drop-zone { + border: 1px dashed #aaa; + border-radius: 4px; + height: 100%; + text-align: center; + vertical-align: middle; + margin: 12px 15px 12px 12px; + padding: 5px; +} + +.file-drop-zone-title { + color: #aaa; + font-size: 1.6em; + padding: 85px 10px; + cursor: default; +} + +.file-preview .clickable, +.clickable .file-drop-zone-title { + cursor: pointer; +} + +.file-drop-zone.clickable:hover { + border: 2px dashed #999; +} + +.file-drop-zone.clickable:focus { + border: 2px solid #5acde2; +} + +.file-drop-zone .file-preview-thumbnails { + cursor: default; +} + +.file-highlighted { + border: 2px dashed #999 !important; + background-color: #f0f0f0; +} + +.file-uploading { + background: url('../img/loading-sm.gif') no-repeat center bottom 10px; + opacity: 0.65; +} + +.file-thumb-progress { + height: 10px; +} + +.file-thumb-progress .progress, .file-thumb-progress .progress-bar { + height: 10px; + font-size: 9px; + line-height: 10px; +} + +.file-thumbnail-footer { + position: relative; +} + +.file-thumb-progress { + position: absolute; + top: 35px; + left: 0; + right: 0; +} + +.file-zoom-fullscreen.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.file-zoom-fullscreen .modal-dialog { + position: fixed; + margin: 0; + width: 100%; + height: 100%; + padding: 0; +} + +.file-zoom-fullscreen .modal-content { + border-radius: 0; + box-shadow: none; +} + +.file-zoom-fullscreen .modal-body { + overflow-y: auto; +} + +.file-zoom-dialog .modal-body { + position: relative !important; +} + +.file-zoom-dialog .btn-navigate { + position: absolute; + padding: 0; + margin: 0; + background: transparent; + text-decoration: none; + outline: none; + opacity: 0.7; + top: 45%; + font-size: 4em; + color: #1c94c4; +} + +.file-zoom-dialog .floating-buttons { + position: absolute; + top: 5px; + right: 10px; +} + +.floating-buttons, .floating-buttons .btn { + z-index: 3000; +} + +.file-zoom-dialog .kv-zoom-actions .btn, +.floating-buttons .btn { + margin-left: 3px; +} + +.file-zoom-dialog .btn-navigate:not([disabled]):hover, +.file-zoom-dialog .btn-navigate:not([disabled]):focus { + outline: none; + box-shadow: none; + opacity: 0.5; +} + +.file-zoom-dialog .btn-navigate[disabled] { + opacity: 0.3; +} + +.file-zoom-dialog .btn-prev { + left: 1px; +} + +.file-zoom-dialog .btn-next { + right: 1px; +} + +.file-drag-handle { + display: inline; + margin-right: 2px; + font-size: 16px; + cursor: move; + cursor: -webkit-grabbing; +} + +.file-drag-handle:hover { + opacity: 0.7; +} + +.file-zoom-content { + height: 480px; + text-align: center; +} + +.file-preview-initial.sortable-chosen { + background-color: #d9edf7; +} + +.file-preview-frame.sortable-ghost { + background-color: #eee; +} + +/* IE 10 fix */ +.btn-file ::-ms-browse { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/rootfs/link/web/vendor/fileinput/css/fileinput.min.css b/rootfs/link/web/vendor/fileinput/css/fileinput.min.css new file mode 100644 index 0000000..1285825 --- /dev/null +++ b/rootfs/link/web/vendor/fileinput/css/fileinput.min.css @@ -0,0 +1,10 @@ +/*! + * bootstrap-fileinput v4.3.6 + * http://plugins.krajee.com/file-input + * + * Author: Kartik Visweswaran + * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com + * + * Licensed under the BSD 3-Clause + * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md + */.file-loading{top:0;right:0;width:25px;height:25px;font-size:999px;text-align:right;color:#fff;background:transparent url('../img/loading.gif') top left no-repeat;border:0}.file-object{margin:0 0 -5px 0;padding:0}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;text-align:right;opacity:0;background:none repeat scroll 0 0 transparent;cursor:inherit;display:block}.file-caption-name{display:inline-block;overflow:hidden;height:20px;word-break:break-all}.input-group-lg .file-caption-name{height:25px}.file-zoom-dialog{text-align:left}.file-error-message{color:#a94442;background-color:#f2dede;margin:5px;border:1px solid #ebccd1;border-radius:4px;padding:15px}.file-error-message pre,.file-error-message ul{margin:0;text-align:left}.file-error-message pre{margin:5px 0}.file-caption-disabled{background-color:#eee;cursor:not-allowed;opacity:1}.file-preview{border-radius:5px;border:1px solid #ddd;padding:5px;width:100%;margin-bottom:5px}.file-preview-frame{position:relative;display:table;margin:8px;height:160px;border:1px solid #ddd;box-shadow:1px 1px 5px 0 #a2958a;padding:6px;float:left;text-align:center;vertical-align:middle}.file-preview-frame:not(.file-preview-error):hover{box-shadow:3px 3px 5px 0 #333}.file-preview-image{vertical-align:middle;image-orientation:from-image}.file-preview-text{display:block;color:#428bca;border:1px solid #ddd;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;outline:0;padding:8px;resize:none}.file-preview-html{border:1px solid #ddd;padding:8px;overflow:auto}.file-zoom-dialog .file-preview-text{font-size:1.2em}.file-preview-other{left:0;top:0;right:0;bottom:0;margin:auto;text-align:center;vertical-align:middle;padding:10px}.file-preview-other:hover{opacity:.8}.file-actions,.file-other-error{text-align:left}.file-other-icon{font-size:4.8em}.file-zoom-dialog .file-other-icon{font-size:8em;font-size:55vmin}.file-input-new .file-preview,.file-input-new .close,.file-input-new .glyphicon-file,.file-input-new .fileinput-remove-button,.file-input-new .fileinput-upload-button,.file-input-ajax-new .fileinput-remove-button,.file-input-ajax-new .fileinput-upload-button{display:none}.file-caption-main{width:100%}.file-input-ajax-new .no-browse .input-group-btn,.file-input-new .no-browse .input-group-btn{display:none}.file-input-ajax-new .no-browse .form-control,.file-input-new .no-browse .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.file-thumb-loading{background:transparent url('../img/loading.gif') no-repeat scroll center center content-box!important}.file-actions{margin-top:15px}.file-footer-buttons{float:right}.file-upload-indicator{display:inline;cursor:default;opacity:.8;width:60%}.file-upload-indicator:hover{font-weight:bold;opacity:1}.file-footer-caption{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:160px;text-align:center;padding-top:4px;font-size:11px;color:#777;margin:5px auto}.file-preview-error{opacity:.65;box-shadow:none}.file-preview-frame:not(.file-preview-error) .file-footer-caption:hover{color:#000}.file-drop-zone{border:1px dashed #aaa;border-radius:4px;height:100%;text-align:center;vertical-align:middle;margin:12px 15px 12px 12px;padding:5px}.file-drop-zone-title{color:#aaa;font-size:1.6em;padding:85px 10px;cursor:default}.file-preview .clickable,.clickable .file-drop-zone-title{cursor:pointer}.file-drop-zone.clickable:hover{border:2px dashed #999}.file-drop-zone.clickable:focus{border:2px solid #5acde2}.file-drop-zone .file-preview-thumbnails{cursor:default}.file-highlighted{border:2px dashed #999!important;background-color:#f0f0f0}.file-uploading{background:url('../img/loading-sm.gif') no-repeat center bottom 10px;opacity:.65}.file-thumb-progress{height:10px}.file-thumb-progress .progress,.file-thumb-progress .progress-bar{height:10px;font-size:9px;line-height:10px}.file-thumbnail-footer{position:relative}.file-thumb-progress{position:absolute;top:35px;left:0;right:0}.file-zoom-fullscreen.modal{position:fixed;top:0;right:0;bottom:0;left:0}.file-zoom-fullscreen .modal-dialog{position:fixed;margin:0;width:100%;height:100%;padding:0}.file-zoom-fullscreen .modal-content{border-radius:0;box-shadow:none}.file-zoom-fullscreen .modal-body{overflow-y:auto}.file-zoom-dialog .modal-body{position:relative!important}.file-zoom-dialog .btn-navigate{position:absolute;padding:0;margin:0;background:transparent;text-decoration:none;outline:0;opacity:.7;top:45%;font-size:4em;color:#1c94c4}.file-zoom-dialog .floating-buttons{position:absolute;top:5px;right:10px}.floating-buttons,.floating-buttons .btn{z-index:3000}.file-zoom-dialog .kv-zoom-actions .btn,.floating-buttons .btn{margin-left:3px}.file-zoom-dialog .btn-navigate:not([disabled]):hover,.file-zoom-dialog .btn-navigate:not([disabled]):focus{outline:0;box-shadow:none;opacity:.5}.file-zoom-dialog .btn-navigate[disabled]{opacity:.3}.file-zoom-dialog .btn-prev{left:1px}.file-zoom-dialog .btn-next{right:1px}.file-drag-handle{display:inline;margin-right:2px;font-size:16px;cursor:move;cursor:-webkit-grabbing}.file-drag-handle:hover{opacity:.7}.file-zoom-content{height:480px;text-align:center}.file-preview-initial.sortable-chosen{background-color:#d9edf7}.file-preview-frame.sortable-ghost{background-color:#eee}.btn-file ::-ms-browse{width:100%;height:100%} \ No newline at end of file diff --git a/rootfs/link/web/vendor/fileinput/img/loading-sm.gif b/rootfs/link/web/vendor/fileinput/img/loading-sm.gif new file mode 100644 index 0000000..44e3b7a Binary files /dev/null and b/rootfs/link/web/vendor/fileinput/img/loading-sm.gif differ diff --git a/rootfs/link/web/vendor/fileinput/img/loading.gif b/rootfs/link/web/vendor/fileinput/img/loading.gif new file mode 100644 index 0000000..0ea146c Binary files /dev/null and b/rootfs/link/web/vendor/fileinput/img/loading.gif differ diff --git a/rootfs/link/web/vendor/fileinput/js/fileinput.js b/rootfs/link/web/vendor/fileinput/js/fileinput.js new file mode 100644 index 0000000..63dc8ff --- /dev/null +++ b/rootfs/link/web/vendor/fileinput/js/fileinput.js @@ -0,0 +1,3399 @@ +/*! + * bootstrap-fileinput v4.3.6 + * http://plugins.krajee.com/file-input + * + * Author: Kartik Visweswaran + * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com + * + * Licensed under the BSD 3-Clause + * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md + */ +(function (factory) { + "use strict"; + //noinspection JSUnresolvedVariable + if (typeof define === 'function' && define.amd) { // jshint ignore:line + // AMD. Register as an anonymous module. + define(['jquery'], factory); // jshint ignore:line + } else { // noinspection JSUnresolvedVariable + if (typeof module === 'object' && module.exports) { // jshint ignore:line + // Node/CommonJS + // noinspection JSUnresolvedVariable + module.exports = factory(require('jquery')); // jshint ignore:line + } else { + // Browser globals + factory(window.jQuery); + } + } +}(function ($) { + "use strict"; + + $.fn.fileinputLocales = {}; + $.fn.fileinputThemes = {}; + + var NAMESPACE, MODAL_ID, STYLE_SETTING, OBJECT_PARAMS, DEFAULT_PREVIEW, objUrl, compare, isIE, handler, + previewCache, getNum, hasFileAPISupport, hasDragDropSupport, hasFileUploadSupport, addCss, tMain1, tMain2, + tPreview, tFileIcon, tClose, tCaption, tBtnDefault, tBtnLink, tBtnBrowse, tModalMain, tModal, tProgress, tSize, + tFooter, tActions, tActionDelete, tActionUpload, tActionZoom, tActionDrag, tTagBef, tTagBef1, tTagBef2, tTagAft, + tGeneric, tHtml, tImage, tText, tVideo, tAudio, tFlash, tObject, tPdf, tOther, defaultFileActionSettings, + defaultLayoutTemplates, defaultPreviewTemplates, defaultPreviewZoomSettings, defaultPreviewTypes, getElement, + defaultPreviewSettings, defaultFileTypeSettings, isEmpty, isArray, ifSet, uniqId, htmlEncode, replaceTags, + cleanMemory, findFileName, checkFullScreen, toggleFullScreen, moveArray, FileInput; + + NAMESPACE = '.fileinput'; + MODAL_ID = 'kvFileinputModal'; + STYLE_SETTING = 'style="width:{width};height:{height};"'; + OBJECT_PARAMS = '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n'; + DEFAULT_PREVIEW = '
\n' + + '{previewFileIcon}\n' + + '
'; + //noinspection JSUnresolvedVariable + objUrl = window.URL || window.webkitURL; + compare = function (input, str, exact) { + return input !== undefined && (exact ? input === str : input.match(str)); + }; + isIE = function (ver) { + // check for IE versions < 11 + if (navigator.appName !== 'Microsoft Internet Explorer') { + return false; + } + if (ver === 10) { + return new RegExp('msie\\s' + ver, 'i').test(navigator.userAgent); + } + var div = document.createElement("div"), status; + div.innerHTML = ""; + status = div.getElementsByTagName("i").length; + document.body.appendChild(div); + div.parentNode.removeChild(div); + return status; + }; + handler = function ($el, event, callback, skipNS) { + var ev = skipNS ? event : event.split(' ').join(NAMESPACE + ' ') + NAMESPACE; + $el.off(ev).on(ev, callback); + }; + previewCache = { + data: {}, + init: function (obj) { + var content = obj.initialPreview, id = obj.id; + if (content.length > 0 && !isArray(content)) { + content = content.split(obj.initialPreviewDelimiter); + } + previewCache.data[id] = { + content: content, + config: obj.initialPreviewConfig, + tags: obj.initialPreviewThumbTags, + delimiter: obj.initialPreviewDelimiter, + previewFileType: obj.initialPreviewFileType, + previewAsData: obj.initialPreviewAsData, + template: obj.previewGenericTemplate, + showZoom: obj.fileActionSettings.showZoom, + showDrag: obj.fileActionSettings.showDrag, + getSize: function (size) { + return obj._getSize(size); + }, + parseTemplate: function (cat, data, fname, ftype, pId, ftr, ind) { + var fc = ' file-preview-initial'; + return obj._generatePreviewTemplate(cat, data, fname, ftype, pId, false, null, fc, ftr, ind); + }, + msg: function (n) { + return obj._getMsgSelected(n); + }, + initId: obj.previewInitId, + footer: obj._getLayoutTemplate('footer').replace(/\{progress}/g, obj._renderThumbProgress()), + isDelete: obj.initialPreviewShowDelete, + caption: obj.initialCaption, + actions: function (showUpload, showDelete, showZoom, showDrag, disabled, url, key) { + return obj._renderFileActions(showUpload, showDelete, showZoom, showDrag, disabled, url, key, true); + } + }; + }, + fetch: function (id) { + return previewCache.data[id].content.filter(function (n) { + return n !== null; + }); + }, + count: function (id, all) { + return !!previewCache.data[id] && !!previewCache.data[id].content ? + (all ? previewCache.data[id].content.length : previewCache.fetch(id).length) : 0; + }, + get: function (id, i, isDisabled) { + var ind = 'init_' + i, data = previewCache.data[id], config = data.config[i], content = data.content[i], + previewId = data.initId + '-' + ind, out, $tmp, frameClass = ' file-preview-initial', cat, cap, ftr, + ftype, asData = ifSet('previewAsData', config, data.previewAsData); + isDisabled = isDisabled === undefined ? true : isDisabled; + /** @namespace config.frameAttr */ + /** @namespace config.frameClass */ + /** @namespace config.filetype */ + if (!content) { + return ''; + } + if (config && config.frameClass) { + frameClass += ' ' + config.frameClass; + } + if (asData) { + cat = data.previewAsData ? ifSet('type', config, data.previewFileType || 'generic') : 'generic'; + cap = ifSet('caption', config); + ftr = previewCache.footer(id, i, isDisabled, (config && config.size || null)); + ftype = ifSet('filetype', config, cat); + out = data.parseTemplate(cat, content, cap, ftype, previewId, ftr, ind, null); + } else { + out = data.template + .replace(/\{previewId}/g, previewId).replace(/\{frameClass}/g, frameClass) + .replace(/\{fileindex}/g, ind).replace(/\{content}/g, data.content[i]) + .replace(/\{template}/g, ifSet('type', config, data.previewFileType)) + .replace(/\{footer}/g, previewCache.footer(id, i, isDisabled, (config && config.size || null))); + } + if (data.tags.length && data.tags[i]) { + out = replaceTags(out, data.tags[i]); + } + if (!isEmpty(config) && !isEmpty(config.frameAttr)) { + $tmp = $(document.createElement('div')).html(out); + $tmp.find('.file-preview-initial').attr(config.frameAttr); + out = $tmp.html(); + $tmp.remove(); + } + return out; + }, + add: function (id, content, config, tags, append) { + var data = $.extend(true, {}, previewCache.data[id]), index; + if (!isArray(content)) { + content = content.split(data.delimiter); + } + if (append) { + index = data.content.push(content) - 1; + data.config[index] = config; + data.tags[index] = tags; + } else { + index = content.length - 1; + data.content = content; + data.config = config; + data.tags = tags; + } + previewCache.data[id] = data; + return index; + }, + set: function (id, content, config, tags, append) { + var data = $.extend(true, {}, previewCache.data[id]), i, chk; + if (!content || !content.length) { + return; + } + if (!isArray(content)) { + content = content.split(data.delimiter); + } + chk = content.filter(function (n) { + return n !== null; + }); + if (!chk.length) { + return; + } + if (data.content === undefined) { + data.content = []; + } + if (data.config === undefined) { + data.config = []; + } + if (data.tags === undefined) { + data.tags = []; + } + if (append) { + for (i = 0; i < content.length; i++) { + if (content[i]) { + data.content.push(content[i]); + } + } + for (i = 0; i < config.length; i++) { + if (config[i]) { + data.config.push(config[i]); + } + } + for (i = 0; i < tags.length; i++) { + if (tags[i]) { + data.tags.push(tags[i]); + } + } + } else { + data.content = content; + data.config = config; + data.tags = tags; + } + previewCache.data[id] = data; + }, + unset: function (obj, index) { + var chk = previewCache.count(obj.id); + if (!chk) { + return; + } + if (chk === 1) { + previewCache.data[obj.id].content = []; + previewCache.data[obj.id].config = []; + previewCache.data[obj.id].tags = []; + obj.initialPreview = []; + obj.initialPreviewConfig = []; + obj.initialPreviewThumbTags = []; + return; + } + + previewCache.data[obj.id].content[index] = null; + previewCache.data[obj.id].config[index] = null; + previewCache.data[obj.id].tags[index] = null; + }, + out: function (id) { + var html = '', data = previewCache.data[id], caption, len = previewCache.count(id, true); + if (len === 0) { + return {content: '', caption: ''}; + } + for (var i = 0; i < len; i++) { + html += previewCache.get(id, i); + } + caption = data.msg(previewCache.count(id)); + return {content: '
' + html + '
', caption: caption}; + }, + footer: function (id, i, isDisabled, size) { + var data = previewCache.data[id]; + isDisabled = isDisabled === undefined ? true : isDisabled; + if (data.config.length === 0 || isEmpty(data.config[i])) { + return ''; + } + var config = data.config[i], caption = ifSet('caption', config), width = ifSet('width', config, 'auto'), + url = ifSet('url', config, false), key = ifSet('key', config, null), + showDel = ifSet('showDelete', config, true), showZoom = ifSet('showZoom', config, data.showZoom), + showDrag = ifSet('showDrag', config, data.showDrag), disabled = (url === false) && isDisabled, + actions = data.isDelete ? data.actions(false, showDel, showZoom, showDrag, disabled, url, key) : '', + footer = data.footer.replace(/\{actions}/g, actions); + return footer.replace(/\{caption}/g, caption).replace(/\{size}/g, data.getSize(size)) + .replace(/\{width}/g, width).replace(/\{indicator}/g, '').replace(/\{indicatorTitle}/g, ''); + } + }; + getNum = function (num, def) { + def = def || 0; + if (typeof num === "number") { + return num; + } + if (typeof num === "string") { + num = parseFloat(num); + } + return isNaN(num) ? def : num; + }; + hasFileAPISupport = function () { + return !!(window.File && window.FileReader); + }; + hasDragDropSupport = function () { + var div = document.createElement('div'); + /** @namespace div.draggable */ + /** @namespace div.ondragstart */ + /** @namespace div.ondrop */ + return !isIE(9) && (div.draggable !== undefined || (div.ondragstart !== undefined && div.ondrop !== undefined)); + }; + hasFileUploadSupport = function () { + return hasFileAPISupport() && window.FormData; + }; + addCss = function ($el, css) { + $el.removeClass(css).addClass(css); + }; + defaultFileActionSettings = { + showRemove: true, + showUpload: true, + showZoom: true, + showDrag: true, + removeIcon: '', + removeClass: 'btn btn-xs btn-default', + removeTitle: 'Remove file', + uploadIcon: '', + uploadClass: 'btn btn-xs btn-default', + uploadTitle: 'Upload file', + zoomIcon: '', + zoomClass: 'btn btn-xs btn-default', + zoomTitle: 'View Details', + dragIcon: '', + dragClass: 'text-info', + dragTitle: 'Move / Rearrange', + dragSettings: {}, + indicatorNew: '', + indicatorSuccess: '', + indicatorError: '', + indicatorLoading: '', + indicatorNewTitle: 'Not uploaded yet', + indicatorSuccessTitle: 'Uploaded', + indicatorErrorTitle: 'Upload Error', + indicatorLoadingTitle: 'Uploading ...' + }; + tMain1 = '{preview}\n' + + '
\n' + + '
\n' + + ' {caption}\n' + + '
\n' + + ' {remove}\n' + + ' {cancel}\n' + + ' {upload}\n' + + ' {browse}\n' + + '
\n' + + '
'; + tMain2 = '{preview}\n
\n{remove}\n{cancel}\n{upload}\n{browse}\n'; + tPreview = '
\n' + + ' {close}' + + '
\n' + + '
\n' + + '
\n' + + '
' + + '
\n' + + '
\n' + + '
\n' + + '
'; + tClose = '
×
\n'; + tFileIcon = ''; + tCaption = '
\n' + + '
\n' + + '
\n'; + //noinspection HtmlUnknownAttribute + tBtnDefault = ''; + //noinspection HtmlUnknownAttribute + tBtnLink = '{icon} {label}'; + //noinspection HtmlUnknownAttribute + tBtnBrowse = '
{icon} {label}
'; + tModalMain = ''; + tModal = '\n'; + tProgress = '
\n' + + '
\n' + + ' {percent}%\n' + + '
\n' + + '
'; + tSize = '
({sizeText})'; + tFooter = ''; + tActions = '
\n' + + ' \n' + + ' {drag}\n' + + '
{indicator}
\n' + + '
\n' + + '
'; + //noinspection HtmlUnknownAttribute + tActionDelete = '\n'; + tActionUpload = ''; + tActionZoom = ''; + tActionDrag = '{dragIcon}'; + tTagBef = '
\n'; + tTagBef2 = tTagBef + ' title="{caption}" ' + STYLE_SETTING + '>
\n'; + tTagAft = '
{footer}\n
\n'; + tGeneric = '{content}\n'; + tHtml = '
{data}
\n'; + tImage = '{caption}\n'; + tText = '\n'; + tVideo = '\n'; + tAudio = '\n'; + tFlash = '\n' + OBJECT_PARAMS + ' ' + DEFAULT_PREVIEW + '\n\n'; + tObject = '\n' + + '\n' + OBJECT_PARAMS + ' ' + DEFAULT_PREVIEW + '\n\n'; + tPdf = '\n'; + tOther = '
\n' + DEFAULT_PREVIEW + '\n
\n'; + defaultLayoutTemplates = { + main1: tMain1, + main2: tMain2, + preview: tPreview, + close: tClose, + fileIcon: tFileIcon, + caption: tCaption, + modalMain: tModalMain, + modal: tModal, + progress: tProgress, + size: tSize, + footer: tFooter, + actions: tActions, + actionDelete: tActionDelete, + actionUpload: tActionUpload, + actionZoom: tActionZoom, + actionDrag: tActionDrag, + btnDefault: tBtnDefault, + btnLink: tBtnLink, + btnBrowse: tBtnBrowse + }; + defaultPreviewTemplates = { + generic: tTagBef1 + tGeneric + tTagAft, + html: tTagBef1 + tHtml + tTagAft, + image: tTagBef1 + tImage + tTagAft, + text: tTagBef1 + tText + tTagAft, + video: tTagBef2 + tVideo + tTagAft, + audio: tTagBef2 + tAudio + tTagAft, + flash: tTagBef2 + tFlash + tTagAft, + object: tTagBef2 + tObject + tTagAft, + pdf: tTagBef2 + tPdf + tTagAft, + other: tTagBef2 + tOther + tTagAft + }; + defaultPreviewTypes = ['image', 'html', 'text', 'video', 'audio', 'flash', 'pdf', 'object']; + defaultPreviewSettings = { + image: {width: "auto", height: "160px"}, + html: {width: "213px", height: "160px"}, + text: {width: "213px", height: "160px"}, + video: {width: "213px", height: "160px"}, + audio: {width: "213px", height: "80px"}, + flash: {width: "213px", height: "160px"}, + object: {width: "160px", height: "160px"}, + pdf: {width: "160px", height: "160px"}, + other: {width: "160px", height: "160px"} + }; + defaultPreviewZoomSettings = { + image: {width: "auto", height: "auto", 'max-width': "100%",'max-height': "100%"}, + html: {width: "100%", height: "100%", 'min-height': "480px"}, + text: {width: "100%", height: "100%", 'min-height': "480px"}, + video: {width: "auto", height: "100%", 'max-width': "100%"}, + audio: {width: "100%", height: "30px"}, + flash: {width: "auto", height: "480px"}, + object: {width: "auto", height: "100%", 'min-height': "480px"}, + pdf: {width: "100%", height: "100%", 'min-height': "480px"}, + other: {width: "auto", height: "100%", 'min-height': "480px"} + }; + defaultFileTypeSettings = { + image: function (vType, vName) { + return compare(vType, 'image.*') || compare(vName, /\.(gif|png|jpe?g)$/i); + }, + html: function (vType, vName) { + return compare(vType, 'text/html') || compare(vName, /\.(htm|html)$/i); + }, + text: function (vType, vName) { + return compare(vType, 'text.*') || compare(vName, /\.(xml|javascript)$/i) || + compare(vName, /\.(txt|md|csv|nfo|ini|json|php|js|css)$/i); + }, + video: function (vType, vName) { + return compare(vType, 'video.*') && (compare(vType, /(ogg|mp4|mp?g|mov|webm|3gp)$/i) || + compare(vName, /\.(og?|mp4|webm|mp?g|mov|3gp)$/i)); + }, + audio: function (vType, vName) { + return compare(vType, 'audio.*') && (compare(vName, /(ogg|mp3|mp?g|wav)$/i) || + compare(vName, /\.(og?|mp3|mp?g|wav)$/i)); + }, + flash: function (vType, vName) { + return compare(vType, 'application/x-shockwave-flash', true) || compare(vName, /\.(swf)$/i); + }, + pdf: function (vType, vName) { + return compare(vType, 'application/pdf', true) || compare(vName, /\.(pdf)$/i); + }, + object: function () { + return true; + }, + other: function () { + return true; + } + }; + isEmpty = function (value, trim) { + return value === undefined || value === null || value.length === 0 || (trim && $.trim(value) === ''); + }; + isArray = function (a) { + return Array.isArray(a) || Object.prototype.toString.call(a) === '[object Array]'; + }; + ifSet = function (needle, haystack, def) { + def = def || ''; + return (haystack && typeof haystack === 'object' && needle in haystack) ? haystack[needle] : def; + }; + getElement = function (options, param, value) { + return (isEmpty(options) || isEmpty(options[param])) ? value : $(options[param]); + }; + uniqId = function () { + return Math.round(new Date().getTime() + (Math.random() * 100)); + }; + htmlEncode = function (str) { + return str.replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }; + replaceTags = function (str, tags) { + var out = str; + if (!tags) { + return out; + } + $.each(tags, function (key, value) { + if (typeof value === "function") { + value = value(); + } + out = out.split(key).join(value); + }); + return out; + }; + cleanMemory = function ($thumb) { + var data = $thumb.is('img') ? $thumb.attr('src') : $thumb.find('source').attr('src'); + /** @namespace objUrl.revokeObjectURL */ + objUrl.revokeObjectURL(data); + }; + findFileName = function (filePath) { + var sepIndex = filePath.lastIndexOf('/'); + if (sepIndex === -1) { + sepIndex = filePath.lastIndexOf('\\'); + } + return filePath.split(filePath.substring(sepIndex, sepIndex + 1)).pop(); + }; + checkFullScreen = function () { + //noinspection JSUnresolvedVariable + return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || + document.msFullscreenElement; + }; + toggleFullScreen = function (maximize) { + if (maximize && !checkFullScreen()) { + /** @namespace document.documentElement.requestFullscreen */ + /** @namespace document.documentElement.msRequestFullscreen */ + /** @namespace document.documentElement.mozRequestFullScreen */ + /** @namespace document.documentElement.webkitRequestFullscreen */ + /** @namespace Element.ALLOW_KEYBOARD_INPUT */ + if (document.documentElement.requestFullscreen) { + document.documentElement.requestFullscreen(); + } else if (document.documentElement.msRequestFullscreen) { + document.documentElement.msRequestFullscreen(); + } else if (document.documentElement.mozRequestFullScreen) { + document.documentElement.mozRequestFullScreen(); + } else if (document.documentElement.webkitRequestFullscreen) { + document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } + } else { + /** @namespace document.exitFullscreen */ + /** @namespace document.msExitFullscreen */ + /** @namespace document.mozCancelFullScreen */ + /** @namespace document.webkitExitFullscreen */ + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } + } + }; + moveArray = function (arr, oldIndex, newIndex) { + if (newIndex >= arr.length) { + var k = newIndex - arr.length; + while ((k--) + 1) { + arr.push(undefined); + } + } + arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]); + return arr; + }; + FileInput = function (element, options) { + var self = this; + self.$element = $(element); + if (!self._validate()) { + return; + } + self.isPreviewable = hasFileAPISupport(); + self.isIE9 = isIE(9); + self.isIE10 = isIE(10); + if (self.isPreviewable || self.isIE9) { + self._init(options); + self._listen(); + } else { + self.$element.removeClass('file-loading'); + } + }; + FileInput.prototype = { + constructor: FileInput, + _init: function (options) { + var self = this, $el = self.$element, t; + $.each(options, function (key, value) { + switch (key) { + case 'minFileCount': + case 'maxFileCount': + case 'maxFileSize': + self[key] = getNum(value); + break; + default: + self[key] = value; + break; + } + }); + self.fileInputCleared = false; + self.fileBatchCompleted = true; + if (!self.isPreviewable) { + self.showPreview = false; + } + self.uploadFileAttr = !isEmpty($el.attr('name')) ? $el.attr('name') : 'file_data'; + self.reader = null; + self.formdata = {}; + self.clearStack(); + self.uploadCount = 0; + self.uploadStatus = {}; + self.uploadLog = []; + self.uploadAsyncCount = 0; + self.loadedImages = []; + self.totalImagesCount = 0; + self.ajaxRequests = []; + self.isError = false; + self.ajaxAborted = false; + self.cancelling = false; + t = self._getLayoutTemplate('progress'); + self.progressTemplate = t.replace('{class}', self.progressClass); + self.progressCompleteTemplate = t.replace('{class}', self.progressCompleteClass); + self.progressErrorTemplate = t.replace('{class}', self.progressErrorClass); + self.dropZoneEnabled = hasDragDropSupport() && self.dropZoneEnabled; + self.isDisabled = self.$element.attr('disabled') || self.$element.attr('readonly'); + self.isUploadable = hasFileUploadSupport() && !isEmpty(self.uploadUrl); + self.isClickable = self.browseOnZoneClick && self.showPreview && + (self.isUploadable && self.dropZoneEnabled || !isEmpty(self.defaultPreviewContent)); + self.slug = typeof options.slugCallback === "function" ? options.slugCallback : self._slugDefault; + self.mainTemplate = self.showCaption ? self._getLayoutTemplate('main1') : self._getLayoutTemplate('main2'); + self.captionTemplate = self._getLayoutTemplate('caption'); + self.previewGenericTemplate = self._getPreviewTemplate('generic'); + if (self.resizeImage && (self.maxImageWidth || self.maxImageHeight)) { + self.imageCanvas = document.createElement('canvas'); + self.imageCanvasContext = self.imageCanvas.getContext('2d'); + } + if (isEmpty(self.$element.attr('id'))) { + self.$element.attr('id', uniqId()); + } + if (self.$container === undefined) { + self.$container = self._createContainer(); + } else { + self._refreshContainer(); + } + self.$dropZone = self.$container.find('.file-drop-zone'); + self.$progress = self.$container.find('.kv-upload-progress'); + self.$btnUpload = self.$container.find('.fileinput-upload'); + self.$captionContainer = getElement(options, 'elCaptionContainer', self.$container.find('.file-caption')); + self.$caption = getElement(options, 'elCaptionText', self.$container.find('.file-caption-name')); + self.$previewContainer = getElement(options, 'elPreviewContainer', self.$container.find('.file-preview')); + self.$preview = getElement(options, 'elPreviewImage', self.$container.find('.file-preview-thumbnails')); + self.$previewStatus = getElement(options, 'elPreviewStatus', self.$container.find('.file-preview-status')); + self.$errorContainer = getElement(options, 'elErrorContainer', + self.$previewContainer.find('.kv-fileinput-error')); + if (!isEmpty(self.msgErrorClass)) { + addCss(self.$errorContainer, self.msgErrorClass); + } + self.$errorContainer.hide(); + self.fileActionSettings = $.extend(true, defaultFileActionSettings, options.fileActionSettings); + self.previewInitId = "preview-" + uniqId(); + self.id = self.$element.attr('id'); + previewCache.init(self); + self._initPreview(true); + self._initPreviewActions(); + self.options = options; + self._setFileDropZoneTitle(); + self.$element.removeClass('file-loading'); + if (self.$element.attr('disabled')) { + self.disable(); + } + self._initZoom(); + }, + _validate: function () { + var self = this, $exception; + if (self.$element.attr('type') === 'file') { + return true; + } + $exception = '
' + + '

Invalid Input Type

' + + 'You must set an input type = file for bootstrap-fileinput plugin to initialize.' + + '
'; + self.$element.after($exception); + return false; + }, + _errorsExist: function () { + var self = this, $err; + if (self.$errorContainer.find('li').length) { + return true; + } + $err = $(document.createElement('div')).html(self.$errorContainer.html()); + $err.find('span.kv-error-close').remove(); + $err.find('ul').remove(); + return $.trim($err.text()).length ? true : false; + }, + _errorHandler: function (evt, caption) { + var self = this, err = evt.target.error; + /** @namespace err.NOT_FOUND_ERR */ + /** @namespace err.SECURITY_ERR */ + /** @namespace err.NOT_READABLE_ERR */ + if (err.code === err.NOT_FOUND_ERR) { + self._showError(self.msgFileNotFound.replace('{name}', caption)); + } else if (err.code === err.SECURITY_ERR) { + self._showError(self.msgFileSecured.replace('{name}', caption)); + } else if (err.code === err.NOT_READABLE_ERR) { + self._showError(self.msgFileNotReadable.replace('{name}', caption)); + } else if (err.code === err.ABORT_ERR) { + self._showError(self.msgFilePreviewAborted.replace('{name}', caption)); + } else { + self._showError(self.msgFilePreviewError.replace('{name}', caption)); + } + }, + _addError: function (msg) { + var self = this, $error = self.$errorContainer; + if (msg && $error.length) { + $error.html(self.errorCloseButton + msg); + handler($error.find('.kv-error-close'), 'click', function () { + $error.fadeOut('slow'); + }); + } + }, + _resetErrors: function (fade) { + var self = this, $error = self.$errorContainer; + self.isError = false; + self.$container.removeClass('has-error'); + $error.html(''); + if (fade) { + $error.fadeOut('slow'); + } else { + $error.hide(); + } + }, + _showFolderError: function (folders) { + var self = this, $error = self.$errorContainer, msg; + if (!folders) { + return; + } + msg = self.msgFoldersNotAllowed.replace(/\{n}/g, folders); + self._addError(msg); + addCss(self.$container, 'has-error'); + $error.fadeIn(800); + self._raise('filefoldererror', [folders, msg]); + }, + _showUploadError: function (msg, params, event) { + var self = this, $error = self.$errorContainer, ev = event || 'fileuploaderror', e = params && params.id ? + '
  • ' + msg + '
  • ' : '
  • ' + msg + '
  • '; + if ($error.find('ul').length === 0) { + self._addError('
      ' + e + '
    '); + } else { + $error.find('ul').append(e); + } + $error.fadeIn(800); + self._raise(ev, [params, msg]); + self.$container.removeClass('file-input-new'); + addCss(self.$container, 'has-error'); + return true; + }, + _showError: function (msg, params, event) { + var self = this, $error = self.$errorContainer, ev = event || 'fileerror'; + params = params || {}; + params.reader = self.reader; + self._addError(msg); + $error.fadeIn(800); + self._raise(ev, [params, msg]); + if (!self.isUploadable) { + self._clearFileInput(); + } + self.$container.removeClass('file-input-new'); + addCss(self.$container, 'has-error'); + self.$btnUpload.attr('disabled', true); + return true; + }, + _noFilesError: function (params) { + var self = this, label = self.minFileCount > 1 ? self.filePlural : self.fileSingle, + msg = self.msgFilesTooLess.replace('{n}', self.minFileCount).replace('{files}', label), + $error = self.$errorContainer; + self._addError(msg); + self.isError = true; + self._updateFileDetails(0); + $error.fadeIn(800); + self._raise('fileerror', [params, msg]); + self._clearFileInput(); + addCss(self.$container, 'has-error'); + }, + _parseError: function (jqXHR, errorThrown, fileName) { + /** @namespace jqXHR.responseJSON */ + var self = this, errMsg = $.trim(errorThrown + ''), + dot = errMsg.slice(-1) === '.' ? '' : '.', + text = jqXHR.responseJSON !== undefined && jqXHR.responseJSON.error !== undefined ? + jqXHR.responseJSON.error : jqXHR.responseText; + if (self.cancelling && self.msgUploadAborted) { + errMsg = self.msgUploadAborted; + } + if (self.showAjaxErrorDetails && text) { + text = $.trim(text.replace(/\n\s*\n/g, '\n')); + text = text.length > 0 ? '
    ' + text + '
    ' : ''; + errMsg += dot + text; + } else { + errMsg += dot; + } + self.cancelling = false; + return fileName ? '' + fileName + ': ' + errMsg : errMsg; + }, + _parseFileType: function (file) { + var self = this, isValid, vType, cat, i; + for (i = 0; i < defaultPreviewTypes.length; i += 1) { + cat = defaultPreviewTypes[i]; + isValid = ifSet(cat, self.fileTypeSettings, defaultFileTypeSettings[cat]); + vType = isValid(file.type, file.name) ? cat : ''; + if (!isEmpty(vType)) { + return vType; + } + } + return 'other'; + }, + _parseFilePreviewIcon: function (content, fname) { + var self = this, proceed, ext, icn = self.previewFileIcon; + if (fname && fname.indexOf('.') > -1) { + ext = fname.split('.').pop(); + if (self.previewFileIconSettings && self.previewFileIconSettings[ext]) { + icn = self.previewFileIconSettings[ext]; + } + if (self.previewFileExtSettings) { + $.each(self.previewFileExtSettings, function (key, func) { + if (self.previewFileIconSettings[key] && func(ext)) { + icn = self.previewFileIconSettings[key]; + return; + } + proceed = true; + }); + } + } + if (content.indexOf('{previewFileIcon}') > -1) { + return content.replace(/\{previewFileIconClass}/g, self.previewFileIconClass).replace( + /\{previewFileIcon}/g, icn); + } + return content; + }, + _raise: function (event, params) { + var self = this, e = $.Event(event); + if (params !== undefined) { + self.$element.trigger(e, params); + } else { + self.$element.trigger(e); + } + if (e.isDefaultPrevented()) { + return false; + } + if (!e.result) { + return e.result; + } + switch (event) { + // ignore these events + case 'filebatchuploadcomplete': + case 'filebatchuploadsuccess': + case 'fileuploaded': + case 'fileclear': + case 'filecleared': + case 'filereset': + case 'fileerror': + case 'filefoldererror': + case 'fileuploaderror': + case 'filebatchuploaderror': + case 'filedeleteerror': + case 'filecustomerror': + case 'filesuccessremove': + break; + // receive data response via `filecustomerror` event` + default: + self.ajaxAborted = e.result; + break; + } + return true; + }, + _listenFullScreen: function (isFullScreen) { + var self = this, $modal = self.$modal, $btnFull, $btnBord; + if (!$modal || !$modal.length) { + return; + } + $btnFull = $modal && $modal.find('.btn-fullscreen'); + $btnBord = $modal && $modal.find('.btn-borderless'); + if (!$btnFull.length || !$btnBord.length) { + return; + } + $btnFull.removeClass('active').attr('aria-pressed', 'false'); + $btnBord.removeClass('active').attr('aria-pressed', 'false'); + if (isFullScreen) { + $btnFull.addClass('active').attr('aria-pressed', 'true'); + } else { + $btnBord.addClass('active').attr('aria-pressed', 'true'); + } + if ($modal.hasClass('file-zoom-fullscreen')) { + self._maximizeZoomDialog(); + } else { + if (isFullScreen) { + self._maximizeZoomDialog(); + } else { + $btnBord.removeClass('active').attr('aria-pressed', 'false'); + } + } + }, + _listen: function () { + var self = this, $el = self.$element, $form = $el.closest('form'), $cont = self.$container; + handler($el, 'change', $.proxy(self._change, self)); + if (self.showBrowse) { + handler(self.$btnFile, 'click', $.proxy(self._browse, self)); + } + handler($form, 'reset', $.proxy(self.reset, self)); + handler($cont.find('.fileinput-remove:not([disabled])'), 'click', $.proxy(self.clear, self)); + handler($cont.find('.fileinput-cancel'), 'click', $.proxy(self.cancel, self)); + self._initDragDrop(); + if (!self.isUploadable) { + handler($form, 'submit', $.proxy(self._submitForm, self)); + } + handler(self.$container.find('.fileinput-upload'), 'click', $.proxy(self._uploadClick, self)); + handler($(window), 'resize', function () { + self._listenFullScreen(screen.width === window.innerWidth && screen.height === window.innerHeight); + }); + handler($(document), 'webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange', + function () { + self._listenFullScreen(checkFullScreen()); + }); + self._initClickable(); + }, + _initClickable: function () { + var self = this, $zone; + if (!self.isClickable) { + return; + } + $zone = self.isUploadable ? self.$dropZone : self.$preview.find('.file-default-preview'); + addCss($zone, 'clickable'); + $zone.attr('tabindex', -1); + handler($zone, 'click', function (e) { + var $target = $(e.target); + if (!$target.parents('.file-preview-thumbnails').length || $target.parents( + '.file-default-preview').length) { + self.$element.trigger('click'); + $zone.blur(); + } + }); + }, + _initDragDrop: function () { + var self = this, $zone = self.$dropZone; + if (self.isUploadable && self.dropZoneEnabled && self.showPreview) { + handler($zone, 'dragenter dragover', $.proxy(self._zoneDragEnter, self)); + handler($zone, 'dragleave', $.proxy(self._zoneDragLeave, self)); + handler($zone, 'drop', $.proxy(self._zoneDrop, self)); + handler($(document), 'dragenter dragover drop', self._zoneDragDropInit); + } + }, + _zoneDragDropInit: function (e) { + e.stopPropagation(); + e.preventDefault(); + }, + _zoneDragEnter: function (e) { + var self = this, hasFiles = $.inArray('Files', e.originalEvent.dataTransfer.types) > -1; + self._zoneDragDropInit(e); + if (self.isDisabled || !hasFiles) { + e.originalEvent.dataTransfer.effectAllowed = 'none'; + e.originalEvent.dataTransfer.dropEffect = 'none'; + return; + } + addCss(self.$dropZone, 'file-highlighted'); + }, + _zoneDragLeave: function (e) { + var self = this; + self._zoneDragDropInit(e); + if (self.isDisabled) { + return; + } + self.$dropZone.removeClass('file-highlighted'); + }, + _zoneDrop: function (e) { + var self = this; + e.preventDefault(); + /** @namespace e.originalEvent.dataTransfer */ + if (self.isDisabled || isEmpty(e.originalEvent.dataTransfer.files)) { + return; + } + self._change(e, 'dragdrop'); + self.$dropZone.removeClass('file-highlighted'); + }, + _uploadClick: function (e) { + var self = this, $btn = self.$container.find('.fileinput-upload'), $form, + isEnabled = !$btn.hasClass('disabled') && isEmpty($btn.attr('disabled')); + if (e && e.isDefaultPrevented()) { + return; + } + if (!self.isUploadable) { + if (isEnabled && $btn.attr('type') !== 'submit') { + $form = $btn.closest('form'); + // downgrade to normal form submit if possible + if ($form.length) { + $form.trigger('submit'); + } + e.preventDefault(); + } + return; + } + e.preventDefault(); + if (isEnabled) { + self.upload(); + } + }, + _submitForm: function () { + var self = this, $el = self.$element, files = $el.get(0).files; + if (files && self.minFileCount > 0 && self._getFileCount(files.length) < self.minFileCount) { + self._noFilesError({}); + return false; + } + return !self._abort({}); + }, + _clearPreview: function () { + var self = this, $thumbs = !self.showUploadedThumbs ? self.$preview.find('.file-preview-frame') : + self.$preview.find('.file-preview-frame:not(.file-preview-success)'); + $thumbs.remove(); + if (!self.$preview.find('.file-preview-frame').length || !self.showPreview) { + self._resetUpload(); + } + self._validateDefaultPreview(); + }, + _initSortable: function () { + var self = this, $preview = self.$preview, $el, settings; + if (!window.KvSortable) { + return; + } + $el = $preview.find('.file-initial-thumbs'); + //noinspection JSUnusedGlobalSymbols + settings = { + handle: '.drag-handle-init', + dataIdAttr: 'data-preview-id', + draggable: '.file-preview-initial', + onSort: function (e) { + var oldIndex = e.oldIndex, newIndex = e.newIndex; + self.initialPreview = moveArray(self.initialPreview, oldIndex, newIndex); + self.initialPreviewConfig = moveArray(self.initialPreviewConfig, oldIndex, newIndex); + previewCache.init(self); + for(var i = 0; i < self.initialPreviewConfig.length; i++) { + if(self.initialPreviewConfig[i] !== null) { + var key = self.initialPreviewConfig[i].key; + var $frame = $(".kv-file-remove[data-key='" + key + "']"); + $frame = $frame.closest('.file-preview-frame'); + $frame.attr('data-fileindex', 'init_'+i); + $frame.data('fileindex', 'init_'+i); + } + } + self._raise('filesorted', { + previewId: $(e.item).attr('id'), + 'oldIndex': oldIndex, + 'newIndex': newIndex, + stack: self.initialPreviewConfig + }); + } + }; + if ($el.data('kvsortable')) { + $el.kvsortable('destroy'); + } + $.extend(true, settings, self.fileActionSettings.dragSettings); + $el.kvsortable(settings); + }, + _initPreview: function (isInit) { + var self = this, cap = self.initialCaption || '', out; + if (!previewCache.count(self.id)) { + self._clearPreview(); + if (isInit) { + self._setCaption(cap); + } else { + self._initCaption(); + } + return; + } + out = previewCache.out(self.id); + cap = isInit && self.initialCaption ? self.initialCaption : out.caption; + self.$preview.html(out.content); + self._setCaption(cap); + self._initSortable(); + if (!isEmpty(out.content)) { + self.$container.removeClass('file-input-new'); + } + }, + _getZoomButton: function (type) { + var self = this, label = self.previewZoomButtonIcons[type], css = self.previewZoomButtonClasses[type], + title = ' title="' + (self.previewZoomButtonTitles[type] || '') + '" ', + params = title + (type === 'close' ? ' data-dismiss="modal" aria-hidden="true"' : ''); + if (type === 'fullscreen' || type === 'borderless' || type === 'toggleheader') { + params += ' data-toggle="button" aria-pressed="false" autocomplete="off"'; + } + return ''; + }, + _getModalContent: function () { + var self = this; + return self._getLayoutTemplate('modal') + .replace(/\{heading}/g, self.msgZoomModalHeading) + .replace(/\{prev}/g, self._getZoomButton('prev')) + .replace(/\{next}/g, self._getZoomButton('next')) + .replace(/\{toggleheader}/g, self._getZoomButton('toggleheader')) + .replace(/\{fullscreen}/g, self._getZoomButton('fullscreen')) + .replace(/\{borderless}/g, self._getZoomButton('borderless')) + .replace(/\{close}/g, self._getZoomButton('close')); + }, + _listenModalEvent: function (event) { + var self = this, $modal = self.$modal, getParams = function (e) { + return { + sourceEvent: e, + previewId: $modal.data('previewId'), + modal: $modal + }; + }; + $modal.on(event + '.bs.modal', function (e) { + var $btnFull = $modal.find('.btn-fullscreen'), $btnBord = $modal.find('.btn-borderless'); + self._raise('filezoom' + event, getParams(e)); + if (event === 'shown') { + $btnBord.removeClass('active').attr('aria-pressed', 'false'); + $btnFull.removeClass('active').attr('aria-pressed', 'false'); + if ($modal.hasClass('file-zoom-fullscreen')) { + self._maximizeZoomDialog(); + if (checkFullScreen()) { + $btnFull.addClass('active').attr('aria-pressed', 'true'); + } else { + $btnBord.addClass('active').attr('aria-pressed', 'true'); + } + } + } + }); + }, + _initZoom: function () { + var self = this, $dialog, modalMain = self._getLayoutTemplate('modalMain'), modalId = '#' + MODAL_ID; + self.$modal = $(modalId); + if (!self.$modal || !self.$modal.length) { + $dialog = $(document.createElement('div')).html(modalMain).insertAfter(self.$container); + self.$modal = $('#' + MODAL_ID).insertBefore($dialog); + $dialog.remove(); + } + self.$modal.html(self._getModalContent()); + self._listenModalEvent('show'); + self._listenModalEvent('shown'); + self._listenModalEvent('hide'); + self._listenModalEvent('hidden'); + self._listenModalEvent('loaded'); + }, + _initZoomButtons: function () { + var self = this, previewId = self.$modal.data('previewId') || '', $first, $last, + frames = self.$preview.find('.file-preview-frame').toArray(), len = frames.length, + $prev = self.$modal.find('.btn-prev'), $next = self.$modal.find('.btn-next'); + + if (!len) { + return; + } + $first = $(frames[0]); + $last = $(frames[len - 1]); + $prev.removeAttr('disabled'); + $next.removeAttr('disabled'); + if ($first.length && $first.attr('id') === previewId) { + $prev.attr('disabled', true); + } + if ($last.length && $last.attr('id') === previewId) { + $next.attr('disabled', true); + } + }, + _maximizeZoomDialog: function () { + var self = this, $modal = self.$modal, $head = $modal.find('.modal-header:visible'), + $foot = $modal.find('.modal-footer:visible'), $body = $modal.find('.modal-body'), + h = $(window).height(), diff = 0; + $modal.addClass('file-zoom-fullscreen'); + if ($head && $head.length) { + h -= $head.outerHeight(true); + } + if ($foot && $foot.length) { + h -= $foot.outerHeight(true); + } + if ($body && $body.length) { + diff = $body.outerHeight(true) - $body.height(); + h -= diff; + } + $modal.find('.kv-zoom-body').height(h); + }, + _resizeZoomDialog: function (fullScreen) { + var self = this, $modal = self.$modal, $btnFull = $modal.find('.btn-fullscreen'), + $btnBord = $modal.find('.btn-borderless'); + if ($modal.hasClass('file-zoom-fullscreen')) { + toggleFullScreen(false); + if (!fullScreen) { + if (!$btnFull.hasClass('active')) { + $modal.removeClass('file-zoom-fullscreen'); + self.$modal.find('.kv-zoom-body').css('height', self.zoomModalHeight); + } else { + $btnFull.removeClass('active').attr('aria-pressed', 'false'); + } + } else { + if (!$btnFull.hasClass('active')) { + $modal.removeClass('file-zoom-fullscreen'); + self._resizeZoomDialog(true); + if ($btnBord.hasClass('active')) { + $btnBord.removeClass('active').attr('aria-pressed', 'false'); + } + } + } + } else { + if (!fullScreen) { + self._maximizeZoomDialog(); + return; + } + toggleFullScreen(true); + } + $modal.focus(); + }, + _setZoomContent: function ($preview, animate) { + var self = this, $content, tmplt, body, title, $body, $dataEl, config, previewId = $preview.attr('id'), + $modal = self.$modal, $prev = $modal.find('.btn-prev'), $next = $modal.find('.btn-next'), $tmp, + $btnFull = $modal.find('.btn-fullscreen'), $btnBord = $modal.find('.btn-borderless'), + $btnTogh = $modal.find('.btn-toggleheader'); + tmplt = $preview.data('template') || 'generic'; + $content = $preview.find('.kv-file-content'); + body = $content.length ? $content.html() : ''; + title = $preview.find('.file-footer-caption').text() || ''; + $modal.find('.kv-zoom-title').html(title); + $body = $modal.find('.kv-zoom-body'); + if (animate) { + $tmp = $body.clone().insertAfter($body); + $body.html(body).hide(); + $tmp.fadeOut('fast', function () { + $body.fadeIn('fast'); + $tmp.remove(); + }); + } else { + $body.html(body); + } + config = self.previewZoomSettings[tmplt]; + if (config) { + $dataEl = $body.find('.kv-preview-data'); + addCss($dataEl, 'file-zoom-detail'); + $.each(config, function (key, value) { + $dataEl.css(key, value); + if (($dataEl.attr('width') && key === 'width') || ($dataEl.attr('height') && key === 'height')) { + $dataEl.removeAttr(key); + } + }); + } + $modal.data('previewId', previewId); + handler($prev, 'click', function () { + self._zoomSlideShow('prev', previewId); + }); + handler($next, 'click', function () { + self._zoomSlideShow('next', previewId); + }); + handler($btnFull, 'click', function () { + self._resizeZoomDialog(true); + }); + handler($btnBord, 'click', function () { + self._resizeZoomDialog(false); + }); + handler($btnTogh, 'click', function () { + var $header = $modal.find('.modal-header'), $floatBar = $modal.find('.modal-body .floating-buttons'), + ht, $actions = $header.find('.kv-zoom-actions'), resize = function (height) { + var $body = self.$modal.find('.kv-zoom-body'), h = self.zoomModalHeight; + if ($modal.hasClass('file-zoom-fullscreen')) { + h = $body.outerHeight(true); + if (!height) { + h = h - $header.outerHeight(true); + } + } + $body.css('height', height ? h + height : h); + }; + if ($header.is(':visible')) { + ht = $header.outerHeight(true); + $header.slideUp('slow', function () { + $actions.find('.btn').appendTo($floatBar); + resize(ht); + }); + } else { + $floatBar.find('.btn').appendTo($actions); + $header.slideDown('slow', function () { + resize(); + }); + } + $modal.focus(); + }); + handler($modal, 'keydown', function (e) { + var key = e.which || e.keyCode; + if (key === 37 && !$prev.attr('disabled')) { + self._zoomSlideShow('prev', previewId); + } + if (key === 39 && !$next.attr('disabled')) { + self._zoomSlideShow('next', previewId); + } + }); + }, + _zoomPreview: function ($btn) { + var self = this, $preview; + if (!$btn.length) { + throw 'Cannot zoom to detailed preview!'; + } + self.$modal.html(self._getModalContent()); + $preview = $btn.closest('.file-preview-frame'); + self._setZoomContent($preview); + self.$modal.modal('show'); + self._initZoomButtons(); + }, + _zoomSlideShow: function (dir, previewId) { + var self = this, $btn = self.$modal.find('.kv-zoom-actions .btn-' + dir), $targFrame, i, + frames = self.$preview.find('.file-preview-frame').toArray(), len = frames.length, out; + if ($btn.attr('disabled')) { + return; + } + for (i = 0; i < len; i++) { + if ($(frames[i]).attr('id') === previewId) { + out = dir === 'prev' ? i - 1 : i + 1; + break; + } + } + if (out < 0 || out >= len || !frames[out]) { + return; + } + $targFrame = $(frames[out]); + if ($targFrame.length) { + self._setZoomContent($targFrame, true); + } + self._initZoomButtons(); + self._raise('filezoom' + dir, {'previewId': previewId, modal: self.$modal}); + }, + _initZoomButton: function () { + var self = this; + self.$preview.find('.kv-file-zoom').each(function () { + var $el = $(this); + handler($el, 'click', function () { + self._zoomPreview($el); + }); + }); + }, + _initPreviewActions: function () { + var self = this, deleteExtraData = self.deleteExtraData || {}, + resetProgress = function () { + var hasFiles = self.isUploadable ? previewCache.count(self.id) : self.$element.get(0).files.length; + if (self.$preview.find('.kv-file-remove').length === 0 && !hasFiles) { + self.reset(); + self.initialCaption = ''; + } + }; + self._initZoomButton(); + self.$preview.find('.kv-file-remove').each(function () { + var $el = $(this), vUrl = $el.data('url') || self.deleteUrl, vKey = $el.data('key'); + if (isEmpty(vUrl) || vKey === undefined) { + return; + } + var $frame = $el.closest('.file-preview-frame'), cache = previewCache.data[self.id], + settings, params, index = $frame.data('fileindex'), config, extraData; + index = parseInt(index.replace('init_', '')); + config = isEmpty(cache.config) && isEmpty(cache.config[index]) ? null : cache.config[index]; + extraData = isEmpty(config) || isEmpty(config.extra) ? deleteExtraData : config.extra; + if (typeof extraData === "function") { + extraData = extraData(); + } + params = {id: $el.attr('id'), key: vKey, extra: extraData}; + settings = $.extend(true, {}, { + url: vUrl, + type: 'POST', + dataType: 'json', + data: $.extend(true, {}, {key: vKey}, extraData), + beforeSend: function (jqXHR) { + self.ajaxAborted = false; + self._raise('filepredelete', [vKey, jqXHR, extraData]); + if (self.ajaxAborted) { + jqXHR.abort(); + } else { + addCss($frame, 'file-uploading'); + addCss($el, 'disabled'); + } + }, + success: function (data, textStatus, jqXHR) { + var n, cap; + if (isEmpty(data) || isEmpty(data.error)) { + previewCache.init(self); + index = parseInt(($frame.data('fileindex')).replace('init_', '')); + previewCache.unset(self, index); + n = previewCache.count(self.id); + cap = n > 0 ? self._getMsgSelected(n) : ''; + self._raise('filedeleted', [vKey, jqXHR, extraData]); + self._setCaption(cap); + } else { + params.jqXHR = jqXHR; + params.response = data; + self._showError(data.error, params, 'filedeleteerror'); + $frame.removeClass('file-uploading'); + $el.removeClass('disabled'); + resetProgress(); + return; + } + $frame.removeClass('file-uploading').addClass('file-deleted'); + $frame.fadeOut('slow', function () { + self._clearObjects($frame); + $frame.remove(); + resetProgress(); + if (!n && self.getFileStack().length === 0) { + self._setCaption(''); + self.reset(); + } + }); + }, + error: function (jqXHR, textStatus, errorThrown) { + var errMsg = self._parseError(jqXHR, errorThrown); + params.jqXHR = jqXHR; + params.response = {}; + self._showError(errMsg, params, 'filedeleteerror'); + $frame.removeClass('file-uploading'); + resetProgress(); + } + }, self.ajaxDeleteSettings); + handler($el, 'click', function () { + if (!self._validateMinCount()) { + return false; + } + $.ajax(settings); + }); + }); + }, + _clearObjects: function ($el) { + $el.find('video audio').each(function () { + this.pause(); + $(this).remove(); + }); + $el.find('img object div').each(function () { + $(this).remove(); + }); + }, + _clearFileInput: function () { + var self = this, $el = self.$element, $srcFrm, $tmpFrm, $tmpEl; + self.fileInputCleared = true; + if (isEmpty($el.val())) { + return; + } + // Fix for IE ver < 11, that does not clear file inputs. Requires a sequence of steps to prevent IE + // crashing but still allow clearing of the file input. + if (self.isIE9 || self.isIE10) { + $srcFrm = $el.closest('form'); + $tmpFrm = $(document.createElement('form')); + $tmpEl = $(document.createElement('div')); + $el.before($tmpEl); + if ($srcFrm.length) { + $srcFrm.after($tmpFrm); + } else { + $tmpEl.after($tmpFrm); + } + $tmpFrm.append($el).trigger('reset'); + $tmpEl.before($el).remove(); + $tmpFrm.remove(); + } else { // normal input clear behavior for other sane browsers + $el.val(''); + } + }, + _resetUpload: function () { + var self = this; + self.uploadCache = {content: [], config: [], tags: [], append: true}; + self.uploadCount = 0; + self.uploadStatus = {}; + self.uploadLog = []; + self.uploadAsyncCount = 0; + self.loadedImages = []; + self.totalImagesCount = 0; + self.$btnUpload.removeAttr('disabled'); + self._setProgress(0); + addCss(self.$progress, 'hide'); + self._resetErrors(false); + self.ajaxAborted = false; + self.ajaxRequests = []; + self._resetCanvas(); + }, + _resetCanvas: function () { + var self = this; + if (self.canvas && self.imageCanvasContext) { + self.imageCanvasContext.clearRect(0, 0, self.canvas.width, self.canvas.height); + } + }, + _hasInitialPreview: function () { + var self = this; + return !self.overwriteInitial && previewCache.count(self.id); + }, + _resetPreview: function () { + var self = this, out, cap; + if (previewCache.count(self.id)) { + out = previewCache.out(self.id); + self.$preview.html(out.content); + cap = self.initialCaption ? self.initialCaption : out.caption; + self._setCaption(cap); + } else { + self._clearPreview(); + self._initCaption(); + } + if (self.showPreview) { + self._initZoom(); + self._initSortable(); + } + }, + _clearDefaultPreview: function () { + var self = this; + self.$preview.find('.file-default-preview').remove(); + }, + _validateDefaultPreview: function () { + var self = this; + if (!self.showPreview || isEmpty(self.defaultPreviewContent)) { + return; + } + self.$preview.html('
    ' + self.defaultPreviewContent + '
    '); + self.$container.removeClass('file-input-new'); + self._initClickable(); + }, + _resetPreviewThumbs: function (isAjax) { + var self = this, out; + if (isAjax) { + self._clearPreview(); + self.clearStack(); + return; + } + if (self._hasInitialPreview()) { + out = previewCache.out(self.id); + self.$preview.html(out.content); + self._setCaption(out.caption); + self._initPreviewActions(); + } else { + self._clearPreview(); + } + }, + _getLayoutTemplate: function (t) { + var self = this, + template = ifSet(t, self.layoutTemplates, defaultLayoutTemplates[t]); + if (isEmpty(self.customLayoutTags)) { + return template; + } + return replaceTags(template, self.customLayoutTags); + }, + _getPreviewTemplate: function (t) { + var self = this, + template = ifSet(t, self.previewTemplates, defaultPreviewTemplates[t]); + if (isEmpty(self.customPreviewTags)) { + return template; + } + return replaceTags(template, self.customPreviewTags); + }, + _getOutData: function (jqXHR, responseData, filesData) { + var self = this; + jqXHR = jqXHR || {}; + responseData = responseData || {}; + filesData = filesData || self.filestack.slice(0) || {}; + return { + form: self.formdata, + files: filesData, + filenames: self.filenames, + filescount: self.getFilesCount(), + extra: self._getExtraData(), + response: responseData, + reader: self.reader, + jqXHR: jqXHR + }; + }, + _getMsgSelected: function (n) { + var self = this, strFiles = n === 1 ? self.fileSingle : self.filePlural; + return n > 0 ? self.msgSelected.replace('{n}', n).replace('{files}', strFiles) : self.msgNoFilesSelected; + }, + _getThumbs: function (css) { + css = css || ''; + return this.$preview.find('.file-preview-frame:not(.file-preview-initial)' + css); + }, + _getExtraData: function (previewId, index) { + var self = this, data = self.uploadExtraData; + if (typeof self.uploadExtraData === "function") { + data = self.uploadExtraData(previewId, index); + } + return data; + }, + _initXhr: function (xhrobj, previewId, fileCount) { + var self = this; + if (xhrobj.upload) { + xhrobj.upload.addEventListener('progress', function (event) { + var pct = 0, total = event.total, position = event.loaded || event.position; + /** @namespace event.lengthComputable */ + if (event.lengthComputable) { + pct = Math.floor(position / total * 100); + } + if (previewId) { + self._setAsyncUploadStatus(previewId, pct, fileCount); + } else { + self._setProgress(pct); + } + }, false); + } + return xhrobj; + }, + _ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError, previewId, index) { + var self = this, settings; + self._raise('filepreajax', [previewId, index]); + self._uploadExtra(previewId, index); + settings = $.extend(true, {}, { + xhr: function () { + var xhrobj = $.ajaxSettings.xhr(); + return self._initXhr(xhrobj, previewId, self.getFileStack().length); + }, + url: self.uploadUrl, + type: 'POST', + dataType: 'json', + data: self.formdata, + cache: false, + processData: false, + contentType: false, + beforeSend: fnBefore, + success: fnSuccess, + complete: fnComplete, + error: fnError + }, self.ajaxSettings); + self.ajaxRequests.push($.ajax(settings)); + }, + _initUploadSuccess: function (out, $thumb, allFiles) { + var self = this, append, data, index, $newThumb, content, config, tags, i, + mergeArray = function (prop, content) { + if (!(self[prop] instanceof Array)) { + self[prop] = []; + } + if (content && content.length) { + self[prop] = self[prop].concat(content); + } + }; + if (!self.showPreview || typeof out !== 'object' || $.isEmptyObject(out)) { + return; + } + if (out.initialPreview !== undefined && out.initialPreview.length > 0) { + self.hasInitData = true; + content = out.initialPreview || []; + config = out.initialPreviewConfig || []; + tags = out.initialPreviewThumbTags || []; + append = out.append === undefined || out.append ? true : false; + if (content.length > 0 && !isArray(content)) { + content = content.split(self.initialPreviewDelimiter); + } + self.overwriteInitial = false; + mergeArray('initialPreview', content); + mergeArray('initialPreviewConfig', config); + mergeArray('initialPreviewThumbTags', tags); + if ($thumb !== undefined) { + if (!allFiles) { + index = previewCache.add(self.id, content, config[0], tags[0], append); + data = previewCache.get(self.id, index, false); + $newThumb = $(data).hide(); + $thumb.after($newThumb).fadeOut('slow', function () { + $newThumb.fadeIn('slow').css('display:inline-block'); + self._initPreviewActions(); + self._clearFileInput(); + $thumb.remove(); + }); + } else { + i = $thumb.attr('data-fileindex'); + self.uploadCache.content[i] = content[0]; + self.uploadCache.config[i] = config[0] || []; + self.uploadCache.tags[i] = tags[0] || []; + self.uploadCache.append = append; + } + } else { + previewCache.set(self.id, content, config, tags, append); + self._initPreview(); + self._initPreviewActions(); + } + } + }, + _initSuccessThumbs: function () { + var self = this; + if (!self.showPreview) { + return; + } + self._getThumbs('.file-preview-success').each(function () { + var $thumb = $(this), $remove = $thumb.find('.kv-file-remove'); + $remove.removeAttr('disabled'); + handler($remove, 'click', function () { + var out = self._raise('filesuccessremove', [$thumb.attr('id'), $thumb.data('fileindex')]); + cleanMemory($thumb); + if (out === false) { + return; + } + $thumb.fadeOut('slow', function () { + $thumb.remove(); + if (!self.$preview.find('.file-preview-frame').length) { + self.reset(); + } + }); + }); + }); + }, + _checkAsyncComplete: function () { + var self = this, previewId, i; + for (i = 0; i < self.filestack.length; i++) { + if (self.filestack[i]) { + previewId = self.previewInitId + "-" + i; + if ($.inArray(previewId, self.uploadLog) === -1) { + return false; + } + } + } + return (self.uploadAsyncCount === self.uploadLog.length); + }, + _uploadExtra: function (previewId, index) { + var self = this, data = self._getExtraData(previewId, index); + if (data.length === 0) { + return; + } + $.each(data, function (key, value) { + self.formdata.append(key, value); + }); + }, + _uploadSingle: function (i, files, allFiles) { + var self = this, total = self.getFileStack().length, formdata = new FormData(), outData, + previewId = self.previewInitId + "-" + i, $thumb, chkComplete, $btnUpload, $btnDelete, + hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData), + fnBefore, fnSuccess, fnComplete, fnError, updateUploadLog, params = {id: previewId, index: i}; + self.formdata = formdata; + if (self.showPreview) { + $thumb = $('#' + previewId + ':not(.file-preview-initial)'); + $btnUpload = $thumb.find('.kv-file-upload'); + $btnDelete = $thumb.find('.kv-file-remove'); + $('#' + previewId).find('.file-thumb-progress').removeClass('hide'); + } + if (total === 0 || !hasPostData || ($btnUpload && $btnUpload.hasClass('disabled')) || self._abort(params)) { + return; + } + updateUploadLog = function (i, previewId) { + self.updateStack(i, undefined); + self.uploadLog.push(previewId); + if (self._checkAsyncComplete()) { + self.fileBatchCompleted = true; + } + }; + chkComplete = function () { + var u = self.uploadCache; + if (!self.fileBatchCompleted) { + return; + } + setTimeout(function () { + if (self.showPreview) { + previewCache.set(self.id, u.content, u.config, u.tags, u.append); + if (self.hasInitData) { + self._initPreview(); + self._initPreviewActions(); + } + } + self.unlock(); + self._clearFileInput(); + self._raise('filebatchuploadcomplete', [self.filestack, self._getExtraData()]); + self.uploadCount = 0; + self.uploadStatus = {}; + self.uploadLog = []; + self._setProgress(101); + }, 100); + }; + fnBefore = function (jqXHR) { + outData = self._getOutData(jqXHR); + self.fileBatchCompleted = false; + if (self.showPreview) { + if (!$thumb.hasClass('file-preview-success')) { + self._setThumbStatus($thumb, 'Loading'); + addCss($thumb, 'file-uploading'); + } + $btnUpload.attr('disabled', true); + $btnDelete.attr('disabled', true); + } + if (!allFiles) { + self.lock(); + } + self._raise('filepreupload', [outData, previewId, i]); + $.extend(true, params, outData); + if (self._abort(params)) { + jqXHR.abort(); + self._setProgressCancelled(); + } + }; + fnSuccess = function (data, textStatus, jqXHR) { + var pid = self.showPreview && $thumb.attr('id') ? $thumb.attr('id') : previewId; + outData = self._getOutData(jqXHR, data); + $.extend(true, params, outData); + setTimeout(function () { + if (isEmpty(data) || isEmpty(data.error)) { + if (self.showPreview) { + self._setThumbStatus($thumb, 'Success'); + $btnUpload.hide(); + self._initUploadSuccess(data, $thumb, allFiles); + } + self._raise('fileuploaded', [outData, pid, i]); + if (!allFiles) { + self.updateStack(i, undefined); + } else { + updateUploadLog(i, pid); + } + } else { + self._showUploadError(data.error, params); + self._setPreviewError($thumb, i); + if (allFiles) { + updateUploadLog(i, pid); + } + } + }, 100); + }; + fnComplete = function () { + setTimeout(function () { + if (self.showPreview) { + $btnUpload.removeAttr('disabled'); + $btnDelete.removeAttr('disabled'); + $thumb.removeClass('file-uploading'); + self._setProgress(101, $('#' + previewId).find('.file-thumb-progress')); + } + if (!allFiles) { + self.unlock(false); + self._clearFileInput(); + } else { + chkComplete(); + } + self._initSuccessThumbs(); + }, 100); + }; + fnError = function (jqXHR, textStatus, errorThrown) { + var errMsg = self._parseError(jqXHR, errorThrown, (allFiles ? files[i].name : null)); + setTimeout(function () { + if (allFiles) { + updateUploadLog(i, previewId); + } + self.uploadStatus[previewId] = 100; + self._setPreviewError($thumb, i); + $.extend(true, params, self._getOutData(jqXHR)); + self._showUploadError(errMsg, params); + }, 100); + }; + formdata.append(self.uploadFileAttr, files[i], self.filenames[i]); + formdata.append('file_id', i); + self._ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError, previewId, i); + }, + _uploadBatch: function () { + var self = this, files = self.filestack, total = files.length, params = {}, fnBefore, fnSuccess, fnError, + fnComplete, hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData), + setAllUploaded; + self.formdata = new FormData(); + if (total === 0 || !hasPostData || self._abort(params)) { + return; + } + setAllUploaded = function () { + $.each(files, function (key) { + self.updateStack(key, undefined); + }); + self._clearFileInput(); + }; + fnBefore = function (jqXHR) { + self.lock(); + var outData = self._getOutData(jqXHR); + if (self.showPreview) { + self._getThumbs().each(function () { + var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload'), + $btnDelete = $thumb.find('.kv-file-remove'); + if (!$thumb.hasClass('file-preview-success')) { + self._setThumbStatus($thumb, 'Loading'); + addCss($thumb, 'file-uploading'); + } + $btnUpload.attr('disabled', true); + $btnDelete.attr('disabled', true); + }); + } + self._raise('filebatchpreupload', [outData]); + if (self._abort(outData)) { + jqXHR.abort(); + self._setProgressCancelled(); + } + }; + fnSuccess = function (data, textStatus, jqXHR) { + /** @namespace data.errorkeys */ + var outData = self._getOutData(jqXHR, data), $thumbs = self._getThumbs(':not(.file-preview-error)'), key = 0, + keys = isEmpty(data) || isEmpty(data.errorkeys) ? [] : data.errorkeys; + if (isEmpty(data) || isEmpty(data.error)) { + self._raise('filebatchuploadsuccess', [outData]); + setAllUploaded(); + if (self.showPreview) { + $thumbs.each(function () { + var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload'); + $thumb.find('.kv-file-upload').hide(); + self._setThumbStatus($thumb, 'Success'); + $thumb.removeClass('file-uploading'); + $btnUpload.removeAttr('disabled'); + }); + self._initUploadSuccess(data); + } else { + self.reset(); + } + } else { + if (self.showPreview) { + $thumbs.each(function () { + var $thumb = $(this), $btnDelete = $thumb.find('.kv-file-remove'), + $btnUpload = $thumb.find('.kv-file-upload'); + $thumb.removeClass('file-uploading'); + $btnUpload.removeAttr('disabled'); + $btnDelete.removeAttr('disabled'); + if (keys.length === 0) { + self._setPreviewError($thumb); + return; + } + if ($.inArray(key, keys) !== -1) { + self._setPreviewError($thumb); + } else { + $thumb.find('.kv-file-upload').hide(); + self._setThumbStatus($thumb, 'Success'); + self.updateStack(key, undefined); + } + key++; + }); + self._initUploadSuccess(data); + } + self._showUploadError(data.error, outData, 'filebatchuploaderror'); + } + }; + fnComplete = function () { + self._setProgress(101); + self.unlock(); + self._initSuccessThumbs(); + self._clearFileInput(); + self._raise('filebatchuploadcomplete', [self.filestack, self._getExtraData()]); + }; + fnError = function (jqXHR, textStatus, errorThrown) { + var outData = self._getOutData(jqXHR), errMsg = self._parseError(jqXHR, errorThrown); + self._showUploadError(errMsg, outData, 'filebatchuploaderror'); + self.uploadFileCount = total - 1; + if (!self.showPreview) { + return; + } + self._getThumbs().each(function () { + var $thumb = $(this), key = $thumb.attr('data-fileindex'); + $thumb.removeClass('file-uploading'); + if (self.filestack[key] !== undefined) { + self._setPreviewError($thumb); + } + }); + self._getThumbs().removeClass('file-uploading'); + self._getThumbs(' .kv-file-upload').removeAttr('disabled'); + self._getThumbs(' .kv-file-delete').removeAttr('disabled'); + }; + $.each(files, function (key, data) { + if (!isEmpty(files[key])) { + self.formdata.append(self.uploadFileAttr, data, self.filenames[key]); + } + }); + self._ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError); + }, + _uploadExtraOnly: function () { + var self = this, params = {}, fnBefore, fnSuccess, fnComplete, fnError; + self.formdata = new FormData(); + if (self._abort(params)) { + return; + } + fnBefore = function (jqXHR) { + self.lock(); + var outData = self._getOutData(jqXHR); + self._raise('filebatchpreupload', [outData]); + self._setProgress(50); + params.data = outData; + params.xhr = jqXHR; + if (self._abort(params)) { + jqXHR.abort(); + self._setProgressCancelled(); + } + }; + fnSuccess = function (data, textStatus, jqXHR) { + var outData = self._getOutData(jqXHR, data); + if (isEmpty(data) || isEmpty(data.error)) { + self._raise('filebatchuploadsuccess', [outData]); + self._clearFileInput(); + self._initUploadSuccess(data); + } else { + self._showUploadError(data.error, outData, 'filebatchuploaderror'); + } + }; + fnComplete = function () { + self._setProgress(101); + self.unlock(); + self._clearFileInput(); + self._raise('filebatchuploadcomplete', [self.filestack, self._getExtraData()]); + }; + fnError = function (jqXHR, textStatus, errorThrown) { + var outData = self._getOutData(jqXHR), errMsg = self._parseError(jqXHR, errorThrown); + params.data = outData; + self._showUploadError(errMsg, outData, 'filebatchuploaderror'); + }; + self._ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError); + }, + _initFileActions: function () { + var self = this; + if (!self.showPreview) { + return; + } + self._initZoomButton(); + self.$preview.find('.kv-file-remove').each(function () { + var $el = $(this), $frame = $el.closest('.file-preview-frame'), hasError, + id = $frame.attr('id'), ind = $frame.attr('data-fileindex'), n, cap, status; + handler($el, 'click', function () { + status = self._raise('filepreremove', [id, ind]); + if (status === false || !self._validateMinCount()) { + return false; + } + hasError = $frame.hasClass('file-preview-error'); + cleanMemory($frame); + $frame.fadeOut('slow', function () { + self.updateStack(ind, undefined); + self._clearObjects($frame); + $frame.remove(); + if (id && hasError) { + self.$errorContainer.find('li[data-file-id="' + id + '"]').fadeOut('fast', function () { + $(this).remove(); + if (!self._errorsExist()) { + self._resetErrors(); + } + }); + } + self._clearFileInput(); + var filestack = self.getFileStack(true), chk = previewCache.count(self.id), + len = filestack.length, + hasThumb = self.showPreview && self.$preview.find('.file-preview-frame').length; + if (len === 0 && chk === 0 && !hasThumb) { + self.reset(); + } else { + n = chk + len; + cap = n > 1 ? self._getMsgSelected(n) : (filestack[0] ? self._getFileNames()[0] : ''); + self._setCaption(cap); + } + self._raise('fileremoved', [id, ind]); + }); + }); + }); + self.$preview.find('.kv-file-upload').each(function () { + var $el = $(this); + handler($el, 'click', function () { + var $frame = $el.closest('.file-preview-frame'), + ind = $frame.attr('data-fileindex'); + if (!$frame.hasClass('file-preview-error')) { + self._uploadSingle(ind, self.filestack, false); + } + }); + }); + }, + _hideFileIcon: function () { + if (this.overwriteInitial) { + this.$captionContainer.find('.kv-caption-icon').hide(); + } + }, + _showFileIcon: function () { + this.$captionContainer.find('.kv-caption-icon').show(); + }, + _getSize: function (bytes) { + var self = this, size = parseFloat(bytes); + if (!bytes || !size || isNaN(bytes) || isNaN(size)) { + return self._getLayoutTemplate('size').replace('{sizeText}', '0.00 KB'); + } + var i, func = self.fileSizeGetter, sizes, out; + if (typeof func === 'function') { + out = func(bytes); + } else { + i = Math.floor(Math.log(size) / Math.log(1024)); + sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + out = (size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i]; + } + return self._getLayoutTemplate('size').replace('{sizeText}', out); + }, + _generatePreviewTemplate: function (cat, data, fname, ftype, previewId, isError, size, frameClass, foot, ind) { + var self = this, tmplt = self._getPreviewTemplate(cat), content, sText, css = frameClass || '', + config = ifSet(cat, self.previewSettings, defaultPreviewSettings[cat]), caption = self.slug(fname), + footer = foot || self._renderFileFooter(caption, size, config.width, isError); + ind = ind || previewId.slice(previewId.lastIndexOf('-') + 1); + tmplt = self._parseFilePreviewIcon(tmplt, fname); + if (cat === 'text' || cat === 'html') { + sText = cat === 'text' ? htmlEncode(data) : data; + content = tmplt.replace(/\{previewId}/g, previewId).replace(/\{caption}/g, caption) + .replace(/\{width}/g, config.width).replace(/\{height}/g, config.height) + .replace(/\{frameClass}/g, css).replace(/\{cat}/g, ftype) + .replace(/\{footer}/g, footer).replace(/\{fileindex}/g, ind) + .replace(/\{data}/g, sText).replace(/\{template}/g, cat); + } else { + content = tmplt.replace(/\{previewId}/g, previewId).replace(/\{caption}/g, caption) + .replace(/\{frameClass}/g, css).replace(/\{type}/g, ftype).replace(/\{fileindex}/g, ind) + .replace(/\{width}/g, config.width).replace(/\{height}/g, config.height) + .replace(/\{footer}/g, footer).replace(/\{data}/g, data).replace(/\{template}/g, cat); + } + return content; + }, + _previewDefault: function (file, previewId, isDisabled) { + var self = this, $preview = self.$preview, $previewLive = $preview.find('.file-live-thumbs'); + if (!self.showPreview) { + return; + } + var fname = file ? file.name : '', ftype = file ? file.type : '', content, + isError = isDisabled === true && !self.isUploadable, data = objUrl.createObjectURL(file); + self._clearDefaultPreview(); + content = self._generatePreviewTemplate('other', data, fname, ftype, previewId, isError, file.size); + if (!$previewLive.length) { + $previewLive = $(document.createElement('div')).addClass('file-live-thumbs').appendTo($preview); + } + $previewLive.append("\n" + content); + if (isDisabled === true && self.isUploadable) { + self._setThumbStatus($('#' + previewId), 'Error'); + } + }, + _previewFile: function (i, file, theFile, previewId, data) { + if (!this.showPreview) { + return; + } + var self = this, cat = self._parseFileType(file), fname = file ? file.name : '', caption = self.slug(fname), + types = self.allowedPreviewTypes, mimes = self.allowedPreviewMimeTypes, $preview = self.$preview, + chkTypes = types && types.indexOf(cat) >= 0, $previewLive = $preview.find('.file-live-thumbs'), + iData = (cat === 'text' || cat === 'html' || cat === 'image') ? theFile.target.result : data, content, + chkMimes = mimes && mimes.indexOf(file.type) !== -1; + if (!$previewLive.length) { + $previewLive = $(document.createElement('div')).addClass('file-live-thumbs').appendTo($preview); + } + /** @namespace window.DOMPurify */ + if (cat === 'html' && self.purifyHtml && window.DOMPurify) { + iData = window.DOMPurify.sanitize(iData); + } + if (chkTypes || chkMimes) { + content = self._generatePreviewTemplate(cat, iData, fname, file.type, previewId, false, file.size); + self._clearDefaultPreview(); + $previewLive.append("\n" + content); + self._validateImage(i, previewId, caption, file.type); + } else { + self._previewDefault(file, previewId); + } + self._initSortable(); + }, + _slugDefault: function (text) { + return isEmpty(text) ? '' : String(text).replace(/[\-\[\]\/\{}:;#%=\(\)\*\+\?\\\^\$\|<>&"']/g, '_'); + }, + _readFiles: function (files) { + this.reader = new FileReader(); + var self = this, $el = self.$element, $preview = self.$preview, reader = self.reader, + $container = self.$previewContainer, $status = self.$previewStatus, msgLoading = self.msgLoading, + msgProgress = self.msgProgress, previewInitId = self.previewInitId, numFiles = files.length, + settings = self.fileTypeSettings, ctr = self.filestack.length, readFile, + maxPreviewSize = self.maxFilePreviewSize && parseFloat(self.maxFilePreviewSize), + canPreview = $preview.length && (!maxPreviewSize || isNaN(maxPreviewSize)), + throwError = function (msg, file, previewId, index) { + var p1 = $.extend(true, {}, self._getOutData({}, {}, files), {id: previewId, index: index}), + p2 = {id: previewId, index: index, file: file, files: files}; + self._previewDefault(file, previewId, true); + if (self.isUploadable) { + self.addToStack(undefined); + setTimeout(function () { + readFile(index + 1); + }, 100); + } + self._initFileActions(); + if (self.removeFromPreviewOnError) { + $('#' + previewId).remove(); + } + return self.isUploadable ? self._showUploadError(msg, p1) : self._showError(msg, p2); + }; + + self.loadedImages = []; + self.totalImagesCount = 0; + + $.each(files, function (key, file) { + var func = self.fileTypeSettings.image || defaultFileTypeSettings.image; + if (func && func(file.type)) { + self.totalImagesCount++; + } + }); + readFile = function (i) { + if (isEmpty($el.attr('multiple'))) { + numFiles = 1; + } + if (i >= numFiles) { + if (self.isUploadable && self.filestack.length > 0) { + self._raise('filebatchselected', [self.getFileStack()]); + } else { + self._raise('filebatchselected', [files]); + } + $container.removeClass('file-thumb-loading'); + $status.html(''); + return; + } + var node = ctr + i, previewId = previewInitId + "-" + node, isText, isImage, file = files[i], fSizeKB, + caption = file.name ? self.slug(file.name) : '', fileSize = (file.size || 0) / 1000, checkFile, + fileExtExpr = '', previewData = objUrl.createObjectURL(file), fileCount = 0, j, msg, typ, chk, + fileTypes = self.allowedFileTypes, strTypes = isEmpty(fileTypes) ? '' : fileTypes.join(', '), + fileExt = self.allowedFileExtensions, strExt = isEmpty(fileExt) ? '' : fileExt.join(', '); + + if (caption === false) { + readFile(i + 1); + return; + } + if (caption.length === 0) { + msg = self.msgInvalidFileName.replace('{name}', htmlEncode(file.name)); + self.isError = throwError(msg, file, previewId, i); + return; + } + if (!isEmpty(fileExt)) { + fileExtExpr = new RegExp('\\.(' + fileExt.join('|') + ')$', 'i'); + } + fSizeKB = fileSize.toFixed(2); + if (self.maxFileSize > 0 && fileSize > self.maxFileSize) { + msg = self.msgSizeTooLarge.replace('{name}', caption).replace('{size}', fSizeKB) + .replace('{maxSize}', self.maxFileSize); + self.isError = throwError(msg, file, previewId, i); + return; + } + if (self.minFileSize !== null && fileSize <= getNum(self.minFileSize)) { + msg = self.msgSizeTooSmall.replace('{name}', caption).replace('{size}', fSizeKB) + .replace('{minSize}', self.minFileSize); + self.isError = throwError(msg, file, previewId, i); + return; + } + if (!isEmpty(fileTypes) && isArray(fileTypes)) { + for (j = 0; j < fileTypes.length; j += 1) { + typ = fileTypes[j]; + checkFile = settings[typ]; + chk = (checkFile !== undefined && checkFile(file.type, caption)); + fileCount += isEmpty(chk) ? 0 : chk.length; + } + if (fileCount === 0) { + msg = self.msgInvalidFileType.replace('{name}', caption).replace('{types}', strTypes); + self.isError = throwError(msg, file, previewId, i); + return; + } + } + if (fileCount === 0 && !isEmpty(fileExt) && isArray(fileExt) && !isEmpty(fileExtExpr)) { + chk = compare(caption, fileExtExpr); + fileCount += isEmpty(chk) ? 0 : chk.length; + if (fileCount === 0) { + msg = self.msgInvalidFileExtension.replace('{name}', caption).replace('{extensions}', strExt); + self.isError = throwError(msg, file, previewId, i); + return; + } + } + if (!self.showPreview) { + self.addToStack(file); + setTimeout(function () { + readFile(i + 1); + }, 100); + self._raise('fileloaded', [file, previewId, i, reader]); + return; + } + if (!canPreview && fileSize > maxPreviewSize) { + self.addToStack(file); + $container.addClass('file-thumb-loading'); + self._previewDefault(file, previewId); + self._initFileActions(); + self._updateFileDetails(numFiles); + readFile(i + 1); + return; + } + if ($preview.length && FileReader !== undefined) { + $status.html(msgLoading.replace('{index}', i + 1).replace('{files}', numFiles)); + $container.addClass('file-thumb-loading'); + reader.onerror = function (evt) { + self._errorHandler(evt, caption); + }; + reader.onload = function (theFile) { + self._previewFile(i, file, theFile, previewId, previewData); + self._initFileActions(); + }; + reader.onloadend = function () { + msg = msgProgress.replace('{index}', i + 1).replace('{files}', numFiles) + .replace('{percent}', 50).replace('{name}', caption); + setTimeout(function () { + $status.html(msg); + self._updateFileDetails(numFiles); + readFile(i + 1); + }, 100); + self._raise('fileloaded', [file, previewId, i, reader]); + }; + reader.onprogress = function (data) { + if (data.lengthComputable) { + var fact = (data.loaded / data.total) * 100, progress = Math.ceil(fact); + msg = msgProgress.replace('{index}', i + 1).replace('{files}', numFiles) + .replace('{percent}', progress).replace('{name}', caption); + setTimeout(function () { + $status.html(msg); + }, 100); + } + }; + isText = ifSet('text', settings, defaultFileTypeSettings.text); + isImage = ifSet('image', settings, defaultFileTypeSettings.image); + + if (isText(file.type, caption)) { + reader.readAsText(file, self.textEncoding); + } else { + if (isImage(file.type, caption)) { + reader.readAsDataURL(file); + } else { + reader.readAsArrayBuffer(file); + } + } + } else { + self._previewDefault(file, previewId); + setTimeout(function () { + readFile(i + 1); + self._updateFileDetails(numFiles); + }, 100); + self._raise('fileloaded', [file, previewId, i, reader]); + } + self.addToStack(file); + }; + + readFile(0); + self._updateFileDetails(numFiles, false); + }, + _updateFileDetails: function (numFiles) { + var self = this, $el = self.$element, fileStack = self.getFileStack(), + name = (isIE(9) && findFileName($el.val())) || + ($el[0].files[0] && $el[0].files[0].name) || (fileStack.length && fileStack[0].name) || '', + label = self.slug(name), n = self.isUploadable ? fileStack.length : numFiles, + nFiles = previewCache.count(self.id) + n, log = n > 1 ? self._getMsgSelected(nFiles) : label; + if (self.isError) { + self.$previewContainer.removeClass('file-thumb-loading'); + self.$previewStatus.html(''); + self.$captionContainer.find('.kv-caption-icon').hide(); + } else { + self._showFileIcon(); + } + self._setCaption(log, self.isError); + self.$container.removeClass('file-input-new file-input-ajax-new'); + if (arguments.length === 1) { + self._raise('fileselect', [numFiles, label]); + } + if (previewCache.count(self.id)) { + self._initPreviewActions(); + } + }, + _setThumbStatus: function ($thumb, status) { + var self = this; + if (!self.showPreview) { + return; + } + var icon = 'indicator' + status, msg = icon + 'Title', + css = 'file-preview-' + status.toLowerCase(), + $indicator = $thumb.find('.file-upload-indicator'), + config = self.fileActionSettings; + $thumb.removeClass('file-preview-success file-preview-error file-preview-loading'); + if (status === 'Error') { + $thumb.find('.kv-file-upload').attr('disabled', true); + } + if (status === 'Success') { + $thumb.find('.file-drag-handle').remove(); + $indicator.css('margin-left', 0); + } + $indicator.html(config[icon]); + $indicator.attr('title', config[msg]); + $thumb.addClass(css); + }, + _setProgressCancelled: function () { + var self = this; + self._setProgress(101, self.$progress, self.msgCancelled); + }, + _setProgress: function (p, $el, error) { + var self = this, pct = Math.min(p, 100), template = pct < 100 ? self.progressTemplate : + (error ? self.progressErrorTemplate : (p <= 100 ? self.progressTemplate : self.progressCompleteTemplate)), + pctLimit = self.progressUploadThreshold; + $el = $el || self.$progress; + if (!isEmpty(template)) { + if (pctLimit && pct > pctLimit && p <= 100) { + var out = template.replace('{percent}', pctLimit).replace('{percent}', pctLimit).replace('{percent}%', self.msgUploadThreshold); + $el.html(out); + } else { + $el.html(template.replace(/\{percent}/g, pct)); + } + if (error) { + $el.find('[role="progressbar"]').html(error); + } + } + }, + _setFileDropZoneTitle: function () { + var self = this, $zone = self.$container.find('.file-drop-zone'), title = self.dropZoneTitle, strFiles; + if (self.isClickable) { + strFiles = isEmpty(self.$element.attr('multiple')) ? self.fileSingle : self.filePlural; + title += self.dropZoneClickTitle.replace('{files}', strFiles); + } + $zone.find('.' + self.dropZoneTitleClass).remove(); + if (!self.isUploadable || !self.showPreview || $zone.length === 0 || self.getFileStack().length > 0 || !self.dropZoneEnabled) { + return; + } + if ($zone.find('.file-preview-frame').length === 0 && isEmpty(self.defaultPreviewContent)) { + $zone.prepend('
    ' + title + '
    '); + } + self.$container.removeClass('file-input-new'); + addCss(self.$container, 'file-input-ajax-new'); + }, + _setAsyncUploadStatus: function (previewId, pct, total) { + var self = this, sum = 0; + self._setProgress(pct, $('#' + previewId).find('.file-thumb-progress')); + self.uploadStatus[previewId] = pct; + $.each(self.uploadStatus, function (key, value) { + sum += value; + }); + self._setProgress(Math.floor(sum / total)); + + }, + _validateMinCount: function () { + var self = this, len = self.isUploadable ? self.getFileStack().length : self.$element.get(0).files.length; + if (self.validateInitialCount && self.minFileCount > 0 && self._getFileCount(len - 1) < self.minFileCount) { + self._noFilesError({}); + return false; + } + return true; + }, + _getFileCount: function (fileCount) { + var self = this, addCount = 0; + if (self.validateInitialCount && !self.overwriteInitial) { + addCount = previewCache.count(self.id); + fileCount += addCount; + } + return fileCount; + }, + _getFileName: function (file) { + return file && file.name ? this.slug(file.name) : undefined; + }, + _getFileNames: function (skipNull) { + var self = this; + return self.filenames.filter(function (n) { + return (skipNull ? n !== undefined : n !== undefined && n !== null); + }); + }, + _setPreviewError: function ($thumb, i, val) { + var self = this; + if (i !== undefined) { + self.updateStack(i, val); + } + if (self.removeFromPreviewOnError) { + $thumb.remove(); + } else { + self._setThumbStatus($thumb, 'Error'); + } + }, + _checkDimensions: function (i, chk, $img, $thumb, fname, type, params) { + var self = this, msg, dim, tag = chk === 'Small' ? 'min' : 'max', limit = self[tag + 'Image' + type], + $imgEl, isValid; + if (isEmpty(limit) || !$img.length) { + return; + } + $imgEl = $img[0]; + dim = (type === 'Width') ? $imgEl.naturalWidth || $imgEl.width : $imgEl.naturalHeight || $imgEl.height; + isValid = chk === 'Small' ? dim >= limit : dim <= limit; + if (isValid) { + return; + } + msg = self['msgImage' + type + chk].replace('{name}', fname).replace('{size}', limit); + self._showUploadError(msg, params); + self._setPreviewError($thumb, i, null); + }, + _validateImage: function (i, previewId, fname, ftype) { + var self = this, $preview = self.$preview, params, w1, w2, + $thumb = $preview.find("#" + previewId), $img = $thumb.find('img'); + fname = fname || 'Untitled'; + if (!$img.length) { + return; + } + handler($img, 'load', function () { + w1 = $thumb.width(); + w2 = $preview.width(); + if (w1 > w2) { + $img.css('width', '100%'); + $thumb.css('width', '97%'); + } + params = {ind: i, id: previewId}; + self._checkDimensions(i, 'Small', $img, $thumb, fname, 'Width', params); + self._checkDimensions(i, 'Small', $img, $thumb, fname, 'Height', params); + if (!self.resizeImage) { + self._checkDimensions(i, 'Large', $img, $thumb, fname, 'Width', params); + self._checkDimensions(i, 'Large', $img, $thumb, fname, 'Height', params); + } + self._raise('fileimageloaded', [previewId]); + self.loadedImages.push({ind: i, img: $img, thumb: $thumb, pid: previewId, typ: ftype}); + self._validateAllImages(); + }); + }, + _validateAllImages: function () { + var self = this, i, config, $img, $thumb, pid, ind, params = {}, errFunc; + if (self.loadedImages.length !== self.totalImagesCount) { + return; + } + self._raise('fileimagesloaded'); + if (!self.resizeImage) { + return; + } + errFunc = self.isUploadable ? self._showUploadError : self._showError; + var counter = {val: 0}; + for (i = 0; i < self.loadedImages.length; i++) { + config = self.loadedImages[i]; + $img = config.img; + $thumb = config.thumb; + pid = config.pid; + ind = config.ind; + params = {id: pid, 'index': ind}; + if (!self._getResizedImage($img[0], config.typ, pid, ind, counter, self.loadedImages.length)) { + errFunc(self.msgImageResizeError, params, 'fileimageresizeerror'); + self._setPreviewError($thumb, ind); + } + } + }, + _getResizedImage: function (image, type, pid, ind, counter, num_imgs) { + var self = this, width = image.naturalWidth, height = image.naturalHeight, ratio = 1, + maxWidth = self.maxImageWidth || width, maxHeight = self.maxImageHeight || height, + isValidImage = (width && height), chkWidth, chkHeight, + canvas = self.imageCanvas, context = self.imageCanvasContext; + if (!isValidImage) { + counter.val++; + if (counter.val === num_imgs) { + self._raise('fileimagesresized'); + } + return false; + } + if (width === maxWidth && height === maxHeight) { + self._raise('fileimageresized', [pid, ind]); + counter.val++; + if (counter.val === num_imgs) { + self._raise('fileimagesresized'); + } + return true; + } + type = type || self.resizeDefaultImageType; + chkWidth = width > maxWidth; + chkHeight = height > maxHeight; + if (self.resizePreference === 'width') { + ratio = chkWidth ? maxWidth / width : (chkHeight ? maxHeight / height : 1); + } else { + ratio = chkHeight ? maxHeight / height : (chkWidth ? maxWidth / width : 1); + } + self._resetCanvas(); + width *= ratio; + height *= ratio; + canvas.width = width; + canvas.height = height; + try { + context.drawImage(image, 0, 0, width, height); + canvas.toBlob(function (blob) { + self.filestack[ind] = blob; + self._raise('fileimageresized', [pid, ind]); + counter.val++; + if (counter.val === num_imgs) { + self._raise('fileimagesresized', [undefined, undefined]); + } + }, type, self.resizeQuality); + return true; + } + catch (err) { + counter.val++; + if (counter.val === num_imgs) { + self._raise('fileimagesresized', [undefined, undefined]); + } + return false; + } + }, + _initBrowse: function ($container) { + var self = this; + if (self.showBrowse) { + self.$btnFile = $container.find('.btn-file'); + self.$btnFile.append(self.$element); + } else { + self.$element.hide(); + } + }, + _initCaption: function () { + var self = this, cap = self.initialCaption || ''; + if (self.overwriteInitial || isEmpty(cap)) { + self.$caption.html(''); + return false; + } + self._setCaption(cap); + return true; + }, + _setCaption: function (content, isError) { + var self = this, title, out, n, cap, stack = self.getFileStack(); + if (!self.$caption.length) { + return; + } + if (isError) { + title = $('
    ' + self.msgValidationError + '
    ').text(); + n = stack.length; + if (n) { + cap = n === 1 && stack[0] ? self._getFileNames()[0] : self._getMsgSelected(n); + } else { + cap = self._getMsgSelected(self.msgNo); + } + out = '' + self.msgValidationErrorIcon + + (isEmpty(content) ? cap : content) + ''; + } else { + if (isEmpty(content)) { + return; + } + title = $('
    ' + content + '
    ').text(); + out = self._getLayoutTemplate('fileIcon') + title; + } + self.$caption.html(out); + self.$caption.attr('title', title); + self.$captionContainer.find('.file-caption-ellipsis').attr('title', title); + }, + _createContainer: function () { + var self = this, $container = $(document.createElement("div")) + .attr({"class": 'file-input file-input-new'}) + .html(self._renderMain()); + self.$element.before($container); + self._initBrowse($container); + if (self.theme) { + $container.addClass('theme-' + self.theme); + } + return $container; + }, + _refreshContainer: function () { + var self = this, $container = self.$container; + $container.before(self.$element); + $container.html(self._renderMain()); + self._initBrowse($container); + }, + _renderMain: function () { + var self = this, dropCss = (self.isUploadable && self.dropZoneEnabled) ? ' file-drop-zone' : 'file-drop-disabled', + close = !self.showClose ? '' : self._getLayoutTemplate('close'), + preview = !self.showPreview ? '' : self._getLayoutTemplate('preview') + .replace(/\{class}/g, self.previewClass) + .replace(/\{dropClass}/g, dropCss), + css = self.isDisabled ? self.captionClass + ' file-caption-disabled' : self.captionClass, + caption = self.captionTemplate.replace(/\{class}/g, css + ' kv-fileinput-caption'); + return self.mainTemplate.replace(/\{class}/g, self.mainClass + + (!self.showBrowse && self.showCaption ? ' no-browse' : '')) + .replace(/\{preview}/g, preview) + .replace(/\{close}/g, close) + .replace(/\{caption}/g, caption) + .replace(/\{upload}/g, self._renderButton('upload')) + .replace(/\{remove}/g, self._renderButton('remove')) + .replace(/\{cancel}/g, self._renderButton('cancel')) + .replace(/\{browse}/g, self._renderButton('browse')); + }, + _renderButton: function (type) { + var self = this, tmplt = self._getLayoutTemplate('btnDefault'), css = self[type + 'Class'], + title = self[type + 'Title'], icon = self[type + 'Icon'], label = self[type + 'Label'], + status = self.isDisabled ? ' disabled' : '', btnType = 'button'; + switch (type) { + case 'remove': + if (!self.showRemove) { + return ''; + } + break; + case 'cancel': + if (!self.showCancel) { + return ''; + } + css += ' hide'; + break; + case 'upload': + if (!self.showUpload) { + return ''; + } + if (self.isUploadable && !self.isDisabled) { + tmplt = self._getLayoutTemplate('btnLink').replace('{href}', self.uploadUrl); + } else { + btnType = 'submit'; + } + break; + case 'browse': + if (!self.showBrowse) { + return ''; + } + tmplt = self._getLayoutTemplate('btnBrowse'); + break; + default: + return ''; + } + + css += type === 'browse' ? ' btn-file' : ' fileinput-' + type + ' fileinput-' + type + '-button'; + if (!isEmpty(label)) { + label = ' ' + label + ''; + } + return tmplt.replace('{type}', btnType).replace('{css}', css).replace('{title}', title) + .replace('{status}', status).replace('{icon}', icon).replace('{label}', label); + }, + _renderThumbProgress: function () { + return '
    ' + this.progressTemplate.replace(/\{percent}/g, + '0') + '
    '; + }, + _renderFileFooter: function (caption, size, width, isError) { + var self = this, config = self.fileActionSettings, rem = config.showRemove, drg = config.showDrag, + upl = config.showUpload, zoom = config.showZoom, out, template = self._getLayoutTemplate('footer'), + indicator = isError ? config.indicatorError : config.indicatorNew, + title = isError ? config.indicatorErrorTitle : config.indicatorNewTitle; + size = self._getSize(size); + if (self.isUploadable) { + out = template.replace(/\{actions}/g, self._renderFileActions(upl, rem, zoom, drg, false, false, false)) + .replace(/\{caption}/g, caption).replace(/\{size}/g, size).replace(/\{width}/g, width) + .replace(/\{progress}/g, self._renderThumbProgress()).replace(/\{indicator}/g, indicator) + .replace(/\{indicatorTitle}/g, title); + } else { + out = template.replace(/\{actions}/g, + self._renderFileActions(false, false, zoom, drg, false, false, false)) + .replace(/\{caption}/g, caption).replace(/\{size}/g, size).replace(/\{width}/g, width) + .replace(/\{progress}/g, '').replace(/\{indicator}/g, indicator) + .replace(/\{indicatorTitle}/g, title); + } + out = replaceTags(out, self.previewThumbTags); + return out; + }, + _renderFileActions: function (showUpload, showDelete, showZoom, showDrag, disabled, url, key, isInit) { + if (!showUpload && !showDelete && !showZoom && !showDrag) { + return ''; + } + var self = this, + vUrl = url === false ? '' : ' data-url="' + url + '"', + vKey = key === false ? '' : ' data-key="' + key + '"', + btnDelete = '', btnUpload = '', btnZoom = '', btnDrag = '', css, + template = self._getLayoutTemplate('actions'), config = self.fileActionSettings, + otherButtons = self.otherActionButtons.replace(/\{dataKey}/g, vKey), + removeClass = disabled ? config.removeClass + ' disabled' : config.removeClass; + if (showDelete) { + btnDelete = self._getLayoutTemplate('actionDelete') + .replace(/\{removeClass}/g, removeClass) + .replace(/\{removeIcon}/g, config.removeIcon) + .replace(/\{removeTitle}/g, config.removeTitle) + .replace(/\{dataUrl}/g, vUrl) + .replace(/\{dataKey}/g, vKey); + } + if (showUpload) { + btnUpload = self._getLayoutTemplate('actionUpload') + .replace(/\{uploadClass}/g, config.uploadClass) + .replace(/\{uploadIcon}/g, config.uploadIcon) + .replace(/\{uploadTitle}/g, config.uploadTitle); + } + if (showZoom) { + btnZoom = self._getLayoutTemplate('actionZoom') + .replace(/\{zoomClass}/g, config.zoomClass) + .replace(/\{zoomIcon}/g, config.zoomIcon) + .replace(/\{zoomTitle}/g, config.zoomTitle); + } + if (showDrag && isInit) { + css = 'drag-handle-init ' + config.dragClass; + btnDrag = self._getLayoutTemplate('actionDrag').replace(/\{dragClass}/g, css) + .replace(/\{dragTitle}/g, config.dragTitle) + .replace(/\{dragIcon}/g, config.dragIcon); + } + return template.replace(/\{delete}/g, btnDelete) + .replace(/\{upload}/g, btnUpload) + .replace(/\{zoom}/g, btnZoom) + .replace(/\{drag}/g, btnDrag) + .replace(/\{other}/g, otherButtons); + }, + _browse: function (e) { + var self = this; + self._raise('filebrowse'); + if (e && e.isDefaultPrevented()) { + return; + } + if (self.isError && !self.isUploadable) { + self.clear(); + } + self.$captionContainer.focus(); + }, + _change: function (e) { + var self = this, $el = self.$element; + if (!self.isUploadable && isEmpty($el.val()) && self.fileInputCleared) { // IE 11 fix + self.fileInputCleared = false; + return; + } + self.fileInputCleared = false; + var tfiles, msg, total, isDragDrop = arguments.length > 1, isAjaxUpload = self.isUploadable, i = 0, f, n, len, + files = isDragDrop ? e.originalEvent.dataTransfer.files : $el.get(0).files, ctr = self.filestack.length, + isSingleUpload = isEmpty($el.attr('multiple')), flagSingle = (isSingleUpload && ctr > 0), folders = 0, + throwError = function (mesg, file, previewId, index) { + var p1 = $.extend(true, {}, self._getOutData({}, {}, files), {id: previewId, index: index}), + p2 = {id: previewId, index: index, file: file, files: files}; + return self.isUploadable ? self._showUploadError(mesg, p1) : self._showError(mesg, p2); + }; + self.reader = null; + self._resetUpload(); + self._hideFileIcon(); + if (self.isUploadable) { + self.$container.find('.file-drop-zone .' + self.dropZoneTitleClass).remove(); + } + if (isDragDrop) { + tfiles = []; + while (files[i]) { + f = files[i]; + if (!f.type && f.size % 4096 === 0) { + folders++; + } else { + tfiles.push(f); + } + i++; + } + } else { + if (e.target.files === undefined) { + tfiles = e.target && e.target.value ? [ + {name: e.target.value.replace(/^.+\\/, '')} + ] : []; + } else { + tfiles = e.target.files; + } + } + if (isEmpty(tfiles) || tfiles.length === 0) { + if (!isAjaxUpload) { + self.clear(); + } + self._showFolderError(folders); + self._raise('fileselectnone'); + return; + } + self._resetErrors(); + len = tfiles.length; + total = self._getFileCount(self.isUploadable ? (self.getFileStack().length + len) : len); + if (self.maxFileCount > 0 && total > self.maxFileCount) { + if (!self.autoReplace || len > self.maxFileCount) { + n = (self.autoReplace && len > self.maxFileCount) ? len : total; + msg = self.msgFilesTooMany.replace('{m}', self.maxFileCount).replace('{n}', n); + self.isError = throwError(msg, null, null, null); + self.$captionContainer.find('.kv-caption-icon').hide(); + self._setCaption('', true); + self.$container.removeClass('file-input-new file-input-ajax-new'); + return; + } + if (total > self.maxFileCount) { + self._resetPreviewThumbs(isAjaxUpload); + } + } else { + if (!isAjaxUpload || flagSingle) { + self._resetPreviewThumbs(false); + if (flagSingle) { + self.clearStack(); + } + } else { + if (isAjaxUpload && ctr === 0 && (!previewCache.count(self.id) || self.overwriteInitial)) { + self._resetPreviewThumbs(true); + } + } + } + if (self.isPreviewable) { + self._readFiles(tfiles); + } else { + self._updateFileDetails(1); + } + self._showFolderError(folders); + }, + _abort: function (params) { + var self = this, data; + if (self.ajaxAborted && typeof self.ajaxAborted === "object" && self.ajaxAborted.message !== undefined) { + data = $.extend(true, {}, self._getOutData(), params); + data.abortData = self.ajaxAborted.data || {}; + data.abortMessage = self.ajaxAborted.message; + self.cancel(); + self._setProgress(101, self.$progress, self.msgCancelled); + self._showUploadError(self.ajaxAborted.message, data, 'filecustomerror'); + return true; + } + return false; + }, + _resetFileStack: function () { + var self = this, i = 0, newstack = [], newnames = []; + self._getThumbs().each(function () { + var $thumb = $(this), ind = $thumb.attr('data-fileindex'), + file = self.filestack[ind]; + if (ind === -1) { + return; + } + if (file !== undefined) { + newstack[i] = file; + newnames[i] = self._getFileName(file); + $thumb.attr({ + 'id': self.previewInitId + '-' + i, + 'data-fileindex': i + }); + i++; + } else { + $thumb.attr({ + 'id': 'uploaded-' + uniqId(), + 'data-fileindex': '-1' + }); + } + }); + self.filestack = newstack; + self.filenames = newnames; + }, + clearStack: function () { + var self = this; + self.filestack = []; + self.filenames = []; + return self.$element; + }, + updateStack: function (i, file) { + var self = this; + self.filestack[i] = file; + self.filenames[i] = self._getFileName(file); + return self.$element; + }, + addToStack: function (file) { + var self = this; + self.filestack.push(file); + self.filenames.push(self._getFileName(file)); + return self.$element; + }, + getFileStack: function (skipNull) { + var self = this; + return self.filestack.filter(function (n) { + return (skipNull ? n !== undefined : n !== undefined && n !== null); + }); + }, + getFilesCount: function () { + var self = this, len = self.isUploadable ? self.getFileStack().length : self.$element.get(0).files.length; + return self._getFileCount(len); + }, + lock: function () { + var self = this; + self._resetErrors(); + self.disable(); + if (self.showRemove) { + addCss(self.$container.find('.fileinput-remove'), 'hide'); + } + if (self.showCancel) { + self.$container.find('.fileinput-cancel').removeClass('hide'); + } + self._raise('filelock', [self.filestack, self._getExtraData()]); + return self.$element; + }, + unlock: function (reset) { + var self = this; + if (reset === undefined) { + reset = true; + } + self.enable(); + if (self.showCancel) { + addCss(self.$container.find('.fileinput-cancel'), 'hide'); + } + if (self.showRemove) { + self.$container.find('.fileinput-remove').removeClass('hide'); + } + if (reset) { + self._resetFileStack(); + } + self._raise('fileunlock', [self.filestack, self._getExtraData()]); + return self.$element; + }, + cancel: function () { + var self = this, xhr = self.ajaxRequests, len = xhr.length, i; + if (len > 0) { + for (i = 0; i < len; i += 1) { + self.cancelling = true; + xhr[i].abort(); + } + } + self._setProgressCancelled(); + self._getThumbs().each(function () { + var $thumb = $(this), ind = $thumb.attr('data-fileindex'); + $thumb.removeClass('file-uploading'); + if (self.filestack[ind] !== undefined) { + $thumb.find('.kv-file-upload').removeClass('disabled').removeAttr('disabled'); + $thumb.find('.kv-file-remove').removeClass('disabled').removeAttr('disabled'); + } + self.unlock(); + }); + return self.$element; + }, + clear: function () { + var self = this, cap; + self.$btnUpload.removeAttr('disabled'); + self._getThumbs().find('video,audio,img').each(function () { + cleanMemory($(this)); + }); + self._resetUpload(); + self.clearStack(); + self._clearFileInput(); + self._resetErrors(true); + self._raise('fileclear'); + if (self._hasInitialPreview()) { + self._showFileIcon(); + self._resetPreview(); + self._initPreviewActions(); + self.$container.removeClass('file-input-new'); + } else { + self._getThumbs().each(function () { + self._clearObjects($(this)); + }); + if (self.isUploadable) { + previewCache.data[self.id] = {}; + } + self.$preview.html(''); + cap = (!self.overwriteInitial && self.initialCaption.length > 0) ? self.initialCaption : ''; + self.$caption.html(cap); + self.$caption.attr('title', ''); + addCss(self.$container, 'file-input-new'); + self._validateDefaultPreview(); + } + if (self.$container.find('.file-preview-frame').length === 0) { + if (!self._initCaption()) { + self.$captionContainer.find('.kv-caption-icon').hide(); + } + } + self._hideFileIcon(); + self._raise('filecleared'); + self.$captionContainer.focus(); + self._setFileDropZoneTitle(); + return self.$element; + }, + reset: function () { + var self = this; + self._resetPreview(); + self.$container.find('.fileinput-filename').text(''); + self._raise('filereset'); + addCss(self.$container, 'file-input-new'); + if (self.$preview.find('.file-preview-frame').length || self.isUploadable && self.dropZoneEnabled) { + self.$container.removeClass('file-input-new'); + } + self._setFileDropZoneTitle(); + self.clearStack(); + self.formdata = {}; + return self.$element; + }, + disable: function () { + var self = this; + self.isDisabled = true; + self._raise('filedisabled'); + self.$element.attr('disabled', 'disabled'); + self.$container.find(".kv-fileinput-caption").addClass("file-caption-disabled"); + self.$container.find(".btn-file, .fileinput-remove, .fileinput-upload, .file-preview-frame button").attr( + "disabled", + true); + self._initDragDrop(); + return self.$element; + }, + enable: function () { + var self = this; + self.isDisabled = false; + self._raise('fileenabled'); + self.$element.removeAttr('disabled'); + self.$container.find(".kv-fileinput-caption").removeClass("file-caption-disabled"); + self.$container.find( + ".btn-file, .fileinput-remove, .fileinput-upload, .file-preview-frame button").removeAttr("disabled"); + self._initDragDrop(); + return self.$element; + }, + upload: function () { + var self = this, totLen = self.getFileStack().length, params = {}, + i, outData, len, hasExtraData = !$.isEmptyObject(self._getExtraData()); + if (self.minFileCount > 0 && self._getFileCount(totLen) < self.minFileCount) { + self._noFilesError(params); + return; + } + if (!self.isUploadable || self.isDisabled || (totLen === 0 && !hasExtraData)) { + return; + } + self._resetUpload(); + self.$progress.removeClass('hide'); + self.uploadCount = 0; + self.uploadStatus = {}; + self.uploadLog = []; + self.lock(); + self._setProgress(2); + if (totLen === 0 && hasExtraData) { + self._uploadExtraOnly(); + return; + } + len = self.filestack.length; + self.hasInitData = false; + if (self.uploadAsync) { + outData = self._getOutData(); + self._raise('filebatchpreupload', [outData]); + self.fileBatchCompleted = false; + self.uploadCache = {content: [], config: [], tags: [], append: true}; + self.uploadAsyncCount = self.getFileStack().length; + for (i = 0; i < len; i++) { + self.uploadCache.content[i] = null; + self.uploadCache.config[i] = null; + self.uploadCache.tags[i] = null; + } + for (i = 0; i < len; i++) { + if (self.filestack[i] !== undefined) { + self._uploadSingle(i, self.filestack, true); + } + } + return; + } + self._uploadBatch(); + return self.$element; + }, + destroy: function () { + var self = this, $cont = self.$container; + $cont.find('.file-drop-zone').off(); + self.$element.insertBefore($cont).off(NAMESPACE).removeData(); + $cont.off().remove(); + return self.$element; + }, + refresh: function (options) { + var self = this, $el = self.$element; + options = options ? $.extend(true, {}, self.options, options) : self.options; + self.destroy(); + $el.fileinput(options); + if ($el.val()) { + $el.trigger('change.fileinput'); + } + return $el; + } + }; + + $.fn.fileinput = function (option) { + if (!hasFileAPISupport() && !isIE(9)) { + return; + } + var args = Array.apply(null, arguments), retvals = []; + args.shift(); + this.each(function () { + var self = $(this), data = self.data('fileinput'), options = typeof option === 'object' && option, + theme = options.theme || self.data('theme'), l = {}, t = {}, + lang = options.language || self.data('language') || 'zh', opts; + if (!data) { + if (theme) { + t = $.fn.fileinputThemes[theme] || {}; + } + if (lang !== 'en' && !isEmpty($.fn.fileinputLocales[lang])) { + l = $.fn.fileinputLocales[lang] || {}; + } + opts = $.extend(true, {}, $.fn.fileinput.defaults, t, $.fn.fileinputLocales.en, l, options, + self.data()); + data = new FileInput(this, opts); + self.data('fileinput', data); + } + + if (typeof option === 'string') { + retvals.push(data[option].apply(data, args)); + } + }); + switch (retvals.length) { + case 0: + return this; + case 1: + return retvals[0]; + default: + return retvals; + } + }; + + $.fn.fileinput.defaults = { + language: 'en', + showCaption: true, + showBrowse: true, + showPreview: true, + showRemove: true, + showUpload: true, + showCancel: true, + showClose: true, + showUploadedThumbs: true, + browseOnZoneClick: false, + autoReplace: false, + previewClass: '', + captionClass: '', + mainClass: 'file-caption-main', + mainTemplate: null, + purifyHtml: true, + fileSizeGetter: null, + initialCaption: '', + initialPreview: [], + initialPreviewDelimiter: '*$$*', + initialPreviewAsData: false, + initialPreviewFileType: 'image', + initialPreviewConfig: [], + initialPreviewThumbTags: [], + previewThumbTags: {}, + initialPreviewShowDelete: true, + removeFromPreviewOnError: false, + deleteUrl: '', + deleteExtraData: {}, + overwriteInitial: true, + layoutTemplates: defaultLayoutTemplates, + previewTemplates: defaultPreviewTemplates, + previewZoomSettings: defaultPreviewZoomSettings, + previewZoomButtonIcons: { + prev: '', + next: '', + toggleheader: '', + fullscreen: '', + borderless: '', + close: '' + }, + previewZoomButtonClasses: { + prev: 'btn btn-navigate', + next: 'btn btn-navigate', + toggleheader: 'btn btn-default btn-header-toggle', + fullscreen: 'btn btn-default', + borderless: 'btn btn-default', + close: 'btn btn-default' + }, + allowedPreviewTypes: defaultPreviewTypes, + allowedPreviewMimeTypes: null, + allowedFileTypes: null, + allowedFileExtensions: null, + defaultPreviewContent: null, + customLayoutTags: {}, + customPreviewTags: {}, + previewSettings: defaultPreviewSettings, + fileTypeSettings: defaultFileTypeSettings, + previewFileIcon: '', + previewFileIconClass: 'file-other-icon', + previewFileIconSettings: {}, + previewFileExtSettings: {}, + buttonLabelClass: 'hidden-xs', + browseIcon: ' ', + browseClass: 'btn btn-primary', + removeIcon: '', + removeClass: 'btn btn-default', + cancelIcon: '', + cancelClass: 'btn btn-default', + uploadIcon: '', + uploadClass: 'btn btn-default', + uploadUrl: null, + uploadAsync: true, + uploadExtraData: {}, + zoomModalHeight: 480, + minImageWidth: null, + minImageHeight: null, + maxImageWidth: null, + maxImageHeight: null, + resizeImage: false, + resizePreference: 'width', + resizeQuality: 0.92, + resizeDefaultImageType: 'image/jpeg', + minFileSize: 0, + maxFileSize: 0, + maxFilePreviewSize: 25600, // 25 MB + minFileCount: 0, + maxFileCount: 0, + validateInitialCount: false, + msgValidationErrorClass: 'text-danger', + msgValidationErrorIcon: ' ', + msgErrorClass: 'file-error-message', + progressThumbClass: "progress-bar progress-bar-success progress-bar-striped active", + progressClass: "progress-bar progress-bar-success progress-bar-striped active", + progressCompleteClass: "progress-bar progress-bar-success", + progressErrorClass: "progress-bar progress-bar-danger", + progressUploadThreshold: 99, + previewFileType: 'image', + elCaptionContainer: null, + elCaptionText: null, + elPreviewContainer: null, + elPreviewImage: null, + elPreviewStatus: null, + elErrorContainer: null, + errorCloseButton: '×', + slugCallback: null, + dropZoneEnabled: true, + dropZoneTitleClass: 'file-drop-zone-title', + fileActionSettings: {}, + otherActionButtons: '', + textEncoding: 'UTF-8', + ajaxSettings: {}, + ajaxDeleteSettings: {}, + showAjaxErrorDetails: true + }; + + $.fn.fileinputLocales.en = { + fileSingle: 'file', + filePlural: 'files', + browseLabel: 'Browse …', + removeLabel: 'Remove', + removeTitle: 'Clear selected files', + cancelLabel: 'Cancel', + cancelTitle: 'Abort ongoing upload', + uploadLabel: 'Upload', + uploadTitle: 'Upload selected files', + msgNo: 'No', + msgNoFilesSelected: 'No files selected', + msgCancelled: 'Cancelled', + msgZoomModalHeading: 'Detailed Preview', + msgSizeTooSmall: 'File "{name}" ({size} KB) is too small and must be larger than {minSize} KB.', + msgSizeTooLarge: 'File "{name}" ({size} KB) exceeds maximum allowed upload size of {maxSize} KB.', + msgFilesTooLess: 'You must select at least {n} {files} to upload.', + msgFilesTooMany: 'Number of files selected for upload ({n}) exceeds maximum allowed limit of {m}.', + msgFileNotFound: 'File "{name}" not found!', + msgFileSecured: 'Security restrictions prevent reading the file "{name}".', + msgFileNotReadable: 'File "{name}" is not readable.', + msgFilePreviewAborted: 'File preview aborted for "{name}".', + msgFilePreviewError: 'An error occurred while reading the file "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Invalid type for file "{name}". Only "{types}" files are supported.', + msgInvalidFileExtension: 'Invalid extension for file "{name}". Only "{extensions}" files are supported.', + msgUploadAborted: 'The file upload was aborted', + msgUploadThreshold: 'Processing...', + msgValidationError: 'Validation Error', + msgLoading: 'Loading file {index} of {files} …', + msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.', + msgSelected: '{n} {files} selected', + msgFoldersNotAllowed: 'Drag & drop files only! {n} folder(s) dropped were skipped.', + msgImageWidthSmall: 'Width of image file "{name}" must be at least {size} px.', + msgImageHeightSmall: 'Height of image file "{name}" must be at least {size} px.', + msgImageWidthLarge: 'Width of image file "{name}" cannot exceed {size} px.', + msgImageHeightLarge: 'Height of image file "{name}" cannot exceed {size} px.', + msgImageResizeError: 'Could not get the image dimensions to resize.', + msgImageResizeException: 'Error while resizing the image.
    {errors}
    ', + dropZoneTitle: 'Drag & drop files here …', + dropZoneClickTitle: '
    (or click to select {files})', + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; + + $.fn.fileinput.Constructor = FileInput; + + /** + * Convert automatically file inputs with class 'file' into a bootstrap fileinput control. + */ + $(document).ready(function () { + var $input = $('input.file[type=file]'); + if ($input.length) { + $input.fileinput(); + } + }); +})); + +(function ($) { + "use strict"; + $.fn.fileinputLocales['zh'] = { + fileSingle: '文件', + filePlural: '个文件', + browseLabel: '选择 …', + removeLabel: '移除', + removeTitle: '清除选中文件', + cancelLabel: '取消', + cancelTitle: '取消进行中的上传', + uploadLabel: '上传', + uploadTitle: '上传选中文件', + msgNo: '没有', + msgNoFilesSelected: '', + msgCancelled: '取消', + msgZoomModalHeading: '详细预览', + msgSizeTooSmall: 'File "{name}" ({size} KB) 超过了大小下限 {minSize} KB.', + msgSizeTooLarge: '文件 "{name}" ({size} KB) 超过了大小上限 {maxSize} KB.', + msgFilesTooLess: '你必须选择最少 {n} {files} 来上传. ', + msgFilesTooMany: '选择的上传文件个数 ({n}) 超出最大文件的限制个数 {m}.', + msgFileNotFound: '文件 "{name}" 未找到!', + msgFileSecured: '安全限制,为了防止读取文件 "{name}".', + msgFileNotReadable: '文件 "{name}" 不可读.', + msgFilePreviewAborted: '取消 "{name}" 的预览.', + msgFilePreviewError: '读取 "{name}" 时出错.', + msgInvalidFileName: '"{name}" 的字符编码格式错误或系统不支持.', + msgInvalidFileType: '"{name}" 类型错误. 只支持 "{types}" 类型的文件.', + msgInvalidFileExtension: '"{name}" 文件扩展名错误. 只支持扩展名为"{extensions}" 的文件.', + msgUploadAborted: '该文件上传被中止', + msgUploadThreshold: '处理中...', + msgValidationError: '验证错误', + msgLoading: '加载第 {index} 文件 共 {files} …', + msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.', + msgSelected: '{n} {files} 选中', + msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.', + msgImageWidthSmall: '图像文件"{name}"的宽度必须是至少{size}像素.', + msgImageHeightSmall: '图像文件"{name}"的高度必须至少为{size}像素.', + msgImageWidthLarge: '图像文件"{name}"的宽度不能超过{size}像素.', + msgImageHeightLarge: '图像文件"{name}"的高度不能超过{size}像素.', + msgImageResizeError: '无法获取的图像尺寸调整。', + msgImageResizeException: '错误而调整图像大小。
    {errors}
    ', + dropZoneTitle: '拖拽文件到这里 …
    支持多文件同时上传', + dropZoneClickTitle: '
    (或点击{files}按钮选择文件)', + fileActionSettings: { + removeTitle: '删除文件', + uploadTitle: '上传文件', + zoomTitle: '查看详情', + dragTitle: '移动 / 重置', + indicatorNewTitle: '没有上传', + indicatorSuccessTitle: '上传', + indicatorErrorTitle: '上传错误', + indicatorLoadingTitle: '上传 ...' + }, + previewZoomButtonTitles: { + prev: '预览上一个文件', + next: '预览下一个文件', + toggleheader: '缩放', + fullscreen: '全屏', + borderless: '无边界模式', + close: '关闭当前预览' + } + }; +})(window.jQuery); \ No newline at end of file diff --git a/rootfs/link/web/vendor/fileinput/js/fileinput.min.js b/rootfs/link/web/vendor/fileinput/js/fileinput.min.js new file mode 100644 index 0000000..44a9198 --- /dev/null +++ b/rootfs/link/web/vendor/fileinput/js/fileinput.min.js @@ -0,0 +1,13 @@ +/*! + * bootstrap-fileinput v4.3.6 + * http://plugins.krajee.com/file-input + * + * Author: Kartik Visweswaran + * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com + * + * Licensed under the BSD 3-Clause + * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md + */!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(window.jQuery)}(function(a){"use strict";a.fn.fileinputLocales={},a.fn.fileinputThemes={};var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la,ma,na,oa;b=".fileinput",c="kvFileinputModal",d='style="width:{width};height:{height};"',e='\n\n\n\n\n\n',f='
    \n{previewFileIcon}\n
    ',g=window.URL||window.webkitURL,h=function(a,b,c){return void 0!==a&&(c?a===b:a.match(b))},i=function(a){if("Microsoft Internet Explorer"!==navigator.appName)return!1;if(10===a)return new RegExp("msie\\s"+a,"i").test(navigator.userAgent);var c,b=document.createElement("div");return b.innerHTML="",c=b.getElementsByTagName("i").length,document.body.appendChild(b),b.parentNode.removeChild(b),c},j=function(a,c,d,e){var f=e?c:c.split(" ").join(b+" ")+b;a.off(f).on(f,d)},k={data:{},init:function(a){var b=a.initialPreview,c=a.id;b.length>0&&!ea(b)&&(b=b.split(a.initialPreviewDelimiter)),k.data[c]={content:b,config:a.initialPreviewConfig,tags:a.initialPreviewThumbTags,delimiter:a.initialPreviewDelimiter,previewFileType:a.initialPreviewFileType,previewAsData:a.initialPreviewAsData,template:a.previewGenericTemplate,showZoom:a.fileActionSettings.showZoom,showDrag:a.fileActionSettings.showDrag,getSize:function(b){return a._getSize(b)},parseTemplate:function(b,c,d,e,f,g,h){var i=" file-preview-initial";return a._generatePreviewTemplate(b,c,d,e,f,!1,null,i,g,h)},msg:function(b){return a._getMsgSelected(b)},initId:a.previewInitId,footer:a._getLayoutTemplate("footer").replace(/\{progress}/g,a._renderThumbProgress()),isDelete:a.initialPreviewShowDelete,caption:a.initialCaption,actions:function(b,c,d,e,f,g,h){return a._renderFileActions(b,c,d,e,f,g,h,!0)}}},fetch:function(a){return k.data[a].content.filter(function(a){return null!==a})},count:function(a,b){return k.data[a]&&k.data[a].content?b?k.data[a].content.length:k.fetch(a).length:0},get:function(b,c,d){var j,l,n,o,p,q,e="init_"+c,f=k.data[b],g=f.config[c],h=f.content[c],i=f.initId+"-"+e,m=" file-preview-initial",r=fa("previewAsData",g,f.previewAsData);return d=void 0===d||d,h?(g&&g.frameClass&&(m+=" "+g.frameClass),r?(n=f.previewAsData?fa("type",g,f.previewFileType||"generic"):"generic",o=fa("caption",g),p=k.footer(b,c,d,g&&g.size||null),q=fa("filetype",g,n),j=f.parseTemplate(n,h,o,q,i,p,e,null)):j=f.template.replace(/\{previewId}/g,i).replace(/\{frameClass}/g,m).replace(/\{fileindex}/g,e).replace(/\{content}/g,f.content[c]).replace(/\{template}/g,fa("type",g,f.previewFileType)).replace(/\{footer}/g,k.footer(b,c,d,g&&g.size||null)),f.tags.length&&f.tags[c]&&(j=ia(j,f.tags[c])),da(g)||da(g.frameAttr)||(l=a(document.createElement("div")).html(j),l.find(".file-preview-initial").attr(g.frameAttr),j=l.html(),l.remove()),j):""},add:function(b,c,d,e,f){var h,g=a.extend(!0,{},k.data[b]);return ea(c)||(c=c.split(g.delimiter)),f?(h=g.content.push(c)-1,g.config[h]=d,g.tags[h]=e):(h=c.length-1,g.content=c,g.config=d,g.tags=e),k.data[b]=g,h},set:function(b,c,d,e,f){var h,i,g=a.extend(!0,{},k.data[b]);if(c&&c.length&&(ea(c)||(c=c.split(g.delimiter)),i=c.filter(function(a){return null!==a}),i.length)){if(void 0===g.content&&(g.content=[]),void 0===g.config&&(g.config=[]),void 0===g.tags&&(g.tags=[]),f){for(h=0;h'+b+"
    ",caption:d}},footer:function(a,b,c,d){var e=k.data[a];if(c=void 0===c||c,0===e.config.length||da(e.config[b]))return"";var f=e.config[b],g=fa("caption",f),h=fa("width",f,"auto"),i=fa("url",f,!1),j=fa("key",f,null),l=fa("showDelete",f,!0),m=fa("showZoom",f,e.showZoom),n=fa("showDrag",f,e.showDrag),o=i===!1&&c,p=e.isDelete?e.actions(!1,l,m,n,o,i,j):"",q=e.footer.replace(/\{actions}/g,p);return q.replace(/\{caption}/g,g).replace(/\{size}/g,e.getSize(d)).replace(/\{width}/g,h).replace(/\{indicator}/g,"").replace(/\{indicatorTitle}/g,"")}},l=function(a,b){return b=b||0,"number"==typeof a?a:("string"==typeof a&&(a=parseFloat(a)),isNaN(a)?b:a)},m=function(){return!(!window.File||!window.FileReader)},n=function(){var a=document.createElement("div");return!i(9)&&(void 0!==a.draggable||void 0!==a.ondragstart&&void 0!==a.ondrop)},o=function(){return m()&&window.FormData},p=function(a,b){a.removeClass(b).addClass(b)},X={showRemove:!0,showUpload:!0,showZoom:!0,showDrag:!0,removeIcon:'',removeClass:"btn btn-xs btn-default",removeTitle:"Remove file",uploadIcon:'',uploadClass:"btn btn-xs btn-default",uploadTitle:"Upload file",zoomIcon:'',zoomClass:"btn btn-xs btn-default",zoomTitle:"View Details",dragIcon:'',dragClass:"text-info",dragTitle:"Move / Rearrange",dragSettings:{},indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:'',indicatorNewTitle:"Not uploaded yet",indicatorSuccessTitle:"Uploaded",indicatorErrorTitle:"Upload Error",indicatorLoadingTitle:"Uploading ..."},q='{preview}\n
    \n
    \n {caption}\n
    \n {remove}\n {cancel}\n {upload}\n {browse}\n
    \n
    ',r='{preview}\n
    \n{remove}\n{cancel}\n{upload}\n{browse}\n',s='
    \n {close}
    \n
    \n
    \n
    \n
    \n
    \n
    ',u='
    ×
    \n',t='',v='
    \n
    \n
    \n',w='',x='{icon} {label}',y='
    {icon} {label}
    ',z='',A='\n',B='
    \n
    \n {percent}%\n
    \n
    ',C="
    ({sizeText})",D='',E='
    \n \n {drag}\n
    {indicator}
    \n
    \n
    ',F='\n',G='',H='',I='{dragIcon}',J='
    \n',L=J+' title="{caption}" '+d+'>
    \n',M="
    {footer}\n
    \n",N="{content}\n",O='
    {data}
    \n",P='{caption}\n",Q='\n",R='\n",S='\n",T='\n'+e+" "+f+"\n\n",U='\n\n'+e+" "+f+"\n\n",V='\n',W='
    \n'+f+"\n
    \n",Y={main1:q,main2:r,preview:s,close:u,fileIcon:t,caption:v,modalMain:z,modal:A,progress:B,size:C,footer:D,actions:E,actionDelete:F,actionUpload:G,actionZoom:H,actionDrag:I,btnDefault:w,btnLink:x,btnBrowse:y},Z={generic:K+N+M,html:K+O+M,image:K+P+M,text:K+Q+M,video:L+R+M,audio:L+S+M,flash:L+T+M,object:L+U+M,pdf:L+V+M,other:L+W+M},_=["image","html","text","video","audio","flash","pdf","object"],ba={image:{width:"auto",height:"160px"},html:{width:"213px",height:"160px"},text:{width:"213px",height:"160px"},video:{width:"213px",height:"160px"},audio:{width:"213px",height:"80px"},flash:{width:"213px",height:"160px"},object:{width:"160px",height:"160px"},pdf:{width:"160px",height:"160px"},other:{width:"160px",height:"160px"}},$={image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"100%",height:"100%","min-height":"480px"},text:{width:"100%",height:"100%","min-height":"480px"},video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"480px"},object:{width:"auto",height:"100%","min-height":"480px"},pdf:{width:"100%",height:"100%","min-height":"480px"},other:{width:"auto",height:"100%","min-height":"480px"}},ca={image:function(a,b){return h(a,"image.*")||h(b,/\.(gif|png|jpe?g)$/i)},html:function(a,b){return h(a,"text/html")||h(b,/\.(htm|html)$/i)},text:function(a,b){return h(a,"text.*")||h(b,/\.(xml|javascript)$/i)||h(b,/\.(txt|md|csv|nfo|ini|json|php|js|css)$/i)},video:function(a,b){return h(a,"video.*")&&(h(a,/(ogg|mp4|mp?g|mov|webm|3gp)$/i)||h(b,/\.(og?|mp4|webm|mp?g|mov|3gp)$/i))},audio:function(a,b){return h(a,"audio.*")&&(h(b,/(ogg|mp3|mp?g|wav)$/i)||h(b,/\.(og?|mp3|mp?g|wav)$/i))},flash:function(a,b){return h(a,"application/x-shockwave-flash",!0)||h(b,/\.(swf)$/i)},pdf:function(a,b){return h(a,"application/pdf",!0)||h(b,/\.(pdf)$/i)},object:function(){return!0},other:function(){return!0}},da=function(b,c){return void 0===b||null===b||0===b.length||c&&""===a.trim(b)},ea=function(a){return Array.isArray(a)||"[object Array]"===Object.prototype.toString.call(a)},fa=function(a,b,c){return c=c||"",b&&"object"==typeof b&&a in b?b[a]:c},aa=function(b,c,d){return da(b)||da(b[c])?d:a(b[c])},ga=function(){return Math.round((new Date).getTime()+100*Math.random())},ha=function(a){return a.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},ia=function(b,c){var d=b;return c?(a.each(c,function(a,b){"function"==typeof b&&(b=b()),d=d.split(a).join(b)}),d):d},ja=function(a){var b=a.is("img")?a.attr("src"):a.find("source").attr("src");g.revokeObjectURL(b)},ka=function(a){var b=a.lastIndexOf("/");return b===-1&&(b=a.lastIndexOf("\\")),a.split(a.substring(b,b+1)).pop()},la=function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement},ma=function(a){a&&!la()?document.documentElement.requestFullscreen?document.documentElement.requestFullscreen():document.documentElement.msRequestFullscreen?document.documentElement.msRequestFullscreen():document.documentElement.mozRequestFullScreen?document.documentElement.mozRequestFullScreen():document.documentElement.webkitRequestFullscreen&&document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()},na=function(a,b,c){if(c>=a.length)for(var d=c-a.length;d--+1;)a.push(void 0);return a.splice(c,0,a.splice(b,1)[0]),a},oa=function(b,c){var d=this;d.$element=a(b),d._validate()&&(d.isPreviewable=m(),d.isIE9=i(9),d.isIE10=i(10),d.isPreviewable||d.isIE9?(d._init(c),d._listen()):d.$element.removeClass("file-loading"))},oa.prototype={constructor:oa,_init:function(b){var e,c=this,d=c.$element;a.each(b,function(a,b){switch(a){case"minFileCount":case"maxFileCount":case"maxFileSize":c[a]=l(b);break;default:c[a]=b}}),c.fileInputCleared=!1,c.fileBatchCompleted=!0,c.isPreviewable||(c.showPreview=!1),c.uploadFileAttr=da(d.attr("name"))?"file_data":d.attr("name"),c.reader=null,c.formdata={},c.clearStack(),c.uploadCount=0,c.uploadStatus={},c.uploadLog=[],c.uploadAsyncCount=0,c.loadedImages=[],c.totalImagesCount=0,c.ajaxRequests=[],c.isError=!1,c.ajaxAborted=!1,c.cancelling=!1,e=c._getLayoutTemplate("progress"),c.progressTemplate=e.replace("{class}",c.progressClass),c.progressCompleteTemplate=e.replace("{class}",c.progressCompleteClass),c.progressErrorTemplate=e.replace("{class}",c.progressErrorClass),c.dropZoneEnabled=n()&&c.dropZoneEnabled,c.isDisabled=c.$element.attr("disabled")||c.$element.attr("readonly"),c.isUploadable=o()&&!da(c.uploadUrl),c.isClickable=c.browseOnZoneClick&&c.showPreview&&(c.isUploadable&&c.dropZoneEnabled||!da(c.defaultPreviewContent)),c.slug="function"==typeof b.slugCallback?b.slugCallback:c._slugDefault,c.mainTemplate=c.showCaption?c._getLayoutTemplate("main1"):c._getLayoutTemplate("main2"),c.captionTemplate=c._getLayoutTemplate("caption"),c.previewGenericTemplate=c._getPreviewTemplate("generic"),c.resizeImage&&(c.maxImageWidth||c.maxImageHeight)&&(c.imageCanvas=document.createElement("canvas"),c.imageCanvasContext=c.imageCanvas.getContext("2d")),da(c.$element.attr("id"))&&c.$element.attr("id",ga()),void 0===c.$container?c.$container=c._createContainer():c._refreshContainer(),c.$dropZone=c.$container.find(".file-drop-zone"),c.$progress=c.$container.find(".kv-upload-progress"),c.$btnUpload=c.$container.find(".fileinput-upload"),c.$captionContainer=aa(b,"elCaptionContainer",c.$container.find(".file-caption")),c.$caption=aa(b,"elCaptionText",c.$container.find(".file-caption-name")),c.$previewContainer=aa(b,"elPreviewContainer",c.$container.find(".file-preview")),c.$preview=aa(b,"elPreviewImage",c.$container.find(".file-preview-thumbnails")),c.$previewStatus=aa(b,"elPreviewStatus",c.$container.find(".file-preview-status")),c.$errorContainer=aa(b,"elErrorContainer",c.$previewContainer.find(".kv-fileinput-error")),da(c.msgErrorClass)||p(c.$errorContainer,c.msgErrorClass),c.$errorContainer.hide(),c.fileActionSettings=a.extend(!0,X,b.fileActionSettings),c.previewInitId="preview-"+ga(),c.id=c.$element.attr("id"),k.init(c),c._initPreview(!0),c._initPreviewActions(),c.options=b,c._setFileDropZoneTitle(),c.$element.removeClass("file-loading"),c.$element.attr("disabled")&&c.disable(),c._initZoom()},_validate:function(){var b,a=this;return"file"===a.$element.attr("type")||(b='

    Invalid Input Type

    You must set an input type = file for bootstrap-fileinput plugin to initialize.
    ',a.$element.after(b),!1)},_errorsExist:function(){var c,b=this;return!!b.$errorContainer.find("li").length||(c=a(document.createElement("div")).html(b.$errorContainer.html()),c.find("span.kv-error-close").remove(),c.find("ul").remove(),!!a.trim(c.text()).length)},_errorHandler:function(a,b){var c=this,d=a.target.error;d.code===d.NOT_FOUND_ERR?c._showError(c.msgFileNotFound.replace("{name}",b)):d.code===d.SECURITY_ERR?c._showError(c.msgFileSecured.replace("{name}",b)):d.code===d.NOT_READABLE_ERR?c._showError(c.msgFileNotReadable.replace("{name}",b)):d.code===d.ABORT_ERR?c._showError(c.msgFilePreviewAborted.replace("{name}",b)):c._showError(c.msgFilePreviewError.replace("{name}",b))},_addError:function(a){var b=this,c=b.$errorContainer;a&&c.length&&(c.html(b.errorCloseButton+a),j(c.find(".kv-error-close"),"click",function(){c.fadeOut("slow")}))},_resetErrors:function(a){var b=this,c=b.$errorContainer;b.isError=!1,b.$container.removeClass("has-error"),c.html(""),a?c.fadeOut("slow"):c.hide()},_showFolderError:function(a){var d,b=this,c=b.$errorContainer;a&&(d=b.msgFoldersNotAllowed.replace(/\{n}/g,a),b._addError(d),p(b.$container,"has-error"),c.fadeIn(800),b._raise("filefoldererror",[a,d]))},_showUploadError:function(a,b,c){var d=this,e=d.$errorContainer,f=c||"fileuploaderror",g=b&&b.id?'
  • '+a+"
  • ":"
  • "+a+"
  • ";return 0===e.find("ul").length?d._addError("
      "+g+"
    "):e.find("ul").append(g),e.fadeIn(800),d._raise(f,[b,a]),d.$container.removeClass("file-input-new"),p(d.$container,"has-error"),!0},_showError:function(a,b,c){var d=this,e=d.$errorContainer,f=c||"fileerror";return b=b||{},b.reader=d.reader,d._addError(a),e.fadeIn(800),d._raise(f,[b,a]),d.isUploadable||d._clearFileInput(),d.$container.removeClass("file-input-new"),p(d.$container,"has-error"),d.$btnUpload.attr("disabled",!0),!0},_noFilesError:function(a){var b=this,c=b.minFileCount>1?b.filePlural:b.fileSingle,d=b.msgFilesTooLess.replace("{n}",b.minFileCount).replace("{files}",c),e=b.$errorContainer;b._addError(d),b.isError=!0,b._updateFileDetails(0),e.fadeIn(800),b._raise("fileerror",[a,d]),b._clearFileInput(),p(b.$container,"has-error")},_parseError:function(b,c,d){var e=this,f=a.trim(c+""),g="."===f.slice(-1)?"":".",h=void 0!==b.responseJSON&&void 0!==b.responseJSON.error?b.responseJSON.error:b.responseText;return e.cancelling&&e.msgUploadAborted&&(f=e.msgUploadAborted),e.showAjaxErrorDetails&&h?(h=a.trim(h.replace(/\n\s*\n/g,"\n")),h=h.length>0?"
    "+h+"
    ":"",f+=g+h):f+=g,e.cancelling=!1,d?""+d+": "+f:f},_parseFileType:function(a){var c,d,e,f,b=this;for(f=0;f<_.length;f+=1)if(e=_[f],c=fa(e,b.fileTypeSettings,ca[e]),d=c(a.type,a.name)?e:"",!da(d))return d;return"other"},_parseFilePreviewIcon:function(b,c){var e,f,d=this,g=d.previewFileIcon;return c&&c.indexOf(".")>-1&&(f=c.split(".").pop(),d.previewFileIconSettings&&d.previewFileIconSettings[f]&&(g=d.previewFileIconSettings[f]),d.previewFileExtSettings&&a.each(d.previewFileExtSettings,function(a,b){return d.previewFileIconSettings[a]&&b(f)?void(g=d.previewFileIconSettings[a]):void(e=!0)})),b.indexOf("{previewFileIcon}")>-1?b.replace(/\{previewFileIconClass}/g,d.previewFileIconClass).replace(/\{previewFileIcon}/g,g):b},_raise:function(b,c){var d=this,e=a.Event(b);if(void 0!==c?d.$element.trigger(e,c):d.$element.trigger(e),e.isDefaultPrevented())return!1;if(!e.result)return e.result;switch(b){case"filebatchuploadcomplete":case"filebatchuploadsuccess":case"fileuploaded":case"fileclear":case"filecleared":case"filereset":case"fileerror":case"filefoldererror":case"fileuploaderror":case"filebatchuploaderror":case"filedeleteerror":case"filecustomerror":case"filesuccessremove":break;default:d.ajaxAborted=e.result}return!0},_listenFullScreen:function(a){var d,e,b=this,c=b.$modal;c&&c.length&&(d=c&&c.find(".btn-fullscreen"),e=c&&c.find(".btn-borderless"),d.length&&e.length&&(d.removeClass("active").attr("aria-pressed","false"),e.removeClass("active").attr("aria-pressed","false"),a?d.addClass("active").attr("aria-pressed","true"):e.addClass("active").attr("aria-pressed","true"),c.hasClass("file-zoom-fullscreen")?b._maximizeZoomDialog():a?b._maximizeZoomDialog():e.removeClass("active").attr("aria-pressed","false")))},_listen:function(){var b=this,c=b.$element,d=c.closest("form"),e=b.$container;j(c,"change",a.proxy(b._change,b)),b.showBrowse&&j(b.$btnFile,"click",a.proxy(b._browse,b)),j(d,"reset",a.proxy(b.reset,b)),j(e.find(".fileinput-remove:not([disabled])"),"click",a.proxy(b.clear,b)),j(e.find(".fileinput-cancel"),"click",a.proxy(b.cancel,b)),b._initDragDrop(),b.isUploadable||j(d,"submit",a.proxy(b._submitForm,b)),j(b.$container.find(".fileinput-upload"),"click",a.proxy(b._uploadClick,b)),j(a(window),"resize",function(){b._listenFullScreen(screen.width===window.innerWidth&&screen.height===window.innerHeight)}),j(a(document),"webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange",function(){b._listenFullScreen(la())}),b._initClickable()},_initClickable:function(){var c,b=this;b.isClickable&&(c=b.isUploadable?b.$dropZone:b.$preview.find(".file-default-preview"),p(c,"clickable"),c.attr("tabindex",-1),j(c,"click",function(d){var e=a(d.target);e.parents(".file-preview-thumbnails").length&&!e.parents(".file-default-preview").length||(b.$element.trigger("click"),c.blur())}))},_initDragDrop:function(){var b=this,c=b.$dropZone;b.isUploadable&&b.dropZoneEnabled&&b.showPreview&&(j(c,"dragenter dragover",a.proxy(b._zoneDragEnter,b)),j(c,"dragleave",a.proxy(b._zoneDragLeave,b)),j(c,"drop",a.proxy(b._zoneDrop,b)),j(a(document),"dragenter dragover drop",b._zoneDragDropInit))},_zoneDragDropInit:function(a){a.stopPropagation(),a.preventDefault()},_zoneDragEnter:function(b){var c=this,d=a.inArray("Files",b.originalEvent.dataTransfer.types)>-1;return c._zoneDragDropInit(b),c.isDisabled||!d?(b.originalEvent.dataTransfer.effectAllowed="none",void(b.originalEvent.dataTransfer.dropEffect="none")):void p(c.$dropZone,"file-highlighted")},_zoneDragLeave:function(a){var b=this;b._zoneDragDropInit(a),b.isDisabled||b.$dropZone.removeClass("file-highlighted")},_zoneDrop:function(a){var b=this;a.preventDefault(),b.isDisabled||da(a.originalEvent.dataTransfer.files)||(b._change(a,"dragdrop"),b.$dropZone.removeClass("file-highlighted"))},_uploadClick:function(a){var d,b=this,c=b.$container.find(".fileinput-upload"),e=!c.hasClass("disabled")&&da(c.attr("disabled"));if(!a||!a.isDefaultPrevented()){if(!b.isUploadable)return void(e&&"submit"!==c.attr("type")&&(d=c.closest("form"),d.length&&d.trigger("submit"),a.preventDefault()));a.preventDefault(),e&&b.upload()}},_submitForm:function(){var a=this,b=a.$element,c=b.get(0).files;return c&&a.minFileCount>0&&a._getFileCount(c.length)