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:
parent
0ff3ce7464
commit
22fe799649
3 changed files with 41 additions and 43 deletions
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
Loading…
Reference in a new issue