{
    "definitions": {},
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://jsonschema.net/",
    "type": "object",
    "required": [
        "addresses",
        "options",
        "states",
        "userActions"
    ],
    "properties": {
        "addresses": {
            "type": "object",
            "required": [
                "srcAddress",
                "optionalOutputAddress"
            ],
            "properties": {
                "srcAddress": {
                    "type": "string",
                    "default": "",
                    "pattern": "^(.*)$"
                },
                "optionalOutputAddress": {
                    "type": "string",
                    "default": "",
                    "pattern": "^(.*)$"
                }
            }
        },
        "options": {
            "type": "object",
            "required": [
                "rtspTcp"
            ],
            "properties": {
                "rtspTcp": {
                    "type": "boolean",
                    "default": false
                },
                "video": {
                    "type": "object",
                    "default": null,
                    "required": [
                        "codec",
                        "preset",
                        "bitrate",
                        "fps",
                        "profile",
                        "tune"
                    ],
                    "properties": {
                        "codec": {
                            "type": "string",
                            "default": "copy",
                            "pattern": "^(.*)$"
                        },
                        "preset": {
                            "type": "string",
                            "default": "ultrafast",
                            "pattern": "^(.*)$"
                        },
                        "bitrate": {
                            "type": "string",
                            "default": "4096",
                            "pattern": "^(.*)$"
                        },
                        "fps": {
                            "type": "string",
                            "default": "25",
                            "pattern": "^(.*)$"
                        },
                        "profile": {
                            "type": "string",
                            "default": "none",
                            "pattern": "^(.*)$"
                        },
                        "tune": {
                            "type": "string",
                            "default": "none",
                            "pattern": "^(.*)$"
                        }
                    }
                },
                "audio": {
                    "type": "object",
                    "required": [
                        "codec",
                        "preset",
                        "bitrate",
                        "channels",
                        "sampling"
                    ],
                    "properties": {
                        "codec": {
                            "type": "string",
                            "default": "auto",
                            "pattern": "^(.*)$"
                        },
                        "preset": {
                            "type": "string",
                            "default": "silence",
                            "pattern": "^(.*)$"
                        },
                        "bitrate": {
                            "type": "string",
                            "default": "64",
                            "pattern": "^(.*)$"
                        },
                        "channels": {
                            "type": "string",
                            "default": "mono",
                            "pattern": "^(.*)$"
                        },
                        "sampling": {
                            "type": "string",
                            "default": "44100",
                            "pattern": "^(.*)$"
                        }
                    }
                },
                "output": {
                    "type": "object",
                    "required": [
                        "type",
                        "rtmp",
                        "hls"
                    ],
                    "properties": {
                        "type": {
                            "type": "string",
                            "default": "rtmp",
                            "pattern": "^(rtmp|hls)$"
                        },
                        "rtmp": {
                            "type": "object",
                            "default": {}
                        },
                        "hls": {
                            "type": "object",
                            "required": [
                                "method",
                                "time",
                                "listSize",
                                "timeout"
                            ],
                            "properties": {
                                "method": {
                                    "type": "string",
                                    "default": "POST",
                                    "pattern": "^(POST|PUT)$"
                                },
                                "time": {
                                    "type": "string",
                                    "default": "2",
                                    "pattern": "^(.*)$"
                                },
                                "listSize": {
                                    "type": "string",
                                    "default": "10",
                                    "pattern": "^(.*)$"
                                },
                                "timeout": {
                                    "type": "string",
                                    "default": "10",
                                    "pattern": "^(.*)$"
                                }
                            }
                        }
                    }
                },
                "player": {
                    "type": "object",
                    "required": [
                        "autoplay",
                        "mute",
                        "statistics",
                        "color",
                        "logo"
                    ],
                    "properties": {
                        "autoplay": {
                            "type": "boolean",
                            "default": false
                        },
                        "mute": {
                            "type": "boolean",
                            "default": false
                        },
                        "statistics": {
                            "type": "boolean",
                            "default": false
                        },
                        "color": {
                            "type": "string",
                            "default": "#3daa48",
                            "pattern": "^#[0-9a-f]{6}$"
                        },
                        "logo": {
                            "type": "object",
                            "required": [
                                "image",
                                "position",
                                "link"
                            ],
                            "properties": {
                                "image": {
                                    "type": "string",
                                    "default": "",
                                    "pattern": "^(.*)$"
                                },
                                "position": {
                                    "type": "string",
                                    "default": "bottom-right",
                                    "pattern": "^(.*)$"
                                },
                                "link": {
                                    "type": "string",
                                    "default": "",
                                    "pattern": "^(.*)$"
                                }
                            }
                        }
                    }
                }
            }
        },
        "states": {
            "type": "object",
            "required": [
                "repeatToLocalNginx",
                "repeatToOptionalOutput"
            ],
            "properties": {
                "repeatToLocalNginx": {
                    "type": "object",
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "type": "string",
                            "default": "",
                            "pattern": "^(.*)$"
                        }
                    }
                },
                "repeatToOptionalOutput": {
                    "type": "object",
                    "required": [
                        "type"
                    ],
                    "properties": {
                        "type": {
                            "type": "string",
                            "default": "",
                            "pattern": "^(.*)$"
                        }
                    }
                }
            }
        },
        "userActions": {
            "type": "object",
            "required": [
                "repeatToLocalNginx",
                "repeatToOptionalOutput"
            ],
            "properties": {
                "repeatToLocalNginx": {
                    "type": "string",
                    "default": "",
                    "pattern": "^(.*)$"
                },
                "repeatToOptionalOutput": {
                    "type": "string",
                    "default": "",
                    "pattern": "^(.*)$"
                }
            }
        }
    }
}