Refine utest error log.

This commit is contained in:
winlin 2025-10-27 19:51:50 -04:00
parent ace8bea84f
commit 72f723b016
28 changed files with 749 additions and 369 deletions

2
trunk/configure vendored
View File

@ -384,7 +384,7 @@ if [[ $SRS_UTEST == YES ]]; then
"srs_utest_manual_app" "srs_utest_manual_mock")
MODULE_FILES+=("srs_utest_workflow_rtc_playstream" "srs_utest_workflow_rtc_publishstream"
"srs_utest_workflow_rtc_conn" "srs_utest_workflow_rtmp_conn" "srs_utest_workflow_srt_conn" "srs_utest_workflow_http_conn"
"srs_utest_workflow_forward" "srs_utest_workflow_rtc2rtmp")
"srs_utest_workflow_forward" "srs_utest_workflow_rtc2rtmp" "srs_utest_workflow_rtmp2rtc")
MODULE_FILES+=("srs_utest_ai01" "srs_utest_ai02" "srs_utest_ai03" "srs_utest_ai04" "srs_utest_ai05"
"srs_utest_ai06" "srs_utest_ai07" "srs_utest_ai08" "srs_utest_ai09" "srs_utest_ai10" "srs_utest_ai11"
"srs_utest_ai12" "srs_utest_ai13" "srs_utest_ai14" "srs_utest_ai15" "srs_utest_ai16" "srs_utest_ai17"

View File

@ -24,6 +24,8 @@
#include <srs_app_rtsp_source.hpp>
#endif
#include <srs_app_rtc_conn.hpp>
#include <srs_app_rtc_source.hpp>
#include <srs_app_rtc_codec.hpp>
#include <srs_app_st.hpp>
#include <srs_kernel_file.hpp>
#include <srs_kernel_flv.hpp>
@ -212,6 +214,23 @@ ISrsHttpResponseWriter *SrsAppFactory::create_http_response_writer(ISrsProtocolR
return new SrsHttpResponseWriter(io);
}
#ifdef SRS_FFMPEG_FIT
SrsRtcFrameBuilder *SrsAppFactory::create_rtc_frame_builder(ISrsFrameTarget *target)
{
return new SrsRtcFrameBuilder(this, target);
}
ISrsRtcFrameBuilderAudioPacketCache *SrsAppFactory::create_rtc_frame_builder_audio_packet_cache()
{
return new SrsRtcFrameBuilderAudioPacketCache();
}
ISrsAudioTranscoder *SrsAppFactory::create_audio_transcoder()
{
return new SrsAudioTranscoder();
}
#endif
ISrsCoroutine *SrsAppFactory::create_coroutine(const std::string &name, ISrsCoroutineHandler *handler, SrsContextId cid)
{
return kernel_factory_->create_coroutine(name, handler, cid);

View File

@ -50,6 +50,10 @@ class ISrsRtcPlayStream;
class ISrsRtcPacketSender;
class ISrsHttpResponseWriter;
class ISrsProtocolReadWriter;
class SrsRtcFrameBuilder;
class ISrsFrameTarget;
class ISrsRtcFrameBuilderAudioPacketCache;
class ISrsAudioTranscoder;
// The factory to create app objects.
class ISrsAppFactory : public ISrsKernelFactory
@ -93,6 +97,11 @@ public:
virtual ISrsRtcPublishStream *create_rtc_publish_stream(ISrsExecRtcAsyncTask *exec, ISrsExpire *expire, ISrsRtcPacketReceiver *receiver, const SrsContextId &cid) = 0;
virtual ISrsRtcPlayStream *create_rtc_play_stream(ISrsExecRtcAsyncTask *exec, ISrsExpire *expire, ISrsRtcPacketSender *sender, const SrsContextId &cid) = 0;
virtual ISrsHttpResponseWriter *create_http_response_writer(ISrsProtocolReadWriter *io) = 0;
#ifdef SRS_FFMPEG_FIT
virtual SrsRtcFrameBuilder *create_rtc_frame_builder(ISrsFrameTarget *target) = 0;
virtual ISrsRtcFrameBuilderAudioPacketCache *create_rtc_frame_builder_audio_packet_cache() = 0;
virtual ISrsAudioTranscoder *create_audio_transcoder() = 0;
#endif
};
// The factory to create app objects.
@ -141,6 +150,11 @@ public:
virtual ISrsRtcPublishStream *create_rtc_publish_stream(ISrsExecRtcAsyncTask *exec, ISrsExpire *expire, ISrsRtcPacketReceiver *receiver, const SrsContextId &cid);
virtual ISrsRtcPlayStream *create_rtc_play_stream(ISrsExecRtcAsyncTask *exec, ISrsExpire *expire, ISrsRtcPacketSender *sender, const SrsContextId &cid);
virtual ISrsHttpResponseWriter *create_http_response_writer(ISrsProtocolReadWriter *io);
#ifdef SRS_FFMPEG_FIT
virtual SrsRtcFrameBuilder *create_rtc_frame_builder(ISrsFrameTarget *target);
virtual ISrsRtcFrameBuilderAudioPacketCache *create_rtc_frame_builder_audio_packet_cache();
virtual ISrsAudioTranscoder *create_audio_transcoder();
#endif
public:
virtual ISrsCoroutine *create_coroutine(const std::string &name, ISrsCoroutineHandler *handler, SrsContextId cid);

View File

@ -42,49 +42,57 @@ static const AVCodec *srs_find_encoder_by_id(SrsAudioCodecId id)
return NULL;
}
class SrsFFmpegLogHelper
SrsFFmpegLogHelper::SrsFFmpegLogHelper()
{
public:
SrsFFmpegLogHelper()
{
av_log_set_callback(ffmpeg_log_callback);
av_log_set_level(AV_LOG_TRACE);
av_log_set_callback(ffmpeg_log_callback);
av_log_set_level(AV_LOG_TRACE);
}
SrsFFmpegLogHelper::~SrsFFmpegLogHelper()
{
av_log_set_callback(NULL);
}
bool SrsFFmpegLogHelper::disabled_ = false;
void SrsFFmpegLogHelper::disable_ffmpeg_log()
{
disabled_ = true;
}
void SrsFFmpegLogHelper::ffmpeg_log_callback(void *, int level, const char *fmt, va_list vl)
{
if (disabled_) {
return;
}
static void ffmpeg_log_callback(void *, int level, const char *fmt, va_list vl)
{
static char buf[4096] = {0};
int nbytes = vsnprintf(buf, sizeof(buf), fmt, vl);
if (nbytes > 0 && nbytes < (int)sizeof(buf)) {
// Srs log is always start with new line, replcae '\n' to '\0', make log easy to read.
if (buf[nbytes - 1] == '\n') {
buf[nbytes - 1] = '\0';
}
switch (level) {
case AV_LOG_PANIC:
case AV_LOG_FATAL:
case AV_LOG_ERROR:
srs_error("%s", buf);
break;
case AV_LOG_WARNING:
srs_warn("%s", buf);
break;
case AV_LOG_INFO:
srs_trace("%s", buf);
break;
case AV_LOG_VERBOSE:
case AV_LOG_DEBUG:
case AV_LOG_TRACE:
default:
srs_verbose("%s", buf);
break;
}
static char buf[4096] = {0};
int nbytes = vsnprintf(buf, sizeof(buf), fmt, vl);
if (nbytes > 0 && nbytes < (int)sizeof(buf)) {
// Srs log is always start with new line, replcae '\n' to '\0', make log easy to read.
if (buf[nbytes - 1] == '\n') {
buf[nbytes - 1] = '\0';
}
switch (level) {
case AV_LOG_PANIC:
case AV_LOG_FATAL:
case AV_LOG_ERROR:
srs_error("%s", buf);
break;
case AV_LOG_WARNING:
srs_warn("%s", buf);
break;
case AV_LOG_INFO:
srs_trace("%s", buf);
break;
case AV_LOG_VERBOSE:
case AV_LOG_DEBUG:
case AV_LOG_TRACE:
default:
srs_verbose("%s", buf);
break;
}
}
};
// Register FFmpeg log callback funciton.
SrsFFmpegLogHelper _srs_ffmpeg_log_helper;
}
ISrsAudioTranscoder::ISrsAudioTranscoder()
{

View File

@ -31,6 +31,22 @@ extern "C" {
}
#endif
// Register FFmpeg log callback funciton.
class SrsFFmpegLogHelper
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
static bool disabled_;
public:
SrsFFmpegLogHelper();
virtual ~SrsFFmpegLogHelper();
public:
static void disable_ffmpeg_log();
static void ffmpeg_log_callback(void *, int level, const char *fmt, va_list vl);
};
// The interface for audio transcoder.
class ISrsAudioTranscoder
{

View File

@ -1223,6 +1223,7 @@ SrsRtcPublishStream::SrsRtcPublishStream(ISrsExecRtcAsyncTask *exec, ISrsExpire
live_sources_ = _srs_sources;
srt_sources_ = _srs_srt_sources;
circuit_breaker_ = _srs_circuit_breaker;
app_factory_ = _srs_app_factory;
}
SrsRtcPublishStream::~SrsRtcPublishStream()
@ -1268,6 +1269,7 @@ SrsRtcPublishStream::~SrsRtcPublishStream()
live_sources_ = NULL;
srt_sources_ = NULL;
circuit_breaker_ = NULL;
app_factory_ = NULL;
}
srs_error_t SrsRtcPublishStream::initialize(ISrsRequest *r, SrsRtcSourceDescription *stream_desc)
@ -1367,7 +1369,7 @@ srs_error_t SrsRtcPublishStream::initialize(ISrsRequest *r, SrsRtcSourceDescript
}
// Create the bridge for RTC.
SrsRtcBridge *bridge = new SrsRtcBridge();
SrsRtcBridge *bridge = new SrsRtcBridge(app_factory_);
// Bridge to RTMP.
// TODO: Support bridge to RTSP.

View File

@ -515,13 +515,6 @@ public:
// A RTC publish stream, client push and publish stream to SRS.
class SrsRtcPublishStream : public ISrsRtcPublishStream
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsExecRtcAsyncTask *exec_;
ISrsExpire *expire_;
ISrsRtcPacketReceiver *receiver_;
ISrsCircuitBreaker *circuit_breaker_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsStatistic *stat_;
@ -529,6 +522,14 @@ SRS_DECLARE_PRIVATE: // clang-format on
ISrsRtcSourceManager *rtc_sources_;
ISrsLiveSourceManager *live_sources_;
ISrsSrtSourceManager *srt_sources_;
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsExecRtcAsyncTask *exec_;
ISrsExpire *expire_;
ISrsRtcPacketReceiver *receiver_;
ISrsCircuitBreaker *circuit_breaker_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on

View File

@ -32,14 +32,13 @@
#include <srs_protocol_rtmp_msg_array.hpp>
#include <srs_protocol_rtmp_stack.hpp>
#include <srs_protocol_utility.hpp>
#ifdef SRS_FFMPEG_FIT
#include <srs_app_rtc_codec.hpp>
#endif
#include <srs_kernel_kbps.hpp>
#include <srs_protocol_raw_avc.hpp>
#include <srs_protocol_rtp.hpp>
#include <srs_app_factory.hpp>
// The NACK sent by us(SFU).
SrsPps *_srs_pps_snack = NULL;
@ -401,6 +400,8 @@ SrsRtcSource::SrsRtcSource()
pli_for_rtmp_ = pli_elapsed_ = 0;
stream_die_at_ = 0;
app_factory_ = _srs_app_factory;
}
SrsRtcSource::~SrsRtcSource()
@ -417,6 +418,8 @@ SrsRtcSource::~SrsRtcSource()
if (cid.empty())
cid = _pre_source_id;
srs_trace("free rtc source id=[%s]", cid.c_str());
app_factory_ = NULL;
}
// CRITICAL: This method is called AFTER the source has been added to the source pool
@ -879,14 +882,14 @@ srs_error_t SrsRtcSource::on_timer(srs_utime_t interval)
#ifdef SRS_FFMPEG_FIT
SrsRtcRtpBuilder::SrsRtcRtpBuilder(ISrsRtpTarget *target, SrsSharedPtr<SrsRtcSource> source)
SrsRtcRtpBuilder::SrsRtcRtpBuilder(ISrsAppFactory *factory, ISrsRtpTarget *target, SrsSharedPtr<SrsRtcSource> source)
{
rtp_target_ = target;
source_ = source;
req_ = NULL;
format_ = new SrsRtmpFormat();
codec_ = new SrsAudioTranscoder();
codec_ = factory->create_audio_transcoder();
latest_codec_ = SrsAudioCodecIdForbidden;
keep_bframe_ = false;
keep_avc_nalu_sei_ = true;
@ -902,6 +905,8 @@ SrsRtcRtpBuilder::SrsRtcRtpBuilder(ISrsRtpTarget *target, SrsSharedPtr<SrsRtcSou
// Lazy initialization flags
audio_initialized_ = false;
video_initialized_ = false;
app_factory_ = factory;
}
SrsRtcRtpBuilder::~SrsRtcRtpBuilder()
@ -910,6 +915,8 @@ SrsRtcRtpBuilder::~SrsRtcRtpBuilder()
srs_freep(codec_);
srs_freep(meta_);
srs_freep(video_builder_);
app_factory_ = NULL;
}
srs_error_t SrsRtcRtpBuilder::initialize_audio_track(SrsAudioCodecId codec)
@ -1097,7 +1104,7 @@ srs_error_t SrsRtcRtpBuilder::init_codec(SrsAudioCodecId codec)
// Create a new codec.
srs_freep(codec_);
codec_ = new SrsAudioTranscoder();
codec_ = app_factory_->create_audio_transcoder();
// Initialize the codec according to the codec in stream.
int bitrate = _srs_config->get_rtc_opus_bitrate(req_->vhost_); // The output bitrate in bps.
@ -1504,7 +1511,7 @@ int32_t SrsRtcFrameBuilderVideoPacketCache::find_next_lost_sn(uint16_t current_s
}
}
srs_error("cache overflow. the packet count of video frame is more than %u", cache_size_);
srs_warn("cache overflow. the packet count of video frame is more than %u", cache_size_);
return -2;
}
@ -1776,17 +1783,19 @@ void SrsRtcFrameBuilderAudioPacketCache::clear_all()
audio_buffer_.clear();
}
SrsRtcFrameBuilder::SrsRtcFrameBuilder(ISrsFrameTarget *target)
SrsRtcFrameBuilder::SrsRtcFrameBuilder(ISrsAppFactory *factory, ISrsFrameTarget *target)
{
frame_target_ = target;
is_first_audio_ = true;
audio_transcoder_ = NULL;
video_codec_ = SrsVideoCodecIdAVC;
audio_cache_ = new SrsRtcFrameBuilderAudioPacketCache();
audio_cache_ = factory->create_rtc_frame_builder_audio_packet_cache();
video_cache_ = new SrsRtcFrameBuilderVideoPacketCache();
frame_detector_ = new SrsRtcFrameBuilderVideoFrameDetector(video_cache_);
sync_state_ = -1;
obs_whip_vps_ = obs_whip_sps_ = obs_whip_pps_ = NULL;
app_factory_ = factory;
}
SrsRtcFrameBuilder::~SrsRtcFrameBuilder()
@ -1798,6 +1807,8 @@ SrsRtcFrameBuilder::~SrsRtcFrameBuilder()
srs_freep(obs_whip_vps_);
srs_freep(obs_whip_sps_);
srs_freep(obs_whip_pps_);
app_factory_ = NULL;
}
srs_error_t SrsRtcFrameBuilder::initialize(ISrsRequest *r, SrsAudioCodecId audio_codec, SrsVideoCodecId video_codec)
@ -1805,7 +1816,7 @@ srs_error_t SrsRtcFrameBuilder::initialize(ISrsRequest *r, SrsAudioCodecId audio
srs_error_t err = srs_success;
srs_freep(audio_transcoder_);
audio_transcoder_ = new SrsAudioTranscoder();
audio_transcoder_ = app_factory_->create_audio_transcoder();
SrsAudioCodecId to = SrsAudioCodecIdAAC; // The output audio codec.
int channels = 2; // The output audio channels.
@ -1904,6 +1915,9 @@ srs_error_t SrsRtcFrameBuilder::transcode_audio(SrsRtpPacket *pkt)
int header_len = 0;
uint8_t *header = NULL;
audio_transcoder_->aac_codec_header(&header, &header_len);
if (header_len <= 0) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "no aac header");
}
SrsRtmpCommonMessage out_rtmp;
packet_aac(&out_rtmp, (char *)header, header_len, ts, is_first_audio_);

