Sergio Garcia Murillo 1 год назад
Родитель
Сommit
414580b624

+ 20 - 13
plugins/obs-webrtc/whip-output.cpp

@@ -23,7 +23,6 @@ const uint8_t video_payload_type = 96;
 
 WHIPOutput::WHIPOutput(obs_data_t *, obs_output_t *output)
 	: output(output),
-	  is_av1(false),
 	  endpoint_url(),
 	  bearer_token(),
 	  resource_url(),
@@ -55,13 +54,6 @@ bool WHIPOutput::Start()
 {
 	std::lock_guard<std::mutex> l(start_stop_mutex);
 
-	auto encoder = obs_output_get_video_encoder2(output, 0);
-	if (encoder == nullptr) {
-		return false;
-	}
-
-	is_av1 = (strcmp("av1", obs_encoder_get_codec(encoder)) == 0);
-
 	if (!obs_output_can_begin_data_capture(output, 0))
 		return false;
 	if (!obs_output_initialize_encoders(output, 0))
@@ -148,16 +140,31 @@ void WHIPOutput::ConfigureVideoTrack(std::string media_stream_id,
 		ssrc, cname, video_payload_type,
 		rtc::H264RtpPacketizer::defaultClockRate);
 
-	if (is_av1) {
+	const obs_encoder_t *encoder = obs_output_get_video_encoder2(output, 0);
+	if (!encoder)
+		return;
+
+	const char *codec = obs_encoder_get_codec(encoder);
+	if (strcmp("h264", codec) == 0) {
+		video_description.addH264Codec(video_payload_type);
+		packetizer = std::make_shared<rtc::H264RtpPacketizer>(
+			rtc::H264RtpPacketizer::Separator::StartSequence,
+			rtp_config, MAX_VIDEO_FRAGMENT_SIZE);
+#if ENABLE_HEVC
+	} else if (strcmp("hevc", codec) == 0) {
+		video_description.addH265Codec(video_payload_type);
+		packetizer = std::make_shared<rtc::H265RtpPacketizer>(
+			rtc::H265RtpPacketizer::Separator::StartSequence,
+			rtp_config, MAX_VIDEO_FRAGMENT_SIZE);
+#endif
+	} else if (strcmp("av1", codec) == 0) {
 		video_description.addAV1Codec(video_payload_type);
 		packetizer = std::make_shared<rtc::AV1RtpPacketizer>(
 			rtc::AV1RtpPacketizer::Packetization::TemporalUnit,
 			rtp_config, MAX_VIDEO_FRAGMENT_SIZE);
 	} else {
-		video_description.addH264Codec(video_payload_type);
-		packetizer = std::make_shared<rtc::H264RtpPacketizer>(
-			rtc::H264RtpPacketizer::Separator::StartSequence,
-			rtp_config, MAX_VIDEO_FRAGMENT_SIZE);
+		do_log(LOG_ERROR, "Video codec not supported: %s", codec);
+		return;
 	}
 
 	video_sr_reporter = std::make_shared<rtc::RtcpSrReporter>(rtp_config);

+ 0 - 1
plugins/obs-webrtc/whip-output.h

@@ -43,7 +43,6 @@ private:
 		  std::shared_ptr<rtc::RtcpSrReporter> rtcp_sr_reporter);
 
 	obs_output_t *output;
-	bool is_av1;
 
 	std::string endpoint_url;
 	std::string bearer_token;

+ 1 - 1
plugins/obs-webrtc/whip-service.cpp

@@ -1,7 +1,7 @@
 #include "whip-service.h"
 
 const char *audio_codecs[MAX_CODECS] = {"opus"};
-const char *video_codecs[MAX_CODECS] = {"h264", "av1"};
+const char *video_codecs[MAX_CODECS] = {"h264", "hevc", "av1"};
 
 WHIPService::WHIPService(obs_data_t *settings, obs_service_t *)
 	: server(),