diff --git a/homeassistant/components/homekit/const.py b/homeassistant/components/homekit/const.py index f660af9bba8ad0..7da73d4ebed9a1 100644 --- a/homeassistant/components/homekit/const.py +++ b/homeassistant/components/homekit/const.py @@ -39,6 +39,7 @@ CONF_SUPPORT_AUDIO = "support_audio" CONF_VIDEO_MAP = "video_map" CONF_VIDEO_PACKET_SIZE = "video_packet_size" +CONF_VIDEO_CODEC = "video_codec" # #### Config Defaults #### DEFAULT_AUDIO_MAP = "0:a:0" @@ -54,6 +55,7 @@ DEFAULT_ZEROCONF_DEFAULT_INTERFACE = False DEFAULT_VIDEO_MAP = "0:v:0" DEFAULT_VIDEO_PACKET_SIZE = 1316 +DEFAULT_VIDEO_CODEC = "libx264" # #### Features #### FEATURE_ON_OFF = "on_off" diff --git a/homeassistant/components/homekit/type_cameras.py b/homeassistant/components/homekit/type_cameras.py index e40f03d932e1e6..6486108f480fc1 100644 --- a/homeassistant/components/homekit/type_cameras.py +++ b/homeassistant/components/homekit/type_cameras.py @@ -24,6 +24,7 @@ CONF_STREAM_ADDRESS, CONF_STREAM_SOURCE, CONF_SUPPORT_AUDIO, + CONF_VIDEO_CODEC, CONF_VIDEO_MAP, CONF_VIDEO_PACKET_SIZE, ) @@ -33,7 +34,9 @@ VIDEO_OUTPUT = ( "-map {v_map} -an " - "-c:v libx264 -profile:v {v_profile} -tune zerolatency -pix_fmt yuv420p " + "-c:v {v_codec} " + "{v_profile}" + "-tune zerolatency -pix_fmt yuv420p " "-r {fps} " "-b:v {v_max_bitrate}k -bufsize {v_bufsize}k -maxrate {v_max_bitrate}k " "-payload_type 99 " @@ -171,15 +174,23 @@ async def start_stream(self, session_info, stream_config): return False if "-i " not in input_source: input_source = "-i " + input_source + video_profile = "" + if self.config[CONF_VIDEO_CODEC] != "copy": + video_profile = ( + "-profile:v " + + VIDEO_PROFILE_NAMES[ + int.from_bytes(stream_config["v_profile_id"], byteorder="big") + ] + + " " + ) output_vars = stream_config.copy() output_vars.update( { - "v_profile": VIDEO_PROFILE_NAMES[ - int.from_bytes(stream_config["v_profile_id"], byteorder="big") - ], + "v_profile": video_profile, "v_bufsize": stream_config["v_max_bitrate"] * 2, "v_map": self.config[CONF_VIDEO_MAP], "v_pkt_size": self.config[CONF_VIDEO_PACKET_SIZE], + "v_codec": self.config[CONF_VIDEO_CODEC], "a_bufsize": stream_config["a_max_bitrate"] * 2, "a_map": self.config[CONF_AUDIO_MAP], "a_pkt_size": self.config[CONF_AUDIO_PACKET_SIZE], diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 20053b2507c023..da836eb74ae08e 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -36,6 +36,7 @@ CONF_STREAM_ADDRESS, CONF_STREAM_SOURCE, CONF_SUPPORT_AUDIO, + CONF_VIDEO_CODEC, CONF_VIDEO_MAP, CONF_VIDEO_PACKET_SIZE, DEFAULT_AUDIO_MAP, @@ -44,6 +45,7 @@ DEFAULT_MAX_FPS, DEFAULT_MAX_HEIGHT, DEFAULT_MAX_WIDTH, + DEFAULT_VIDEO_CODEC, DEFAULT_VIDEO_MAP, DEFAULT_VIDEO_PACKET_SIZE, DOMAIN, @@ -90,6 +92,7 @@ vol.Optional(CONF_MAX_FPS, default=DEFAULT_MAX_FPS): cv.positive_int, vol.Optional(CONF_AUDIO_MAP, default=DEFAULT_AUDIO_MAP): cv.string, vol.Optional(CONF_VIDEO_MAP, default=DEFAULT_VIDEO_MAP): cv.string, + vol.Optional(CONF_VIDEO_CODEC, default=DEFAULT_VIDEO_CODEC): cv.string, vol.Optional( CONF_AUDIO_PACKET_SIZE, default=DEFAULT_AUDIO_PACKET_SIZE ): cv.positive_int,