View File

@ -44,6 +44,7 @@ class SrsRtpVideoBuilder;
class ISrsRtcConsumer;
class ISrsCircuitBreaker;
class ISrsRtcPublishStream;
class ISrsAppFactory;
// Firefox defaults as 109, Chrome is 111.
const int kAudioPayloadType = 111;
@ -227,11 +228,12 @@ class SrsRtcSource : public ISrsRtpTarget, public ISrsFastTimerHandler, public I
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
// The RTP bridge, convert RTP packets to other protocols.
ISrsRtcBridge *rtc_bridge_;
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
// The RTP bridge, convert RTP packets to other protocols.
ISrsRtcBridge *rtc_bridge_;
// Circuit breaker for protecting server resources.
ISrsCircuitBreaker *circuit_breaker_;
// For publish, it's the publish client id.
@ -347,6 +349,10 @@ SRS_DECLARE_PRIVATE: // clang-format on
// Convert AV frame to RTC RTP packets.
class SrsRtcRtpBuilder
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsRequest *req_;
@ -380,7 +386,7 @@ SRS_DECLARE_PRIVATE: // clang-format on
bool video_initialized_;
public:
SrsRtcRtpBuilder(ISrsRtpTarget *target, SrsSharedPtr<SrsRtcSource> source);
SrsRtcRtpBuilder(ISrsAppFactory *factory, ISrsRtpTarget *target, SrsSharedPtr<SrsRtcSource> source);
virtual ~SrsRtcRtpBuilder();
// clang-format off
@ -561,6 +567,10 @@ public:
// Collect and build WebRTC RTP packets to AV frames.
class SrsRtcFrameBuilder
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsFrameTarget *frame_target_;
@ -590,7 +600,7 @@ SRS_DECLARE_PRIVATE: // clang-format on
SrsRtpPacket *obs_whip_pps_;
public:
SrsRtcFrameBuilder(ISrsFrameTarget *target);
SrsRtcFrameBuilder(ISrsAppFactory *factory, ISrsFrameTarget *target);
virtual ~SrsRtcFrameBuilder();
public:

