Wired up max packet size and added simple test.
BUG=2428 R=mflodman@webrtc.org, pbos@webrtc.org Review URL: https://webrtc-codereview.appspot.com/2384004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4973 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
9401524211
commit
5d957e29f7
@ -166,6 +166,8 @@ VideoSendStream::VideoSendStream(newapi::Transport* transport,
|
|||||||
assert(network_ != NULL);
|
assert(network_ != NULL);
|
||||||
|
|
||||||
network_->RegisterSendTransport(channel_, transport_adapter_);
|
network_->RegisterSendTransport(channel_, transport_adapter_);
|
||||||
|
network_->SetMTU(channel_, config_.rtp.max_packet_size +
|
||||||
|
VideoSendStream::Config::kDefaultPacketOverheader);
|
||||||
|
|
||||||
if (config.encoder) {
|
if (config.encoder) {
|
||||||
external_codec_ = ViEExternalCodec::GetInterface(video_engine);
|
external_codec_ = ViEExternalCodec::GetInterface(video_engine);
|
||||||
|
@ -84,8 +84,11 @@ class VideoSendStream {
|
|||||||
start_state(NULL) {}
|
start_state(NULL) {}
|
||||||
VideoCodec codec;
|
VideoCodec codec;
|
||||||
|
|
||||||
|
static const size_t kDefaultPacketOverheader = 20 + 20; // IPv4 + TCP
|
||||||
|
static const size_t kDefaultMaxPacketSize = 1500 - kDefaultPacketOverheader;
|
||||||
struct Rtp {
|
struct Rtp {
|
||||||
Rtp() : mode(newapi::kRtcpReducedSize), max_packet_size(0) {}
|
Rtp() : mode(newapi::kRtcpReducedSize),
|
||||||
|
max_packet_size(kDefaultMaxPacketSize) {}
|
||||||
newapi::RtcpMode mode;
|
newapi::RtcpMode mode;
|
||||||
|
|
||||||
std::vector<uint32_t> ssrcs;
|
std::vector<uint32_t> ssrcs;
|
||||||
|
@ -105,6 +105,7 @@ TEST_F(VideoSendStreamTest, SendsSetSsrc) {
|
|||||||
scoped_ptr<Call> call(Call::Create(call_config));
|
scoped_ptr<Call> call(Call::Create(call_config));
|
||||||
|
|
||||||
VideoSendStream::Config send_config = GetSendTestConfig(call.get());
|
VideoSendStream::Config send_config = GetSendTestConfig(call.get());
|
||||||
|
send_config.rtp.max_packet_size = 128;
|
||||||
|
|
||||||
RunSendTest(call.get(), send_config, &observer);
|
RunSendTest(call.get(), send_config, &observer);
|
||||||
}
|
}
|
||||||
@ -431,4 +432,49 @@ TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) {
|
|||||||
TestNackRetransmission(kSendRtxSsrc);
|
TestNackRetransmission(kSendRtxSsrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(VideoSendStreamTest, MaxPacketSize) {
|
||||||
|
class PacketSizeObserver : public SendTransportObserver {
|
||||||
|
public:
|
||||||
|
PacketSizeObserver(size_t max_length) : SendTransportObserver(30 * 1000),
|
||||||
|
max_length_(max_length), accumulated_size_(0) {}
|
||||||
|
|
||||||
|
virtual bool SendRTP(const uint8_t* packet, size_t length) OVERRIDE {
|
||||||
|
RTPHeader header;
|
||||||
|
EXPECT_TRUE(
|
||||||
|
rtp_header_parser_->Parse(packet, static_cast<int>(length), &header));
|
||||||
|
|
||||||
|
EXPECT_TRUE(length <= max_length_);
|
||||||
|
|
||||||
|
accumulated_size_ += length;
|
||||||
|
|
||||||
|
// Marker bit set indicates last fragment of a packet
|
||||||
|
if (header.markerBit) {
|
||||||
|
if (accumulated_size_ + length > max_length_) {
|
||||||
|
// The packet was fragmented, total size was larger than max size,
|
||||||
|
// but size of individual fragments were within size limit => pass!
|
||||||
|
send_test_complete_->Set();
|
||||||
|
}
|
||||||
|
accumulated_size_ = 0; // Last fragment, reset packet size
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
size_t max_length_;
|
||||||
|
size_t accumulated_size_;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t kMaxPacketSize = 128;
|
||||||
|
|
||||||
|
PacketSizeObserver observer(kMaxPacketSize);
|
||||||
|
Call::Config call_config(&observer);
|
||||||
|
scoped_ptr<Call> call(Call::Create(call_config));
|
||||||
|
|
||||||
|
VideoSendStream::Config send_config = GetSendTestConfig(call.get());
|
||||||
|
send_config.rtp.max_packet_size = kMaxPacketSize;
|
||||||
|
|
||||||
|
RunSendTest(call.get(), send_config, &observer);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user