obs-webrtc: Add HEVC support

This commit is contained in:
Sergio Garcia Murillo 2024-04-16 08:50:06 +02:00 committed by tt2468
parent cf5f6b6796
commit 414580b624
3 changed files with 21 additions and 15 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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(),