View File

@ -16,6 +16,7 @@ using namespace std;
#include <srs_app_config.hpp>
#include <srs_app_edge.hpp>
#include <srs_app_factory.hpp>
#include <srs_app_hls.hpp>
#include <srs_app_http_hooks.hpp>
#include <srs_app_recv_thread.hpp>
@ -1064,7 +1065,7 @@ srs_error_t SrsRtmpConn::acquire_publish(SrsSharedPtr<SrsLiveSource> source)
// Bridge to RTC streaming.
// TODO: FIXME: Need to convert RTMP to SRT.
SrsRtmpBridge *bridge = new SrsRtmpBridge();
SrsRtmpBridge *bridge = new SrsRtmpBridge(_srs_app_factory);
#if defined(SRS_FFMPEG_FIT)
bool rtmp_to_rtc = config_->get_rtc_from_rtmp(req->vhost_);

View File

@ -9,6 +9,7 @@
using namespace std;
#include <srs_app_config.hpp>
#include <srs_app_factory.hpp>
#include <srs_app_http_hooks.hpp>
#include <srs_app_rtc_source.hpp>
#include <srs_app_rtmp_source.hpp>
@ -501,7 +502,7 @@ srs_error_t SrsMpegtsSrtConn::acquire_publish()
}
// Bridge to RTMP and RTC streaming.
SrsSrtBridge *bridge = new SrsSrtBridge();
SrsSrtBridge *bridge = new SrsSrtBridge(_srs_app_factory);
bool srt_to_rtmp = config_->get_srt_to_rtmp(req_->vhost_);
if (srt_to_rtmp && edge) {
@ -620,14 +621,15 @@ srs_error_t SrsMpegtsSrtConn::do_playing()
int nb_packets = 0;
while (true) {
if ((err = trd_->pull()) != srs_success) {
return srs_error_wrap(err, "srt play thread");
}
// Check recv thread error first, so we can detect the client disconnecting event.
if ((err = srt_recv_trd.get_recv_err()) != srs_success) {
return srs_error_wrap(err, "srt play recv thread");
}
if ((err = trd_->pull()) != srs_success) {
return srs_error_wrap(err, "srt play thread");
}
// Wait for amount of packets.
SrsSrtPacket *pkt_raw = NULL;
consumer->dump_packet(&pkt_raw);

View File

@ -7,6 +7,7 @@
#include <srs_app_stream_bridge.hpp>
#include <srs_app_config.hpp>
#include <srs_app_factory.hpp>
#include <srs_app_rtc_source.hpp>
#include <srs_app_rtmp_source.hpp>
#include <srs_app_srt_source.hpp>
@ -53,7 +54,7 @@ ISrsRtmpBridge::~ISrsRtmpBridge()
{
}
SrsRtmpBridge::SrsRtmpBridge()
SrsRtmpBridge::SrsRtmpBridge(ISrsAppFactory *factory)
{
#ifdef SRS_FFMPEG_FIT
rtp_builder_ = NULL;
@ -63,6 +64,8 @@ SrsRtmpBridge::SrsRtmpBridge()
rtsp_target_ = NULL;
#endif
rtc_target_ = NULL;
app_factory_ = factory;
}
SrsRtmpBridge::~SrsRtmpBridge()
@ -75,6 +78,8 @@ SrsRtmpBridge::~SrsRtmpBridge()
rtsp_target_ = NULL;
#endif
rtc_target_ = NULL;
app_factory_ = NULL;
}
bool SrsRtmpBridge::empty()
@ -111,7 +116,7 @@ srs_error_t SrsRtmpBridge::initialize(ISrsRequest *r)
#ifdef SRS_FFMPEG_FIT
if (rtc_target_.get()) {
srs_freep(rtp_builder_);
rtp_builder_ = new SrsRtcRtpBuilder(rtc_target_.get(), rtc_target_);
rtp_builder_ = new SrsRtcRtpBuilder(app_factory_, rtc_target_.get(), rtc_target_);
if ((err = rtp_builder_->initialize(r)) != srs_success) {
return srs_error_wrap(err, "rtp builder initialize");
}
@ -211,7 +216,7 @@ ISrsSrtBridge::~ISrsSrtBridge()
{
}
SrsSrtBridge::SrsSrtBridge()
SrsSrtBridge::SrsSrtBridge(ISrsAppFactory *factory)
{
frame_builder_ = new SrsSrtFrameBuilder(this);
rtmp_target_ = NULL;
@ -220,6 +225,8 @@ SrsSrtBridge::SrsSrtBridge()
rtp_builder_ = NULL;
#endif
rtc_target_ = NULL;
app_factory_ = factory;
}
SrsSrtBridge::~SrsSrtBridge()
@ -231,6 +238,8 @@ SrsSrtBridge::~SrsSrtBridge()
#ifdef SRS_FFMPEG_FIT
srs_freep(rtp_builder_);
#endif
app_factory_ = NULL;
}
bool SrsSrtBridge::empty()
@ -259,7 +268,7 @@ srs_error_t SrsSrtBridge::initialize(ISrsRequest *r)
#ifdef SRS_FFMPEG_FIT
if (rtc_target_.get()) {
srs_freep(rtp_builder_);
rtp_builder_ = new SrsRtcRtpBuilder(rtc_target_.get(), rtc_target_);
rtp_builder_ = new SrsRtcRtpBuilder(app_factory_, rtc_target_.get(), rtc_target_);
if ((err = rtp_builder_->initialize(r)) != srs_success) {
return srs_error_wrap(err, "rtp builder initialize");
}
@ -356,13 +365,15 @@ ISrsRtcBridge::~ISrsRtcBridge()
{
}
SrsRtcBridge::SrsRtcBridge()
SrsRtcBridge::SrsRtcBridge(ISrsAppFactory *factory)
{
req_ = NULL;
#ifdef SRS_FFMPEG_FIT
frame_builder_ = NULL;
#endif
rtmp_target_ = NULL;
app_factory_ = factory;
}
SrsRtcBridge::~SrsRtcBridge()
@ -372,7 +383,8 @@ SrsRtcBridge::~SrsRtcBridge()
srs_freep(frame_builder_);
#endif
rtmp_target_ = NULL;
initialized_ = false;
app_factory_ = NULL;
}
void SrsRtcBridge::enable_rtc2rtmp(SrsSharedPtr<SrsLiveSource> rtmp_target)
@ -389,18 +401,13 @@ srs_error_t SrsRtcBridge::initialize(ISrsRequest *r)
{
srs_error_t err = srs_success;
if (initialized_) {
return err;
}
initialized_ = true;
srs_freep(req_);
req_ = r->copy();
#ifdef SRS_FFMPEG_FIT
srs_assert(rtmp_target_.get());
srs_freep(frame_builder_);
frame_builder_ = new SrsRtcFrameBuilder(rtmp_target_.get());
frame_builder_ = app_factory_->create_rtc_frame_builder(rtmp_target_.get());
#endif
return err;

View File

@ -28,6 +28,7 @@ class SrsRtcFrameBuilder;
class ISrsStreamBridge;
class SrsSrtFrameBuilder;
class SrsSrtPacket;
class ISrsAppFactory;
// A target to feed AV frame, such as a RTMP live source, or a RTMP bridge
// that take frame and converts to RTC packets, or a SRT bridge that converts
@ -85,6 +86,10 @@ public:
// Then, deliver the RTP packets to RTP target, which binds to a RTC/RTSP source.
class SrsRtmpBridge : public ISrsRtmpBridge
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
#ifdef SRS_FFMPEG_FIT
@ -100,7 +105,7 @@ SRS_DECLARE_PRIVATE: // clang-format on
#endif
public:
SrsRtmpBridge();
SrsRtmpBridge(ISrsAppFactory *factory);
virtual ~SrsRtmpBridge();
public:
@ -136,6 +141,10 @@ public:
// Then, deliver the AV frames to frame target, which binds to a RTMP/RTC source.
class SrsSrtBridge : public ISrsSrtBridge, public ISrsFrameTarget
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
// Convert SRT TS packets to media frame packets.
@ -150,7 +159,7 @@ SRS_DECLARE_PRIVATE: // clang-format on
SrsSharedPtr<SrsRtcSource> rtc_target_;
public:
SrsSrtBridge();
SrsSrtBridge(ISrsAppFactory *factory);
virtual ~SrsSrtBridge();
public:
@ -186,6 +195,10 @@ public:
// Then, deliver the RTMP frame packet to RTMP target, which binds to a live source.
class SrsRtcBridge : public ISrsRtcBridge
{
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsAppFactory *app_factory_;
// clang-format off
SRS_DECLARE_PRIVATE: // clang-format on
ISrsRequest *req_;
@ -195,11 +208,9 @@ SRS_DECLARE_PRIVATE: // clang-format on
#endif
// The Source bridge, bridge stream to other source.
SrsSharedPtr<SrsLiveSource> rtmp_target_;
// To avoid initialize multiple times, we use this flag.
bool initialized_;
public:
SrsRtcBridge();
SrsRtcBridge(ISrsAppFactory *factory);
virtual ~SrsRtcBridge();
public:

View File

@ -35,6 +35,7 @@ using namespace std;
#include <srs_app_config.hpp>
#include <srs_app_factory.hpp>
#include <srs_app_log.hpp>
#include <srs_app_rtc_codec.hpp>
#include <srs_app_rtc_conn.hpp>
#include <srs_app_server.hpp>
#include <srs_app_srt_server.hpp>
@ -63,6 +64,9 @@ SrsConfig *_srs_config = NULL;
ISrsAppFactory *_srs_app_factory = new SrsAppFactory();
ISrsKernelFactory *_srs_kernel_factory = _srs_app_factory;
// Register FFmpeg log callback funciton.
SrsFFmpegLogHelper _srs_ffmpeg_log_helper;
// @global version of srs, which can grep keyword "XCORE"
extern const char *_srs_version;

View File

@ -1165,7 +1165,7 @@ srs_error_t SrsHttpAuthMux::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessag
{
srs_error_t err;
if ((err = do_auth(w, r)) != srs_success) {
srs_error("do_auth %s", srs_error_desc(err).c_str());
srs_warn("do_auth %s", srs_error_desc(err).c_str());
srs_freep(err);
w->write_header(SRS_CONSTS_HTTP_Unauthorized);
return w->final_request();

View File

@ -32,6 +32,7 @@ using namespace std;
// For TCP test server and client
#include <srs_app_listener.hpp>
#include <srs_app_rtc_codec.hpp>
#include <srs_app_st.hpp>
// Temporary disk config.
@ -53,6 +54,9 @@ bool _srs_config_by_env = false;
ISrsAppFactory *_srs_app_factory = new SrsAppFactory();
ISrsKernelFactory *_srs_kernel_factory = _srs_app_factory;
// Register FFmpeg log callback funciton.
SrsFFmpegLogHelper _srs_ffmpeg_log_helper;
// The binary name of SRS.
const char *_srs_binary = NULL;
@ -97,6 +101,9 @@ srs_error_t prepare_main()
return srs_error_wrap(err, "srt log initialize");
}
// Disable FFmpeg detail log in utest.
_srs_ffmpeg_log_helper.disable_ffmpeg_log();
// Prevent the output of srt logs in utest.
srt_setloghandler(NULL, srs_srt_utest_null_log_handler);
// Set SRT log level to FATAL to suppress ERROR and WARNING logs in unit tests.

View File

@ -242,7 +242,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_BasicFunctionality)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
// Test initial state - bridge should be empty
EXPECT_TRUE(bridge->empty());
@ -260,7 +260,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_WithRtcTarget)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create and enable RTC target first
@ -287,7 +287,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_WithRtspTarget)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create and enable RTSP target first
@ -313,7 +313,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_WithRtcAndRtspTargets)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create and enable both RTC and RTSP targets
@ -348,7 +348,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspTargetReplacement)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Set first RTSP target
@ -377,7 +377,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_FrameHandling)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -407,7 +407,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_OnFrameRtpBuilder)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Test frame handling without any targets first
@ -444,7 +444,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_OnFrameRtspBuilder)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -479,7 +479,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_OnFrameBothBuilders)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Enable both RTC and RTSP targets
@ -512,7 +512,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_BasicFunctionality)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
// Test initial state - bridge should be empty
EXPECT_TRUE(bridge->empty());
@ -530,7 +530,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_WithRtmpTarget)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -558,7 +558,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_WithRtcTarget)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create and enable RTC target first
@ -584,7 +584,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_PacketHandling)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -606,7 +606,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_FrameHandling)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -628,7 +628,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_OnFrameRtmpTarget)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -662,7 +662,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_OnFrameRtpBuilder)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -697,7 +697,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_OnFrameBothTargets)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Enable both RTMP and RTC targets
@ -728,7 +728,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_OnFrameBothTargets)
// Test SrsRtcBridge basic functionality
VOID TEST(StreamBridgeTest, SrsRtcBridge_BasicFunctionality)
{
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
// Test initial state - bridge should be empty
EXPECT_TRUE(bridge->empty());
@ -740,7 +740,7 @@ VOID TEST(StreamBridgeTest, SrsRtcBridge_BasicFunctionality)
// Test SrsRtcBridge with RTMP target
VOID TEST(StreamBridgeTest, SrsRtcBridge_WithRtmpTarget)
{
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
// Create a mock RTMP target using shared pointer
SrsSharedPtr<SrsLiveSource> rtmp_source(new SrsLiveSource());
@ -758,7 +758,7 @@ VOID TEST(StreamBridgeTest, SrsRtcBridge_RtpPacketHandling)
{
srs_error_t err;
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTMP target for the bridge
@ -793,7 +793,7 @@ VOID TEST(StreamBridgeTest, SrsRtcBridge_RtpPacketTypes)
{
srs_error_t err;
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTMP target for the bridge
@ -829,7 +829,7 @@ VOID TEST(StreamBridgeTest, SrsRtcBridge_RtpWithoutFrameBuilder)
{
srs_error_t err;
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Test RTP handling without proper initialization (no frame builder)
@ -844,7 +844,7 @@ VOID TEST(StreamBridgeTest, SrsRtcBridge_RtpLifecycle)
{
srs_error_t err;
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTMP target
@ -877,7 +877,7 @@ VOID TEST(StreamBridgeTest, Bridge_ErrorHandling)
srs_error_t err;
// Test SrsRtmpBridge with invalid frame
SrsUniquePtr<SrsRtmpBridge> rtmp_bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> rtmp_bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
HELPER_EXPECT_SUCCESS(rtmp_bridge->initialize(req.get()));
@ -886,7 +886,7 @@ VOID TEST(StreamBridgeTest, Bridge_ErrorHandling)
HELPER_EXPECT_SUCCESS(rtmp_bridge->on_frame(NULL));
// Test SrsSrtBridge with invalid packet
SrsUniquePtr<SrsSrtBridge> srt_bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> srt_bridge(new SrsSrtBridge(_srs_app_factory));
HELPER_EXPECT_SUCCESS(srt_bridge->initialize(req.get()));
// Note: Skip NULL packet test as it causes segmentation fault
@ -899,7 +899,7 @@ VOID TEST(StreamBridgeTest, Bridge_LifecycleManagement)
srs_error_t err;
// Test multiple initialize calls
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// First initialize
@ -930,7 +930,7 @@ VOID TEST(StreamBridgeTest, SrsSrtBridge_MultipleTargets)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -970,7 +970,7 @@ VOID TEST(StreamBridgeTest, Bridge_TargetReplacement)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Initialize bridge
@ -1001,7 +1001,7 @@ VOID TEST(StreamBridgeTest, Bridge_StateConsistency)
{
srs_error_t err;
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Test empty state consistency
@ -1029,7 +1029,7 @@ VOID TEST(StreamBridgeTest, Bridge_MemoryManagement)
// Test that bridges properly manage their internal components
{
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
HELPER_EXPECT_SUCCESS(bridge->initialize(req.get()));
@ -1048,7 +1048,7 @@ VOID TEST(StreamBridgeTest, Bridge_MemoryManagement)
}
{
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge());
SrsUniquePtr<SrsSrtBridge> bridge(new SrsSrtBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
HELPER_EXPECT_SUCCESS(bridge->initialize(req.get()));
@ -1064,7 +1064,7 @@ VOID TEST(StreamBridgeTest, Bridge_MemoryManagement)
}
{
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge());
SrsUniquePtr<SrsRtcBridge> bridge(new SrsRtcBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
SrsSharedPtr<SrsLiveSource> rtmp_source(new SrsLiveSource());
@ -1086,7 +1086,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspFrameHandling)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create and enable RTSP target
@ -1115,7 +1115,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspLifecycle)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Test lifecycle without target
@ -1143,7 +1143,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspErrorHandling)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTSP target
@ -1167,7 +1167,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspMemoryManagement)
// Test multiple RTSP bridge creation and destruction
for (int i = 0; i < 5; ++i) {
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
SrsSharedPtr<SrsRtspSource> rtsp_source(new SrsRtspSource());
@ -1192,7 +1192,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtmpToRtspConversion)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTSP target for protocol conversion
@ -1227,7 +1227,7 @@ VOID TEST(StreamBridgeTest, SrsRtmpBridge_RtspCodecChanges)
{
srs_error_t err;
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge());
SrsUniquePtr<SrsRtmpBridge> bridge(new SrsRtmpBridge(_srs_app_factory));
SrsUniquePtr<MockStreamBridgeRequest> req(new MockStreamBridgeRequest());
// Create RTSP target
@ -1265,7 +1265,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterSEIFiltering)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1344,7 +1344,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterBFrameFilteringAVC)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1425,7 +1425,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterBFrameFilteringHEVC)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1500,7 +1500,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterCombinedSEIAndBFrameFiltering
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1587,7 +1587,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterIDRDetection)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1641,7 +1641,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterErrorHandling)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1687,7 +1687,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterNonAVCCodecSkipsSEIFiltering)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1755,7 +1755,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_FilterZeroSamples)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1797,7 +1797,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoMergeNalusMultipleSamples)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1871,7 +1871,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoLargeNaluPackageFuA)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -1956,7 +1956,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoExtremelyLargeNaluPackageFuA
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2036,7 +2036,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoMergeNalusWithMultipleNalus)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2119,7 +2119,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoMultipleLargeNalusPackageFuA
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2199,7 +2199,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoMergeNalusLargePayload)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2286,7 +2286,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioRealAacFrames)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2353,7 +2353,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioAddSampleFailure)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2409,7 +2409,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioTranscodeFailure)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2463,7 +2463,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioMemoryCleanup)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2522,7 +2522,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoComprehensiveCoverage)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2587,7 +2587,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoUnsupportedCodec)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2627,7 +2627,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoNoVcodecParsed)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2666,7 +2666,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoInitializeTrackError)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2730,7 +2730,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoFilterMethod)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2815,7 +2815,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoFormatError)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2878,7 +2878,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnVideoCodecSwitching)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2956,7 +2956,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_BasicInstantiation)
MockRtpTarget rtp_target;
// Test basic instantiation
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -2976,7 +2976,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_InitializeAudioTrack)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder first
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3022,7 +3022,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_InitializeVideoTrack)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder first
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3068,7 +3068,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_TrackInitializationCodecs)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder first
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3166,7 +3166,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_TrackInitializationWithSourceTracks
rtc_source->set_stream_desc(source_desc);
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3220,7 +3220,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioFormatConsumeSuccess)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3282,7 +3282,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioFormatConsumeError)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3328,7 +3328,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioNoAcodecParsed)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3377,7 +3377,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioUnsupportedCodec)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3456,7 +3456,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioSupportedCodecs)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3543,7 +3543,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioCodecValidationFailure)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3606,7 +3606,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_OnAudioComprehensiveCoverage)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3709,7 +3709,7 @@ VOID TEST(StreamBridgeTest, SrsRtcRtpBuilder_LazyInitialization)
HELPER_EXPECT_SUCCESS(rtc_source->initialize(req.get()));
MockRtpTarget rtp_target;
SrsRtcRtpBuilder builder(&rtp_target, rtc_source);
SrsRtcRtpBuilder builder(_srs_app_factory, &rtp_target, rtc_source);
// Initialize the builder
HELPER_EXPECT_SUCCESS(builder.initialize(req.get()));
@ -3796,8 +3796,8 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_MultipleBuilders)
srs_error_t err;
MockRtcFrameTarget target1, target2;
SrsRtcFrameBuilder builder1(&target1);
SrsRtcFrameBuilder builder2(&target2);
SrsRtcFrameBuilder builder1(_srs_app_factory, &target1);
SrsRtcFrameBuilder builder2(_srs_app_factory, &target2);
// Initialize both builders
SrsUniquePtr<MockRtcRequest> req1(new MockRtcRequest("vhost1", "app1", "stream1"));
@ -3826,7 +3826,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_Success)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3873,7 +3873,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_TranscoderError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3918,7 +3918,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_FrameTargetError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3965,7 +3965,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_MultipleOutputPackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4011,7 +4011,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_NoOutputPackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4055,7 +4055,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_FrameTargetErrorOnTranscodedFrame)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4126,7 +4126,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_SpecificCodePath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4187,7 +4187,7 @@ VOID TEST(RtcFrameBuilderTest, TranscodeAudio_ErrorInTranscoderLoop)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4257,7 +4257,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_CompleteFrameDetectionWithPacketVideo
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4308,7 +4308,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_IsLostSnTrueErrorPath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4379,7 +4379,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_PreciseLostSequenceScenario)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4438,7 +4438,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoRtmp_RecursiveCallErrorHandling)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4506,7 +4506,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_ExactIsLostSnCodePathCoverage
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());

