1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00

Add annotation about rtp packet. Remove no need verbose log.

This commit is contained in:
xiaozhihong 2020-04-03 16:35:47 +08:00
parent 0ff3ce7464
commit 22fe799649
3 changed files with 41 additions and 43 deletions

View file

@ -66,8 +66,6 @@ srs_error_t aac_raw_append_adts_header(SrsSharedPtrMessage* shared_audio, SrsFor
return srs_error_new(ERROR_RTC_RTP_MUXER, "adts"); return srs_error_new(ERROR_RTC_RTP_MUXER, "adts");
} }
srs_verbose("audio samples=%d", format->audio->nb_samples);
if (format->audio->nb_samples != 1) { if (format->audio->nb_samples != 1) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "adts"); return srs_error_new(ERROR_RTC_RTP_MUXER, "adts");
} }
@ -92,17 +90,17 @@ srs_error_t aac_raw_append_adts_header(SrsSharedPtrMessage* shared_audio, SrsFor
return err; return err;
} }
SrsRtpMuxer::SrsRtpMuxer() SrsRtpH264Muxer::SrsRtpH264Muxer()
{ {
sequence = 0; sequence = 0;
discard_bframe = false; discard_bframe = false;
} }
SrsRtpMuxer::~SrsRtpMuxer() SrsRtpH264Muxer::~SrsRtpH264Muxer()
{ {
} }
srs_error_t SrsRtpMuxer::frame_to_packet(SrsSharedPtrMessage* shared_frame, SrsFormat* format) srs_error_t SrsRtpH264Muxer::frame_to_packet(SrsSharedPtrMessage* shared_frame, SrsFormat* format)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -148,7 +146,7 @@ srs_error_t SrsRtpMuxer::frame_to_packet(SrsSharedPtrMessage* shared_frame, SrsF
} }
} }
if (sample.size <= max_payload_size) { if (sample.size <= kRtpMaxPayloadSize) {
if ((err = packet_single_nalu(shared_frame, format, &sample, rtp_packet_vec)) != srs_success) { if ((err = packet_single_nalu(shared_frame, format, &sample, rtp_packet_vec)) != srs_success) {
return srs_error_wrap(err, "packet single nalu"); return srs_error_wrap(err, "packet single nalu");
} }
@ -172,7 +170,7 @@ srs_error_t SrsRtpMuxer::frame_to_packet(SrsSharedPtrMessage* shared_frame, SrsF
return err; return err;
} }
srs_error_t SrsRtpMuxer::packet_fu_a(SrsSharedPtrMessage* shared_frame, SrsFormat* format, SrsSample* sample, vector<SrsRtpSharedPacket*>& rtp_packet_vec) srs_error_t SrsRtpH264Muxer::packet_fu_a(SrsSharedPtrMessage* shared_frame, SrsFormat* format, SrsSample* sample, vector<SrsRtpSharedPacket*>& rtp_packet_vec)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -187,13 +185,13 @@ srs_error_t SrsRtpMuxer::packet_fu_a(SrsSharedPtrMessage* shared_frame, SrsForma
} }
} }
int num_of_packet = (sample->size - 1 + max_payload_size) / max_payload_size; int num_of_packet = (sample->size - 1 + kRtpMaxPayloadSize) / kRtpMaxPayloadSize;
for (int i = 0; i < num_of_packet; ++i) { for (int i = 0; i < num_of_packet; ++i) {
char* buf = new char[kRtpPacketSize]; char* buf = new char[kRtpPacketSize];
SrsBuffer* stream = new SrsBuffer(buf, kRtpPacketSize); SrsBuffer* stream = new SrsBuffer(buf, kRtpPacketSize);
SrsAutoFree(SrsBuffer, stream); SrsAutoFree(SrsBuffer, stream);
int packet_size = min(nb_left, max_payload_size); int packet_size = min(nb_left, kRtpMaxPayloadSize);
// v=2,p=0,x=0,cc=0 // v=2,p=0,x=0,cc=0
stream->write_1bytes(0x80); stream->write_1bytes(0x80);
@ -222,8 +220,7 @@ srs_error_t SrsRtpMuxer::packet_fu_a(SrsSharedPtrMessage* shared_frame, SrsForma
p += packet_size; p += packet_size;
nb_left -= packet_size; nb_left -= packet_size;
srs_verbose("rtp fu-a nalu, size=%u, seq=%u, timestamp=%lu, ssrc=%u, payloadtype=%u", srs_verbose("rtp fu-a nalu, size=%u, seq=%u, timestamp=%lu", sample->size, sequence, (shared_frame->timestamp * 90));
sample->size, sequence, (shared_frame->timestamp * 90), kVideoSSRC, kH264PayloadType);
SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket(); SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket();
rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos()); rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos());
@ -234,7 +231,7 @@ srs_error_t SrsRtpMuxer::packet_fu_a(SrsSharedPtrMessage* shared_frame, SrsForma
return err; return err;
} }
srs_error_t SrsRtpMuxer::packet_single_nalu(SrsSharedPtrMessage* shared_frame, SrsFormat* format, SrsSample* sample, vector<SrsRtpSharedPacket*>& rtp_packet_vec) srs_error_t SrsRtpH264Muxer::packet_single_nalu(SrsSharedPtrMessage* shared_frame, SrsFormat* format, SrsSample* sample, vector<SrsRtpSharedPacket*>& rtp_packet_vec)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -264,8 +261,7 @@ srs_error_t SrsRtpMuxer::packet_single_nalu(SrsSharedPtrMessage* shared_frame, S
stream->write_bytes(sample->bytes, sample->size); stream->write_bytes(sample->bytes, sample->size);
srs_verbose("rtp single nalu, size=%u, seq=%u, timestamp=%lu, ssrc=%u, payloadtype=%u", srs_verbose("rtp single nalu, size=%u, seq=%u, timestamp=%lu", sample->size, sequence, (shared_frame->timestamp * 90));
sample->size, sequence, (shared_frame->timestamp * 90), kVideoSSRC, kH264PayloadType);
SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket(); SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket();
rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos()); rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos());
@ -275,7 +271,7 @@ srs_error_t SrsRtpMuxer::packet_single_nalu(SrsSharedPtrMessage* shared_frame, S
return err; return err;
} }
srs_error_t SrsRtpMuxer::packet_stap_a(const string &sps, const string& pps, SrsSharedPtrMessage* shared_frame, vector<SrsRtpSharedPacket*>& rtp_packet_vec) srs_error_t SrsRtpH264Muxer::packet_stap_a(const string &sps, const string& pps, SrsSharedPtrMessage* shared_frame, vector<SrsRtpSharedPacket*>& rtp_packet_vec)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -312,8 +308,7 @@ srs_error_t SrsRtpMuxer::packet_stap_a(const string &sps, const string& pps, Srs
stream->write_2bytes(pps.size()); stream->write_2bytes(pps.size());
stream->write_bytes((char*)pps.data(), pps.size()); stream->write_bytes((char*)pps.data(), pps.size());
srs_verbose("rtp stap-a nalu, size=%u, seq=%u, timestamp=%lu, ssrc=%u, payloadtype=%u", srs_verbose("rtp stap-a nalu, size=%u, seq=%u, timestamp=%lu", (sps.size() + pps.size()), sequence, (shared_frame->timestamp * 90));
(sps.size() + pps.size()), sequence, (shared_frame->timestamp * 90), kVideoSSRC, kH264PayloadType);
SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket(); SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket();
rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos()); rtp_shared_pkt->create((shared_frame->timestamp * 90), sequence++, kVideoSSRC, kH264PayloadType, stream->data(), stream->pos());
@ -409,10 +404,6 @@ srs_error_t SrsRtpOpusMuxer::packet_opus(SrsSharedPtrMessage* shared_frame, SrsS
stream->write_bytes(sample->bytes, sample->size); stream->write_bytes(sample->bytes, sample->size);
srs_verbose("sample=%s", srs_string_dumps_hex(sample->bytes, sample->size).c_str());
srs_verbose("opus, size=%u, seq=%u, timestamp=%lu, ssrc=%u, payloadtype=%u",
sample->size, sequence, timestamp, kAudioSSRC, kOpusPayloadType);
SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket(); SrsRtpSharedPacket* rtp_shared_pkt = new SrsRtpSharedPacket();
rtp_shared_pkt->create(timestamp, sequence++, kAudioSSRC, kOpusPayloadType, stream->data(), stream->pos()); rtp_shared_pkt->create(timestamp, sequence++, kAudioSSRC, kOpusPayloadType, stream->data(), stream->pos());
rtp_shared_pkt->set_marker(true); rtp_shared_pkt->set_marker(true);
@ -461,7 +452,7 @@ srs_error_t SrsRtc::initialize(SrsOriginHub* h, SrsRequest* r)
hub = h; hub = h;
req = r; req = r;
rtp_h264_muxer = new SrsRtpMuxer(); rtp_h264_muxer = new SrsRtpH264Muxer();
rtp_h264_muxer->discard_bframe = _srs_config->get_rtc_bframe_discard(req->vhost); rtp_h264_muxer->discard_bframe = _srs_config->get_rtc_bframe_discard(req->vhost);
// TODO: FIXME: Support reload and log it. // TODO: FIXME: Support reload and log it.
discard_aac = _srs_config->get_rtc_aac_discard(req->vhost); discard_aac = _srs_config->get_rtc_aac_discard(req->vhost);

View file

@ -39,31 +39,37 @@ class SrsOriginHub;
class SrsAudioRecode; class SrsAudioRecode;
class SrsBuffer; class SrsBuffer;
const int max_payload_size = 1200; // Rtp packet max payload size, not include rtp header.
const int kRtpPacketSize = 1500; // Must left some bytes to payload header, rtp header, udp header, ip header.
const int kRtpMaxPayloadSize = 1200;
const int kRtpPacketSize = 1500;
const uint8_t kOpusPayloadType = 111; // Payload type will rewrite in srs_app_rtc_conn.cpp when send to client.
const uint8_t kH264PayloadType = 95; const uint8_t kOpusPayloadType = 111;
const uint8_t kH264PayloadType = 102;
const uint8_t kNalTypeMask = 0x1F; // H.264 nalu header type mask.
const uint8_t kNalTypeMask = 0x1F;
const uint8_t kStapA = 24; // @see: https://tools.ietf.org/html/rfc6184#section-5.2
const uint8_t kFuA = 28; const uint8_t kStapA = 24;
const uint8_t kFuA = 28;
const uint8_t kStart = 0x80; // @see: https://tools.ietf.org/html/rfc6184#section-5.8
const uint8_t kEnd = 0x40; const uint8_t kStart = 0x80; // Fu-header start bit
const uint8_t kEnd = 0x40; // Fu-header end bit
const int kChannel = 2; const int kChannel = 2;
const int kSamplerate = 48000; const int kSamplerate = 48000;
const int kArrayLength = 8; const int kArrayLength = 8;
const int kArrayBuffer = 4096; const int kArrayBuffer = 4096;
// FIXME: ssrc can relate to source // SSRC will rewrite in srs_app_rtc_conn.cpp when send to client.
const uint32_t kAudioSSRC = 3233846890; const uint32_t kAudioSSRC = 1;
const uint32_t kVideoSSRC = 3233846889; const uint32_t kVideoSSRC = 2;
// TODO: Define interface class like ISrsRtpMuxer to support SrsRtpOpusMuxer and so on. // TODO: Define interface class like ISrsRtpMuxer
class SrsRtpMuxer class SrsRtpH264Muxer
{ {
private: private:
uint16_t sequence; uint16_t sequence;
@ -72,8 +78,8 @@ private:
public: public:
bool discard_bframe; bool discard_bframe;
public: public:
SrsRtpMuxer(); SrsRtpH264Muxer();
virtual ~SrsRtpMuxer(); virtual ~SrsRtpH264Muxer();
public: public:
srs_error_t frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format); srs_error_t frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format);
private: private:
@ -108,7 +114,7 @@ private:
bool disposable; bool disposable;
bool discard_aac; bool discard_aac;
srs_utime_t last_update_time; srs_utime_t last_update_time;
SrsRtpMuxer* rtp_h264_muxer; SrsRtpH264Muxer* rtp_h264_muxer;
SrsRtpOpusMuxer* rtp_opus_muxer; SrsRtpOpusMuxer* rtp_opus_muxer;
SrsOriginHub* hub; SrsOriginHub* hub;
public: public:

View file

@ -567,6 +567,7 @@ void SrsRtcSenderThread::send_and_free_messages(SrsSharedPtrMessage** msgs, int
if (msg->is_video()) { if (msg->is_video()) {
pkt->set_payload_type(video_payload_type); pkt->set_payload_type(video_payload_type);
pkt->set_ssrc(video_ssrc); pkt->set_ssrc(video_ssrc);
srs_verbose("send video, ssrc=%u, seq=%u, timestamp=%u", video_ssrc, pkt->sequence, pkt->timestamp);
} }
if (msg->is_audio()) { if (msg->is_audio()) {