gitextract__vy29lq8/ ├── .dockerignore ├── .github/ │ ├── DISCUSSION_TEMPLATE/ │ │ └── questions.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── config.yml │ │ └── feature.yml │ ├── dependabot.yml │ └── workflows/ │ ├── lint.yml │ ├── nightly_binaries.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── .golangci.yml ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── api/ │ ├── .redocly.yaml │ └── openapi.yaml ├── docker/ │ ├── ffmpeg-rpi.Dockerfile │ ├── ffmpeg.Dockerfile │ ├── rpi.Dockerfile │ └── standard.Dockerfile ├── docs/ │ ├── 1-kickoff/ │ │ ├── 1-introduction.md │ │ ├── 2-install.md │ │ ├── 3-upgrade.md │ │ ├── 4-basic-usage.md │ │ └── index.md │ ├── 2-publish/ │ │ ├── 01-overview.md │ │ ├── 02-srt-clients.md │ │ ├── 03-srt-cameras-and-servers.md │ │ ├── 04-webrtc-clients.md │ │ ├── 05-webrtc-servers.md │ │ ├── 06-rtsp-clients.md │ │ ├── 07-rtsp-cameras-and-servers.md │ │ ├── 08-rtmp-clients.md │ │ ├── 09-rtmp-cameras-and-servers.md │ │ ├── 10-hls-cameras-and-servers.md │ │ ├── 11-mpeg-ts.md │ │ ├── 12-rtp.md │ │ ├── 13-raspberry-pi-cameras.md │ │ ├── 14-generic-webcams.md │ │ ├── 15-ffmpeg.md │ │ ├── 16-gstreamer.md │ │ ├── 17-obs-studio.md │ │ ├── 18-python-opencv.md │ │ ├── 19-golang.md │ │ ├── 20-unity.md │ │ ├── 21-web-browsers.md │ │ └── index.md │ ├── 3-read/ │ │ ├── 01-overview.md │ │ ├── 02-srt.md │ │ ├── 03-webrtc.md │ │ ├── 04-rtsp.md │ │ ├── 05-rtmp.md │ │ ├── 06-hls.md │ │ ├── 07-ffmpeg.md │ │ ├── 08-gstreamer.md │ │ ├── 09-vlc.md │ │ ├── 10-obs-studio.md │ │ ├── 11-python-opencv.md │ │ ├── 12-golang.md │ │ ├── 13-unity.md │ │ ├── 14-web-browsers.md │ │ └── index.md │ ├── 4-other/ │ │ ├── 02-configuration.md │ │ ├── 03-authentication.md │ │ ├── 04-remuxing-reencoding-compression.md │ │ ├── 05-always-available.md │ │ ├── 06-record.md │ │ ├── 07-playback.md │ │ ├── 08-forward.md │ │ ├── 09-proxy.md │ │ ├── 10-extract-snapshots.md │ │ ├── 11-on-demand-publishing.md │ │ ├── 12-absolute-timestamps.md │ │ ├── 13-expose-the-server-in-a-subfolder.md │ │ ├── 14-embed-streams-in-a-website.md │ │ ├── 15-start-on-boot.md │ │ ├── 16-logging.md │ │ ├── 17-hooks.md │ │ ├── 18-control-api.md │ │ ├── 19-metrics.md │ │ ├── 20-performance.md │ │ ├── 21-srt-specific-features.md │ │ ├── 22-webrtc-specific-features.md │ │ ├── 23-rtsp-specific-features.md │ │ ├── 24-rtmp-specific-features.md │ │ ├── 25-decrease-packet-loss.md │ │ └── index.md │ ├── 5-references/ │ │ ├── 1-configuration-file.md │ │ ├── 2-control-api.md │ │ └── index.md │ ├── 6-misc/ │ │ ├── 1-compile.md │ │ ├── 2-license.md │ │ ├── 3-security.md │ │ ├── 4-specifications.md │ │ ├── 5-related-projects.md │ │ └── index.md │ └── redirects.yaml ├── go.mod ├── go.sum ├── internal/ │ ├── api/ │ │ ├── api.go │ │ ├── api_config_global.go │ │ ├── api_config_global_test.go │ │ ├── api_config_pathdefaults.go │ │ ├── api_config_pathdefaults_test.go │ │ ├── api_config_paths.go │ │ ├── api_config_paths_test.go │ │ ├── api_hls.go │ │ ├── api_hls_test.go │ │ ├── api_paths.go │ │ ├── api_paths_test.go │ │ ├── api_recordings.go │ │ ├── api_recordings_test.go │ │ ├── api_rtmp.go │ │ ├── api_rtmp_test.go │ │ ├── api_rtsp.go │ │ ├── api_rtsp_test.go │ │ ├── api_srt.go │ │ ├── api_srt_test.go │ │ ├── api_test.go │ │ ├── api_webrtc.go │ │ ├── api_webrtc_test.go │ │ ├── paginate.go │ │ ├── paginate_test.go │ │ └── testdata/ │ │ └── fuzz/ │ │ └── FuzzPaginate/ │ │ ├── 23731da0f18d31d0 │ │ ├── 34523a772174e26e │ │ └── 85649d45641911d0 │ ├── auth/ │ │ ├── credentials.go │ │ ├── error.go │ │ ├── jwt_claims.go │ │ ├── manager.go │ │ ├── manager_test.go │ │ └── request.go │ ├── certloader/ │ │ ├── certloader.go │ │ └── certloader_test.go │ ├── conf/ │ │ ├── always_available_track.go │ │ ├── always_available_track_codec.go │ │ ├── auth_action.go │ │ ├── auth_internal_user.go │ │ ├── auth_internal_user_permission.go │ │ ├── auth_method.go │ │ ├── conf.go │ │ ├── conf_test.go │ │ ├── credential.go │ │ ├── credential_test.go │ │ ├── decrypt/ │ │ │ └── decrypt.go │ │ ├── duration.go │ │ ├── duration_test.go │ │ ├── encryption.go │ │ ├── env/ │ │ │ ├── env.go │ │ │ └── env_test.go │ │ ├── global.go │ │ ├── hls_variant.go │ │ ├── ip_network.go │ │ ├── ip_networks.go │ │ ├── jsonwrapper/ │ │ │ ├── testdata/ │ │ │ │ └── fuzz/ │ │ │ │ └── FuzzUnmarshal/ │ │ │ │ ├── 297c43aee5d30530 │ │ │ │ └── 7f71a2d116d5afde │ │ │ ├── unmarshal.go │ │ │ └── unmarshal_test.go │ │ ├── log_destination.go │ │ ├── log_destinations.go │ │ ├── log_level.go │ │ ├── optional_global.go │ │ ├── optional_path.go │ │ ├── path.go │ │ ├── path_test.go │ │ ├── record_format.go │ │ ├── rtsp_auth_method.go │ │ ├── rtsp_auth_methods.go │ │ ├── rtsp_range_type.go │ │ ├── rtsp_transport.go │ │ ├── rtsp_transports.go │ │ ├── string_size.go │ │ ├── webrtc_ice_server.go │ │ └── yamlwrapper/ │ │ ├── testdata/ │ │ │ └── fuzz/ │ │ │ └── FuzzUnmarshal/ │ │ │ ├── 90b5d1b18dd9f8ac │ │ │ └── dc806ec658c460fc │ │ ├── unmarshal.go │ │ └── unmarshal_test.go │ ├── confwatcher/ │ │ ├── confwatcher.go │ │ └── confwatcher_test.go │ ├── core/ │ │ ├── api_test.go │ │ ├── core.go │ │ ├── core_test.go │ │ ├── metrics_test.go │ │ ├── path.go │ │ ├── path_manager.go │ │ ├── path_manager_test.go │ │ ├── path_test.go │ │ ├── source_redirect.go │ │ ├── test_on_demand/ │ │ │ └── main.go │ │ ├── upgrade.go │ │ ├── upgrade_disabled.go │ │ └── versiongetter/ │ │ └── main.go │ ├── counterdumper/ │ │ ├── dumper.go │ │ └── dumper_test.go │ ├── defs/ │ │ ├── api.go │ │ ├── api_hls.go │ │ ├── api_path.go │ │ ├── api_path_track.go │ │ ├── api_path_track_codec.go │ │ ├── api_path_track_codec_props.go │ │ ├── api_path_track_codec_test.go │ │ ├── api_recording.go │ │ ├── api_rtmp.go │ │ ├── api_rtsp.go │ │ ├── api_srt.go │ │ ├── api_webrtc.go │ │ ├── defs.go │ │ ├── path.go │ │ ├── path_access_request.go │ │ ├── publisher.go │ │ ├── reader.go │ │ ├── source.go │ │ └── static_source.go │ ├── errordumper/ │ │ ├── dumper.go │ │ └── dumper_test.go │ ├── externalcmd/ │ │ ├── cmd.go │ │ ├── cmd_unix.go │ │ ├── cmd_win.go │ │ └── pool.go │ ├── hooks/ │ │ ├── hooks.go │ │ ├── on_connect.go │ │ ├── on_demand.go │ │ ├── on_init.go │ │ ├── on_read.go │ │ └── on_ready.go │ ├── linters/ │ │ ├── conf/ │ │ │ └── conf_test.go │ │ └── go2api/ │ │ └── go2api_test.go │ ├── logger/ │ │ ├── destination.go │ │ ├── destination_file.go │ │ ├── destination_stdout.go │ │ ├── destination_syslog.go │ │ ├── destination_syslog_disabled.go │ │ ├── level.go │ │ ├── logger.go │ │ ├── logger_test.go │ │ └── writer.go │ ├── metrics/ │ │ ├── metrics.go │ │ └── metrics_test.go │ ├── ntpestimator/ │ │ ├── estimator.go │ │ └── estimator_test.go │ ├── packetdumper/ │ │ ├── conn.go │ │ ├── conn_test.go │ │ ├── dial_context.go │ │ ├── listen.go │ │ ├── listen_packet.go │ │ ├── listener.go │ │ ├── packet_conn.go │ │ └── packet_conn_test.go │ ├── playback/ │ │ ├── muxer.go │ │ ├── muxer_fmp4.go │ │ ├── muxer_mp4.go │ │ ├── muxer_mp4_test.go │ │ ├── on_get.go │ │ ├── on_get_test.go │ │ ├── on_list.go │ │ ├── on_list_test.go │ │ ├── segment_fmp4.go │ │ ├── segment_fmp4_test.go │ │ ├── server.go │ │ └── server_test.go │ ├── pprof/ │ │ ├── pprof.go │ │ └── pprof_test.go │ ├── protocols/ │ │ ├── hls/ │ │ │ ├── from_stream.go │ │ │ ├── from_stream_test.go │ │ │ ├── to_stream.go │ │ │ └── to_stream_test.go │ │ ├── httpp/ │ │ │ ├── content_type.go │ │ │ ├── credentials.go │ │ │ ├── credentials_test.go │ │ │ ├── handler_exit_on_panic.go │ │ │ ├── handler_filter_requests.go │ │ │ ├── handler_filter_requests_test.go │ │ │ ├── handler_logger.go │ │ │ ├── handler_origin.go │ │ │ ├── handler_origin_test.go │ │ │ ├── handler_server_header.go │ │ │ ├── handler_tracker.go │ │ │ ├── handler_tracker_test.go │ │ │ ├── handler_write_timeout.go │ │ │ ├── remote_addr.go │ │ │ ├── server.go │ │ │ └── server_test.go │ │ ├── mpegts/ │ │ │ ├── enhanced_reader.go │ │ │ ├── from_stream.go │ │ │ ├── from_stream_test.go │ │ │ ├── to_stream.go │ │ │ └── to_stream_test.go │ │ ├── rtmp/ │ │ │ ├── from_stream.go │ │ │ ├── from_stream_test.go │ │ │ ├── to_stream.go │ │ │ └── to_stream_test.go │ │ ├── rtsp/ │ │ │ ├── credentials.go │ │ │ ├── credentials_test.go │ │ │ └── to_stream.go │ │ ├── tls/ │ │ │ ├── make_config.go │ │ │ └── make_config_test.go │ │ ├── udp/ │ │ │ ├── listener.go │ │ │ ├── listener_test.go │ │ │ └── params.go │ │ ├── unix/ │ │ │ ├── listener.go │ │ │ ├── listener_test.go │ │ │ └── params.go │ │ ├── webrtc/ │ │ │ ├── from_stream.go │ │ │ ├── from_stream_test.go │ │ │ ├── incoming_track.go │ │ │ ├── net.go │ │ │ ├── outgoing_data_channel.go │ │ │ ├── outgoing_track.go │ │ │ ├── peer_connection.go │ │ │ ├── peer_connection_test.go │ │ │ ├── stats.go │ │ │ ├── stats_interceptor.go │ │ │ ├── tcp_mux_wrapper.go │ │ │ ├── to_stream.go │ │ │ └── to_stream_test.go │ │ ├── websocket/ │ │ │ ├── serverconn.go │ │ │ └── serverconn_test.go │ │ └── whip/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── ice_fragment.go │ │ ├── ice_fragment_test.go │ │ ├── link_header.go │ │ └── link_header_test.go │ ├── recordcleaner/ │ │ ├── cleaner.go │ │ └── cleaner_test.go │ ├── recorder/ │ │ ├── format.go │ │ ├── format_fmp4.go │ │ ├── format_fmp4_part.go │ │ ├── format_fmp4_segment.go │ │ ├── format_fmp4_track.go │ │ ├── format_mpegts.go │ │ ├── format_mpegts_segment.go │ │ ├── format_mpegts_track.go │ │ ├── recorder.go │ │ ├── recorder_instance.go │ │ └── recorder_test.go │ ├── recordstore/ │ │ ├── mp4_boxes.go │ │ ├── path.go │ │ ├── path_test.go │ │ ├── recordstore.go │ │ ├── segment.go │ │ └── segment_test.go │ ├── restrictnetwork/ │ │ └── restrict_network.go │ ├── rlimit/ │ │ ├── rlimit_unix.go │ │ └── rlimit_win.go │ ├── servers/ │ │ ├── hls/ │ │ │ ├── hlsjsdownloader/ │ │ │ │ ├── HASH │ │ │ │ ├── VERSION │ │ │ │ └── main.go │ │ │ ├── http_server.go │ │ │ ├── index.html │ │ │ ├── muxer.go │ │ │ ├── muxer_instance.go │ │ │ ├── server.go │ │ │ └── server_test.go │ │ ├── rtmp/ │ │ │ ├── conn.go │ │ │ ├── listener.go │ │ │ ├── server.go │ │ │ └── server_test.go │ │ ├── rtsp/ │ │ │ ├── conn.go │ │ │ ├── mpegts_demuxer.go │ │ │ ├── server.go │ │ │ ├── server_test.go │ │ │ └── session.go │ │ ├── srt/ │ │ │ ├── conn.go │ │ │ ├── listener.go │ │ │ ├── server.go │ │ │ ├── server_test.go │ │ │ ├── streamid.go │ │ │ └── streamid_test.go │ │ └── webrtc/ │ │ ├── http_server.go │ │ ├── publish_index.html │ │ ├── publisher.js │ │ ├── read_index.html │ │ ├── reader.js │ │ ├── server.go │ │ ├── server_test.go │ │ └── session.go │ ├── staticsources/ │ │ ├── handler.go │ │ ├── hls/ │ │ │ ├── source.go │ │ │ └── source_test.go │ │ ├── mpegts/ │ │ │ ├── source.go │ │ │ └── source_test.go │ │ ├── rpicamera/ │ │ │ ├── camera_arm32_.go │ │ │ ├── camera_arm64_.go │ │ │ ├── camera_arm_.go │ │ │ ├── camera_other.go │ │ │ ├── downloader.go │ │ │ ├── mtxrpicamdownloader/ │ │ │ │ ├── HASH_MTXRPICAM_32_TAR_GZ │ │ │ │ ├── HASH_MTXRPICAM_64_TAR_GZ │ │ │ │ ├── VERSION │ │ │ │ └── main.go │ │ │ ├── params.go │ │ │ ├── params_serialize.go │ │ │ ├── pipe.go │ │ │ └── source.go │ │ ├── rtmp/ │ │ │ ├── source.go │ │ │ └── source_test.go │ │ ├── rtp/ │ │ │ ├── format.go │ │ │ ├── media.go │ │ │ ├── source.go │ │ │ └── source_test.go │ │ ├── rtsp/ │ │ │ ├── source.go │ │ │ └── source_test.go │ │ ├── srt/ │ │ │ ├── source.go │ │ │ └── source_test.go │ │ └── webrtc/ │ │ ├── source.go │ │ └── source_test.go │ ├── stream/ │ │ ├── format_updater.go │ │ ├── offline_sub_stream.go │ │ ├── offline_sub_stream_track.go │ │ ├── reader.go │ │ ├── rtp_decoder.go │ │ ├── rtp_encoder.go │ │ ├── stream.go │ │ ├── stream_alwaysavailable_test.go │ │ ├── stream_format.go │ │ ├── stream_media.go │ │ ├── stream_standard_test.go │ │ ├── sub_stream.go │ │ ├── sub_stream_format.go │ │ ├── sub_stream_media.go │ │ └── unit_remuxer.go │ ├── test/ │ │ ├── auth_manager.go │ │ ├── formats.go │ │ ├── logger.go │ │ ├── medias.go │ │ ├── path_manager.go │ │ ├── static_source_parent.go │ │ ├── temp_file.go │ │ └── tls_cert.go │ ├── teste2e/ │ │ ├── build_images_test.go │ │ ├── hls_manager_test.go │ │ ├── images/ │ │ │ ├── ffmpeg/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── emptyvideo.mkv │ │ │ │ ├── emptyvideoaudio.mkv │ │ │ │ └── start.sh │ │ │ ├── gstreamer/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── emptyvideo.mkv │ │ │ │ ├── exitafterframe.c │ │ │ │ └── start.sh │ │ │ └── vlc/ │ │ │ ├── Dockerfile │ │ │ └── start.sh │ │ ├── rtsp_server_test.go │ │ └── tests_test.go │ └── unit/ │ ├── payload.go │ ├── payload_ac3.go │ ├── payload_av1.go │ ├── payload_g711.go │ ├── payload_h264.go │ ├── payload_h265.go │ ├── payload_klv.go │ ├── payload_lpcm.go │ ├── payload_mjpeg.go │ ├── payload_mpeg1_audio.go │ ├── payload_mpeg1_video.go │ ├── payload_mpeg4_audio.go │ ├── payload_mpeg4_audio_latm.go │ ├── payload_mpeg4_video.go │ ├── payload_opus.go │ ├── payload_vp8.go │ ├── payload_vp9.go │ └── unit.go ├── main.go ├── mediamtx.yml └── scripts/ ├── binaries.mk ├── dockerhub.mk ├── format.mk ├── lint.mk ├── test-e2e.mk ├── test.mk └── winres.json