View File

@ -54,8 +54,11 @@ MockAudioTranscoderForUtest::MockAudioTranscoderForUtest()
{
transcode_error_ = srs_success;
should_output_packets_ = false;
aac_header_data_ = NULL;
aac_header_len_ = 0;
// Set default AAC header for mock transcoder
aac_header_len_ = 2;
aac_header_data_ = new uint8_t[aac_header_len_];
aac_header_data_[0] = 0x12; // Mock AAC header byte 1
aac_header_data_[1] = 0x10; // Mock AAC header byte 2
}
MockAudioTranscoderForUtest::~MockAudioTranscoderForUtest()
@ -362,7 +365,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_NoPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -385,7 +388,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_NoAvsyncTime_InitialState)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -407,7 +410,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_NoAvsyncTime_StateZero)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -431,7 +434,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ValidAvsyncTime_SyncStateTransition)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -457,7 +460,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ValidAvsyncTime_SyncStateAlreadyTwo)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -483,7 +486,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_AudioPacketProcessing)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -508,7 +511,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_VideoPacketProcessing)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -529,7 +532,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_MixedAudioVideoPackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -555,7 +558,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_DifferentSSRCValues)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -580,7 +583,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_DifferentSequenceNumbers)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -605,7 +608,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_DifferentTimestamps)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -630,7 +633,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_SyncStateTransitions)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -664,7 +667,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_BoundaryAvsyncTimeValues)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -696,7 +699,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_NullPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -713,7 +716,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_RapidPacketSequence)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -738,7 +741,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_AlternatingAudioVideo)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -763,7 +766,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcPayload_WithVPSS
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -786,7 +789,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcPayload_MissingV
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -829,7 +832,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcPayload_MissingS
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -872,7 +875,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcPayload_MissingP
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -915,7 +918,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipVPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -955,7 +958,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -995,7 +998,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1035,7 +1038,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipMissingVPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1074,7 +1077,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipMissingSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1113,7 +1116,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_OBSWhipMissingPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1152,7 +1155,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcWithOBSWhipVPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1204,7 +1207,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcWithOBSWhipSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1256,7 +1259,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_STAPHevcWithOBSWhipPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1308,7 +1311,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_NonHEVCCodec)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec (not HEVC)
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1331,7 +1334,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_NonVPSSPSPPSRawPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1354,7 +1357,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_NullPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1385,7 +1388,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_CacheResetAfterUse)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1432,7 +1435,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderHevc_ComprehensiveCoverage)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1479,7 +1482,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_SameTimestampDifferentSequence)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1504,7 +1507,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_FrameTargetError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1529,7 +1532,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_FrameTargetError)
VOID TEST(RtcFrameBuilderTest, OnRtp_UninitializedBuilder)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Do NOT initialize the builder
@ -1553,7 +1556,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_LargePayloadPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1584,7 +1587,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ZeroLengthPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1615,7 +1618,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_MaxSequenceNumber)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1639,7 +1642,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_MaxTimestamp)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1663,7 +1666,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ComprehensiveCoverage)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1705,7 +1708,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_TraceLogScenarios)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1739,7 +1742,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ComprehensiveCodePathCoverage)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1848,7 +1851,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_STAPAPayload_WithSPSAndPP
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1871,7 +1874,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_STAPAPayload_MissingSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1909,7 +1912,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_STAPAPayload_MissingPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1947,7 +1950,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_OBSWhipSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1979,7 +1982,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_OBSWhipPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2011,7 +2014,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_OBSWhipMissingSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2042,7 +2045,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_OBSWhipMissingPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2073,7 +2076,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_STAPAWithOBSWhipSPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2120,7 +2123,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_STAPAWithOBSWhipPPS)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2167,7 +2170,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_NonSPSPPSRawPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2190,7 +2193,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_EmptySTAPAPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2224,7 +2227,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_FrameTargetError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2249,7 +2252,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_CacheCleanup)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2284,7 +2287,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_NoSTAPANoRawPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2320,7 +2323,7 @@ VOID TEST(RtcFrameBuilderTest, PacketSequenceHeaderAvc_ComprehensiveCoverage)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2359,7 +2362,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ExactSyncStateTransitions)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2394,7 +2397,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_AvsyncTimeBoundaryConditions)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2427,7 +2430,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_AudioPacketProcessingPath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2466,7 +2469,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_VideoPacketProcessingPath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2501,7 +2504,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_MixedAudioVideoWithPayloads)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2565,7 +2568,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_ErrorHandlingPacketVideoRtmpFails)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2618,7 +2621,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_FrameTargetFailureInPacketVideoRtmp)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2661,7 +2664,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_LostPacketRecoveryErrorPath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2703,7 +2706,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_MultipleFrameCompletionErrorHandling)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2752,7 +2755,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_HEVCCodecErrorHandling)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2845,7 +2848,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_BoundarySequenceNumbersErrorHandling)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2891,7 +2894,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_ErrorHandlingPacketVideoRtmpF
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -2934,7 +2937,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_HEVCErrorHandling)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3001,7 +3004,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_LostSequenceNumberErrorPath)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3045,7 +3048,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_SequenceHeaderAndFrameErrors)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3084,7 +3087,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_BoundarySequenceNumbers)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3128,7 +3131,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_ComprehensiveErrorPathCoverag
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3187,7 +3190,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ErrorPropagationFromPacketAudio)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3212,7 +3215,7 @@ VOID TEST(RtcFrameBuilderTest, OnRtp_ErrorPropagationFromPacketVideo)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3237,7 +3240,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_SinglePacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3279,7 +3282,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_MultipleSequentialPackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3319,7 +3322,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_OutOfOrderPackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3380,7 +3383,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_DuplicatePackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3433,7 +3436,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_LatePackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3488,7 +3491,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_LatePackets)
VOID TEST(RtcFrameBuilderTest, PacketAudio_NullPacket)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3515,7 +3518,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_NoPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3548,7 +3551,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_ZeroLengthPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3583,7 +3586,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_LargePayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3620,7 +3623,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_FrameTargetError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3661,7 +3664,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_SequenceWrapAround)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3717,7 +3720,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_TimestampWrapAround)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3773,7 +3776,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_DifferentSSRC)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3824,7 +3827,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_RapidSequence)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3867,7 +3870,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_VPSPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3905,7 +3908,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_STAPAPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3953,7 +3956,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_FUAPayloadIDR)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -3993,7 +3996,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_FUAPayloadNonIDR)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4033,7 +4036,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_AudioPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4068,7 +4071,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_AudioPacket)
VOID TEST(RtcFrameBuilderTest, PacketVideo_NullPacket)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4094,7 +4097,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_NoPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4124,7 +4127,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_ZeroLengthPayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4159,7 +4162,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_LargePayload)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4196,7 +4199,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_SequenceWrapAround)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4245,7 +4248,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_TimestampWrapAround)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4294,7 +4297,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_DifferentSSRC)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4340,7 +4343,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_FrameTargetError)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4382,7 +4385,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_RapidSequence)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4425,7 +4428,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_MixedKeyframeSequence)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4474,7 +4477,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_KeyframeAVC)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4512,7 +4515,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_KeyframeHEVC)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with HEVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4550,7 +4553,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_NonKeyframe)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4588,7 +4591,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_SPSPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4626,7 +4629,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideo_PPSPacket)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4664,7 +4667,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_MixedPayloadSizes)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4706,7 +4709,7 @@ VOID TEST(RtcFrameBuilderTest, PacketAudio_ComprehensiveScenario)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -4783,7 +4786,7 @@ VOID TEST(RtcFrameBuilderTest, PacketVideoKeyFrame_OutOfOrderKeyframePackets)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());

