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

Refactor the RTC sender audio queue

This commit is contained in:
winlin 2020-05-03 14:28:51 +08:00
parent a23f102874
commit a812183144
4 changed files with 16 additions and 36 deletions

View file

@ -72,9 +72,9 @@
var constraints = { var constraints = {
"audio": true, "video": { "audio": true, "video": {
"width": { "min": "480", "max": "1920" }, "width": { "min": "480", "max": "720" },
"height": { "min": "320", "max": "1080" }, "height": { "min": "320", "max": "480" },
"frameRate": { "min": "15", "max": "60" } "frameRate": { "min": "15", "max": "30" }
} }
}; };
navigator.mediaDevices.getUserMedia( navigator.mediaDevices.getUserMedia(

View file

@ -1936,20 +1936,16 @@ srs_error_t SrsRtcPublisher::collect_audio_frames()
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
std::vector<std::vector<SrsRtpPacket2*> > frames; std::vector<SrsRtpPacket2*> frames;
audio_queue_->collect_frames(audio_nack_, frames); audio_queue_->collect_frames(audio_nack_, frames);
for (size_t i = 0; i < frames.size(); ++i) { for (size_t i = 0; i < frames.size(); ++i) {
vector<SrsRtpPacket2*>& packets = frames[i]; SrsRtpPacket2* pkt = frames[i];
for (size_t j = 0; j < packets.size(); ++j) { // TODO: FIXME: Check error.
SrsRtpPacket2* pkt = packets[j]; do_collect_audio_frame(pkt);
// TODO: FIXME: Check error. srs_freep(pkt);
do_collect_audio_frame(pkt);
srs_freep(pkt);
}
} }
return err; return err;

View file

@ -408,21 +408,7 @@ SrsRtpAudioQueue::~SrsRtpAudioQueue()
{ {
} }
void SrsRtpAudioQueue::collect_frames(SrsRtpNackForReceiver* nack, std::vector<std::vector<SrsRtpPacket2*> >& frames) void SrsRtpAudioQueue::collect_frames(SrsRtpNackForReceiver* nack, vector<SrsRtpPacket2*>& frames)
{
collect_packet(frames, nack);
if (queue_->overflow()) {
on_overflow(nack);
}
}
void SrsRtpAudioQueue::on_overflow(SrsRtpNackForReceiver* nack)
{
queue_->advance_to(queue_->high());
}
void SrsRtpAudioQueue::collect_packet(vector<vector<SrsRtpPacket2*> >& frames, SrsRtpNackForReceiver* nack)
{ {
// When done, s point to the next available packet. // When done, s point to the next available packet.
uint16_t next = queue_->low(); uint16_t next = queue_->low();
@ -437,12 +423,8 @@ void SrsRtpAudioQueue::collect_packet(vector<vector<SrsRtpPacket2*> >& frames, S
} }
// OK, collect packet to frame. // OK, collect packet to frame.
vector<SrsRtpPacket2*> frame;
frame.push_back(pkt);
// Done, we got the last packet of frame.
nn_collected_frames++; nn_collected_frames++;
frames.push_back(frame); frames.push_back(pkt);
} }
if (queue_->low() != next) { if (queue_->low() != next) {
@ -452,6 +434,11 @@ void SrsRtpAudioQueue::collect_packet(vector<vector<SrsRtpPacket2*> >& frames, S
srs_verbose("collect on frame, update head seq=%u t %u", queue_->low(), next); srs_verbose("collect on frame, update head seq=%u t %u", queue_->low(), next);
queue_->advance_to(next); queue_->advance_to(next);
} }
// For audio, if overflow, clear all packets.
if (queue_->overflow()) {
queue_->advance_to(queue_->high());
}
} }
SrsRtpVideoQueue::SrsRtpVideoQueue(int capacity) : SrsRtpQueue(capacity) SrsRtpVideoQueue::SrsRtpVideoQueue(int capacity) : SrsRtpQueue(capacity)

View file

@ -193,10 +193,7 @@ public:
SrsRtpAudioQueue(int capacity); SrsRtpAudioQueue(int capacity);
virtual ~SrsRtpAudioQueue(); virtual ~SrsRtpAudioQueue();
public: public:
virtual void collect_frames(SrsRtpNackForReceiver* nack, std::vector<std::vector<SrsRtpPacket2*> >& frames); virtual void collect_frames(SrsRtpNackForReceiver* nack, std::vector<SrsRtpPacket2*>& frames);
private:
virtual void on_overflow(SrsRtpNackForReceiver* nack);
virtual void collect_packet(std::vector<std::vector<SrsRtpPacket2*> >& frames, SrsRtpNackForReceiver* nack);
}; };
class SrsRtpVideoQueue : public SrsRtpQueue class SrsRtpVideoQueue : public SrsRtpQueue