View File

@ -63,7 +63,7 @@ SrsCodecPayload *create_test_codec_payload(uint8_t pt, std::string name, int sam
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeBasic)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test with NULL packet
int null_size = builder.calculate_packet_payload_size(NULL);
@ -84,7 +84,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeBasic)
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeFUA)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.264 FU-A payload (SrsRtpFUAPayload2) - start fragment
SrsUniquePtr<SrsRtpPacket> fua_start_pkt(new SrsRtpPacket());
@ -149,7 +149,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeFUA)
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeSTAP)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.264 STAP-A payload (SrsRtpSTAPPayload) with multiple NALUs
SrsUniquePtr<SrsRtpPacket> stap_pkt(new SrsRtpPacket());
@ -221,7 +221,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeSTAP)
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeFUAHevc)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.265 FU-A payload (SrsRtpFUAPayloadHevc2) - start fragment
SrsUniquePtr<SrsRtpPacket> fua_hevc_start_pkt(new SrsRtpPacket());
@ -286,7 +286,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeFUAHevc)
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeSTAPHevc)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.265 STAP payload (SrsRtpSTAPPayloadHevc) with multiple NALUs
SrsUniquePtr<SrsRtpPacket> stap_hevc_pkt(new SrsRtpPacket());
@ -366,7 +366,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeSTAPHevc)
VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeEdgeCases)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test with unknown payload type (should fall through to default case)
SrsUniquePtr<SrsRtpPacket> unknown_pkt(new SrsRtpPacket());
@ -394,7 +394,7 @@ VOID TEST(SrsRtcFrameBuilderTest, CalculatePacketPayloadSizeEdgeCases)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferRaw)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with raw payload
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -435,7 +435,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferRaw)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAStart)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.264 FU-A start fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -482,7 +482,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAStart)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAMiddle)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.264 FU-A middle fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -523,7 +523,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAMiddle)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAEnd)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.264 FU-A end fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -579,7 +579,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAEnd)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevc)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.265 FU-A start fragment
SrsUniquePtr<SrsRtpPacket> hevc_pkt(new SrsRtpPacket());
@ -623,7 +623,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevc)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAEdgeCases)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Test H.264 FU-A with zero-size payload
SrsUniquePtr<SrsRtpPacket> zero_pkt(new SrsRtpPacket());
@ -694,7 +694,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAEdgeCases)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUASequence)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
char buffer_data[1024];
SrsBuffer buffer(buffer_data, sizeof(buffer_data));
@ -782,7 +782,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUASequence)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAP)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.264 STAP payload
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -857,7 +857,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAP)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAPWithEmptyNALUs)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.264 STAP payload
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -930,7 +930,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAPWithEmptyNALUs)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcStart)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.265 FU-A start fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -978,7 +978,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcStart)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcMiddle)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.265 FU-A middle fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -1018,7 +1018,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcMiddle)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcEnd)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.265 FU-A end fragment
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -1073,7 +1073,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferFUAHevcEnd)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAPHevc)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.265 STAP payload
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -1148,7 +1148,7 @@ VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAPHevc)
VOID TEST(SrsRtcFrameBuilderTest, WritePacketPayloadToBufferSTAPHevcWithEmptyNALUs)
{
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Create test RTP packet with H.265 STAP payload
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
@ -1229,7 +1229,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluBasic)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1280,7 +1280,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluNoNextFrame)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1323,7 +1323,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluRecursiveCall)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1377,7 +1377,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluMultipleEmptyFrames)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1438,7 +1438,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluZeroSizePayloads)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1497,7 +1497,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluHevc)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.265 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1548,7 +1548,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluSequenceWrapAround)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());
@ -1597,7 +1597,7 @@ VOID TEST(SrsRtcFrameBuilderTest, PacketVideoRtmpEmptyNaluFrameProcessing)
srs_error_t err;
MockRtcFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize builder with H.264 codec
SrsUniquePtr<MockRtcRequest> req(new MockRtcRequest());

View File

@ -334,7 +334,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_SameKeyframeTimestampVideoSequence)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -404,7 +404,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_SameStapForIdrVideoSequence)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -456,7 +456,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_DifferentKeyframeTimestampVideoSequen
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -524,7 +524,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_TypicalVideoSequence)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -595,7 +595,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_SingleVideoSequence)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -652,7 +652,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_SingleVideoSequence_LargePFrame)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -728,7 +728,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_AcceptableVideoSequence)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -792,7 +792,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_EmptyIDRBeforeNormalFrames)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -855,7 +855,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_EmptyIDRBeforeNormalFrames_FUA)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -917,7 +917,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_BaselinePackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -985,7 +985,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_NoSpsPpsPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1044,7 +1044,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_ReorderingIdrPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1113,7 +1113,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_PframeBeforeIdrPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1188,7 +1188,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_PframeReorderingPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1262,7 +1262,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_IdrPframeReorderingPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1341,7 +1341,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketVideo_PframeLostPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with AVC codec
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1402,7 +1402,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketAudio_ThreeAudioPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with Opus codec (typical for WebRTC)
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());
@ -1452,7 +1452,7 @@ VOID TEST(Rtc2RtmpConvertTest, PacketAudio_ReorderingAudioPackets)
srs_error_t err;
MockRtc2RtmpFrameTarget target;
SrsRtcFrameBuilder builder(&target);
SrsRtcFrameBuilder builder(_srs_app_factory, &target);
// Initialize the builder with Opus codec (typical for WebRTC)
SrsUniquePtr<MockRtc2RtmpRequest> req(new MockRtc2RtmpRequest());

View File

@ -557,6 +557,8 @@ MockAppConfig::MockAppConfig()
rtc_from_rtmp_ = false;
forwards_directive_ = NULL;
backend_directive_ = NULL;
rtc_server_enabled_ = false;
rtc_enabled_ = false;
}
MockAppConfig::~MockAppConfig()
@ -1379,6 +1381,19 @@ MockRtmpServer::~MockRtmpServer()
recv_msgs_.clear();
}
void MockRtmpServer::set_request(SrsRtmpConnType type, std::string ip, std::string vhost, std::string app, std::string stream, std::string tcUrl, std::string schema, int port, std::string host)
{
type_ = type;
ip_ = ip;
vhost_ = vhost;
app_ = app;
stream_ = stream;
tcUrl_ = tcUrl;
schema_ = schema;
port_ = port;
host_ = host;
}
void MockRtmpServer::set_recv_timeout(srs_utime_t tm)
{
}
@ -2673,6 +2688,8 @@ void MockRtmpClient::set_url(std::string url)
MockAudioTranscoder::MockAudioTranscoder()
{
transcode_count_ = 0;
// Set default AAC header for mock transcoder
aac_header_ = std::string("\xAF\x00\x12\x10", 4);
}
MockAudioTranscoder::~MockAudioTranscoder()
@ -2706,6 +2723,10 @@ void MockAudioTranscoder::free_frames(std::vector<SrsParsedAudioPacket *> &frame
void MockAudioTranscoder::aac_codec_header(uint8_t **data, int *len)
{
int size = aac_header_.size();
if (size <= 0) {
return;
}
uint8_t *copy = new uint8_t[size];
memcpy(copy, aac_header_.data(), size);
*data = copy;

View File

@ -275,6 +275,8 @@ public:
bool rtc_from_rtmp_;
SrsConfDirective *forwards_directive_;
SrsConfDirective *backend_directive_;
bool rtc_server_enabled_;
bool rtc_enabled_;
public:
MockAppConfig();
@ -328,7 +330,7 @@ public:
virtual std::string get_https_stream_ssl_cert() { return ""; }
virtual std::string get_http_stream_dir() { return ""; }
virtual bool get_http_stream_crossdomain() { return false; }
virtual bool get_rtc_server_enabled() { return false; }
virtual bool get_rtc_server_enabled() { return rtc_server_enabled_; }
virtual bool get_rtc_server_tcp_enabled() { return false; }
virtual std::vector<std::string> get_rtc_server_tcp_listens()
{
@ -408,7 +410,7 @@ public:
virtual SrsConfDirective *get_vhost_on_close(std::string vhost) { return NULL; }
virtual SrsConfDirective *get_vhost_on_publish(std::string vhost) { return NULL; }
virtual SrsConfDirective *get_vhost_on_play(std::string vhost) { return NULL; }
virtual bool get_rtc_enabled(std::string vhost) { return false; }
virtual bool get_rtc_enabled(std::string vhost) { return rtc_enabled_; }
virtual bool get_rtsp_enabled(std::string vhost) { return false; }
virtual bool get_rtc_from_rtmp(std::string vhost) { return rtc_from_rtmp_; }
virtual bool get_rtsp_from_rtmp(std::string vhost) { return false; }
@ -751,6 +753,9 @@ public:
MockRtmpServer();
virtual ~MockRtmpServer();
public:
void set_request(SrsRtmpConnType type, std::string ip, std::string vhost, std::string app, std::string stream, std::string tcUrl, std::string schema, int port, std::string host);
public:
virtual void set_recv_timeout(srs_utime_t tm);
virtual void set_send_timeout(srs_utime_t tm);

View File

@ -43,9 +43,9 @@ VOID TEST(StTest, StUtimeInMicroseconds)
EXPECT_GT(st_time_1, 0);
EXPECT_GT(st_time_2, 0);
EXPECT_GE(st_time_2, st_time_1);
// st_time_2 - st_time_1 should be in range of [1, 1000] microseconds
// st_time_2 - st_time_1 should be in range of [1, 3000] microseconds
EXPECT_GE(st_time_2 - st_time_1, 0);
EXPECT_LE(st_time_2 - st_time_1, 1000);
EXPECT_LE(st_time_2 - st_time_1, 3000);
}
static inline st_utime_t time_gettimeofday()

View File

@ -36,6 +36,45 @@
#include <srs_utest_manual_service.hpp>
#include <srs_utest_workflow_rtc_conn.hpp>
// Mock app factory for RTC to RTMP workflow testing
class MockAppFactoryForRtc2Rtmp : public SrsAppFactory
{
public:
MockAudioCache *last_created_audio_cache_;
MockAudioTranscoder *last_created_audio_transcoder_;
public:
MockAppFactoryForRtc2Rtmp()
{
last_created_audio_cache_ = NULL;
last_created_audio_transcoder_ = NULL;
}
virtual ~MockAppFactoryForRtc2Rtmp()
{
// Don't delete last_created_audio_cache_ or last_created_audio_transcoder_ here,
// they are managed by frame builder
}
#ifdef SRS_FFMPEG_FIT
virtual ISrsRtcFrameBuilderAudioPacketCache *create_rtc_frame_builder_audio_packet_cache()
{
// Create a new mock audio cache each time
MockAudioCache *cache = new MockAudioCache();
last_created_audio_cache_ = cache;
return cache;
}
virtual ISrsAudioTranscoder *create_audio_transcoder()
{
// Create a new mock audio transcoder each time
MockAudioTranscoder *transcoder = new MockAudioTranscoder();
last_created_audio_transcoder_ = transcoder;
return transcoder;
}
#endif
};
// This test is used to verify the basic workflow of the RTC connection.
// It's finished with the help of AI, but each step is manually designed
// and verified. So this is not dominated by AI, but by humanbeing.
@ -53,10 +92,8 @@ VOID TEST(BasicWorkflowRtc2RtmpTest, ManuallyVerifyTypicalScenario)
SrsUniquePtr<MockRtcPacketReceiver> mock_receiver(new MockRtcPacketReceiver());
SrsUniquePtr<MockRtcTrackDescriptionFactory> track_factory(new MockRtcTrackDescriptionFactory());
SrsUniquePtr<MockLiveSourceManager> mock_sources(new MockLiveSourceManager());
MockAudioCache *mock_audio_cache = new MockAudioCache();
MockAudioTranscoder *mock_audio_transcoder = new MockAudioTranscoder();
SrsUniquePtr<MockAppFactoryForRtc2Rtmp> mock_factory(new MockAppFactoryForRtc2Rtmp());
mock_audio_transcoder->aac_header_ = std::string("\xAF\x00\x12\x10", 4); // AAC sequence header.
mock_config->rtc_to_rtmp_ = true;
// Create RTC publish stream - use real pli_worker_
@ -71,12 +108,12 @@ VOID TEST(BasicWorkflowRtc2RtmpTest, ManuallyVerifyTypicalScenario)
publish_stream->rtc_sources_ = mock_rtc_sources.get();
publish_stream->live_sources_ = mock_sources.get();
publish_stream->stat_ = mock_stat.get();
publish_stream->app_factory_ = mock_factory.get();
}
// Initialize publish stream, rtc2rtmp bridge should be created
SrsRtcBridge *bridge = NULL;
SrsLiveSource *live_source = NULL;
SrsRtcFrameBuilder *frame_builder = NULL;
if (true) {
SrsUniquePtr<SrsRtcSourceDescription> stream_desc(track_factory->create_stream_description());
@ -94,33 +131,31 @@ VOID TEST(BasicWorkflowRtc2RtmpTest, ManuallyVerifyTypicalScenario)
live_source = bridge->rtmp_target_.get();
EXPECT_TRUE(live_source != NULL);
frame_builder = bridge->frame_builder_;
EXPECT_TRUE(frame_builder != NULL);
// Mock the frame builder object
srs_freep(frame_builder->audio_cache_);
frame_builder->audio_cache_ = mock_audio_cache;
}
// Start the publish stream.
SrsRtcFrameBuilder *frame_builder = NULL;
if (true) {
// Test: First call to start() should succeed
HELPER_EXPECT_SUCCESS(publish_stream->start());
// Wait for coroutine to start.
// Wait for coroutine to start.
srs_usleep(1 * SRS_UTIME_MILLISECONDS);
// Verify is_sender_started_ flag is set
EXPECT_TRUE(publish_stream->is_sender_started_);
// When starting the publish stream, the frame builder should not be recreated
EXPECT_TRUE(frame_builder == bridge->frame_builder_);
// When starting the publish stream, the frame builder should be recreated
frame_builder = bridge->frame_builder_;
EXPECT_TRUE(frame_builder != NULL);
// Mock the frame builder object. When publish, the transcoder will be recreated.
srs_freep(frame_builder->audio_transcoder_);
frame_builder->audio_transcoder_ = mock_audio_transcoder;
// Verify the audio cache was created by the factory
EXPECT_TRUE(mock_factory->last_created_audio_cache_ != NULL);
EXPECT_EQ(frame_builder->audio_cache_, mock_factory->last_created_audio_cache_);
// Verify the audio transcoder was created by the factory
EXPECT_TRUE(mock_factory->last_created_audio_transcoder_ != NULL);
EXPECT_EQ(frame_builder->audio_transcoder_, mock_factory->last_created_audio_transcoder_);
}
// Got a RTP audio packet.

View File

@ -0,0 +1,176 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2013-2025 Winlin
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <srs_utest_workflow_rtmp2rtc.hpp>
#include <srs_app_rtmp_conn.hpp>
#include <srs_protocol_conn.hpp>
#include <srs_protocol_io.hpp>
#include <srs_protocol_rtmp_stack.hpp>
#include <srs_protocol_st.hpp>
#include <srs_utest_ai11.hpp>
#include <srs_utest_ai15.hpp>
#include <srs_utest_ai18.hpp>
#include <srs_utest_ai22.hpp>
#include <srs_utest_manual_mock.hpp>
#include <srs_utest_manual_service.hpp>
#include <sys/socket.h>
#include <unistd.h>
// This test is used to verify the basic workflow of the RTMP connection.
// It's finished with the help of AI, but each step is manually designed
// and verified. So this is not dominated by AI, but by humanbeing.
VOID TEST(BasicWorkflowRtmp2RtcTest, ManuallyVerifyTypicalScenario)
{
srs_error_t err;
// Mock all interface dependencies
SrsUniquePtr<MockAppConfig> mock_config(new MockAppConfig());
SrsUniquePtr<MockConnectionManager> mock_manager(new MockConnectionManager());
SrsUniquePtr<MockLiveSourceManager> mock_sources(new MockLiveSourceManager());
SrsUniquePtr<MockStreamPublishTokenManager> mock_tokens(new MockStreamPublishTokenManager());
SrsUniquePtr<MockAppStatistic> mock_stat(new MockAppStatistic());
SrsUniquePtr<MockHttpHooks> mock_hooks(new MockHttpHooks());
SrsUniquePtr<MockRtcSourceManager> mock_rtc_sources(new MockRtcSourceManager());
SrsUniquePtr<MockSrtSourceManager> mock_srt_sources(new MockSrtSourceManager());
#ifdef SRS_RTSP
SrsUniquePtr<MockRtspSourceManager> mock_rtsp_sources(new MockRtspSourceManager());
#endif
MockRtmpServer *mock_rtmp_server = new MockRtmpServer();
MockSecurity *mock_security = new MockSecurity();
mock_config->default_vhost_ = new SrsConfDirective();
mock_config->default_vhost_->name_ = "vhost";
mock_config->default_vhost_->args_.push_back("__defaultVhost__");
mock_config->mw_msgs_ = 0; // Handle each RTMP message, no merging write.
mock_config->mw_sleep_ = 0; // Handle each RTMP message, no merging write.
mock_config->rtc_server_enabled_ = true;
mock_config->rtc_enabled_ = true;
mock_config->rtc_from_rtmp_ = true;
mock_rtmp_server->set_request(SrsRtmpConnFMLEPublish, "192.168.1.100", "utest.ossrs.io", "utest", "livestream", "rtmp://127.0.0.1/utest", "rtmp", 1935, "127.0.0.1");
// Create SrsRtmpConn - it takes ownership of transport
ISrsRtmpTransport *transport = new MockRtmpTransport();
SrsUniquePtr<SrsRtmpConn> conn(new SrsRtmpConn(transport, "192.168.1.100", 1935));
conn->config_ = mock_config.get();
conn->manager_ = mock_manager.get();
conn->live_sources_ = mock_sources.get();
conn->stream_publish_tokens_ = mock_tokens.get();
conn->stat_ = mock_stat.get();
conn->hooks_ = mock_hooks.get();
conn->rtc_sources_ = mock_rtc_sources.get();
conn->srt_sources_ = mock_srt_sources.get();
#ifdef SRS_RTSP
conn->rtsp_sources_ = mock_rtsp_sources.get();
#endif
srs_freep(conn->rtmp_);
conn->rtmp_ = mock_rtmp_server;
srs_freep(conn->security_);
conn->security_ = mock_security;
// Start the RTMP connection.
MockLiveSource *mock_source = dynamic_cast<MockLiveSource *>(mock_sources->mock_source_.get());
SrsRtmpBridge *bridge = NULL;
SrsRtcRtpBuilder *builder = NULL;
if (true) {
// Mock the client type to be a player
HELPER_EXPECT_SUCCESS(conn->start());
// Wait for coroutine to start.
srs_usleep(1 * SRS_UTIME_MILLISECONDS);
// Verify the req should be parsed.
ISrsRequest *req = conn->info_->req_;
EXPECT_STREQ("192.168.1.100", req->ip_.c_str());
EXPECT_STREQ("rtmp://127.0.0.1/utest", req->tcUrl_.c_str());
EXPECT_STREQ("rtmp", req->schema_.c_str());
EXPECT_STREQ("__defaultVhost__", req->vhost_.c_str());
EXPECT_STREQ("127.0.0.1", req->host_.c_str());
EXPECT_EQ(1935, req->port_);
EXPECT_STREQ("utest", req->app_.c_str());
EXPECT_STREQ("livestream", req->stream_.c_str());
EXPECT_EQ(0, req->duration_);
EXPECT_TRUE(NULL == req->args_);
EXPECT_STREQ("rtmp", req->protocol_.c_str());
EXPECT_FALSE(conn->info_->edge_);
// Bridge must be created.
bridge = dynamic_cast<SrsRtmpBridge *>(mock_source->rtmp_bridge_);
EXPECT_TRUE(bridge != NULL);
builder = bridge->rtp_builder_;
EXPECT_TRUE(builder != NULL);
}
// Create an RTMP audio message to feed consumer.
if (true) {
// Create a real AAC audio message with proper format.
// AAC audio format in RTMP/FLV:
// Byte 0: (SoundFormat << 4) | (SoundRate << 2) | (SoundSize << 1) | SoundType
// SoundFormat=10 (AAC), SoundRate=3 (44kHz), SoundSize=1 (16-bit), SoundType=1 (stereo)
// = 0xAF
// Byte 1: AACPacketType (0=sequence header, 1=raw data)
// Remaining bytes: AAC data
int payload_size = 10;
SrsRtmpCommonMessage *msg = new SrsRtmpCommonMessage();
msg->header_.initialize_audio(payload_size, 0, 1);
msg->create_payload(payload_size);
// Fill in AAC audio data
SrsBuffer stream(msg->payload(), payload_size);
// Audio format byte: AAC(10), 44kHz(3), 16-bit(1), stereo(1) = 0xAF
stream.write_1bytes(0xAF);
// AAC packet type: 1 = AAC raw data
stream.write_1bytes(0x01);
// AAC raw data (8 bytes of dummy audio data)
for (int i = 0; i < 8; i++) {
stream.write_1bytes(0x00);
}
// Feed audio to rtmp server.
mock_rtmp_server->recv_msgs_.push_back(msg);
mock_rtmp_server->cond_->signal();
// Wait for consumer to process the message.
srs_usleep(1 * SRS_UTIME_MILLISECONDS);
// Verify that the message is sent to the client.
EXPECT_EQ(1, mock_source->on_audio_count_);
}
// Simulate client quit event, the receive thread will get this error.
if (true) {
mock_rtmp_server->recv_err_ = srs_error_new(ERROR_SOCKET_READ, "mock client quit");
mock_rtmp_server->cond_->signal();
// Wait for coroutine to stop.
srs_usleep(1 * SRS_UTIME_MILLISECONDS);
}
// Stop the RTMP connection.
conn->stop();
}

View File

@ -0,0 +1,32 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2013-2025 Winlin
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef SRS_UTEST_WORKFLOW_RTMP2RTC_HPP
#define SRS_UTEST_WORKFLOW_RTMP2RTC_HPP
/*
#include <srs_utest_workflow_rtmp2rtc.hpp>
*/
#include <srs_utest.hpp>
#endif

View File

@ -67,16 +67,7 @@ VOID TEST(BasicWorkflowRtmpConnTest, ManuallyVerifyForPublisher)
mock_config->mw_msgs_ = 0; // Handle each RTMP message, no merging write.
mock_config->mw_sleep_ = 0; // Handle each RTMP message, no merging write.
mock_rtmp_server->type_ = SrsRtmpConnFMLEPublish;
mock_rtmp_server->stream_ = "livestream";
mock_rtmp_server->ip_ = "192.168.1.100";
mock_rtmp_server->vhost_ = "utest.ossrs.io";
mock_rtmp_server->app_ = "utest";
mock_rtmp_server->stream_ = "livestream";
mock_rtmp_server->tcUrl_ = "rtmp://127.0.0.1/utest";
mock_rtmp_server->schema_ = "rtmp";
mock_rtmp_server->port_ = 1935;
mock_rtmp_server->host_ = "127.0.0.1";
mock_rtmp_server->set_request(SrsRtmpConnFMLEPublish, "192.168.1.100", "utest.ossrs.io", "utest", "livestream", "rtmp://127.0.0.1/utest", "rtmp", 1935, "127.0.0.1");
// Create SrsRtmpConn - it takes ownership of transport
ISrsRtmpTransport *transport = new MockRtmpTransport();

View File

@ -239,6 +239,7 @@ VOID TEST(BasicWorkflowSrtConnTest, ManuallyVerifyForPlayer)
// Simulate client quit event, the receive thread will get this error.
if (true) {
mock_srt_conn->read_error_ = srs_error_new(ERROR_SOCKET_READ, "mock client quit");
mock_srt_conn->cond_->signal();
// Wait for coroutine to stop.
srs_usleep(1 * SRS_UTIME_MILLISECONDS);