Enabling and testing RTCP CNAME in new API.
BUG=2232 R=holmer@google.com, stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/2076004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4592 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include "webrtc/video_engine/internal/video_send_stream.h"
|
#include "webrtc/video_engine/internal/video_send_stream.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||||
@ -105,6 +107,13 @@ VideoSendStream::VideoSendStream(newapi::Transport* transport,
|
|||||||
rtp_rtcp_->SetTransmissionSmoothingStatus(channel_, config_.pacing);
|
rtp_rtcp_->SetTransmissionSmoothingStatus(channel_, config_.pacing);
|
||||||
rtp_rtcp_->SetSendTimestampOffsetStatus(channel_, true, 1);
|
rtp_rtcp_->SetSendTimestampOffsetStatus(channel_, true, 1);
|
||||||
|
|
||||||
|
char rtcp_cname[ViERTP_RTCP::KMaxRTCPCNameLength];
|
||||||
|
assert(config_.rtp.c_name.length() < ViERTP_RTCP::KMaxRTCPCNameLength);
|
||||||
|
strncpy(rtcp_cname, config_.rtp.c_name.c_str(), sizeof(rtcp_cname) - 1);
|
||||||
|
rtcp_cname[sizeof(rtcp_cname) - 1] = '\0';
|
||||||
|
|
||||||
|
rtp_rtcp_->SetRTCPCName(channel_, rtcp_cname);
|
||||||
|
|
||||||
capture_ = ViECapture::GetInterface(video_engine);
|
capture_ = ViECapture::GetInterface(video_engine);
|
||||||
capture_->AllocateExternalCaptureDevice(capture_id_, external_capture_);
|
capture_->AllocateExternalCaptureDevice(capture_id_, external_capture_);
|
||||||
capture_->ConnectCaptureDevice(capture_id_, channel_);
|
capture_->ConnectCaptureDevice(capture_id_, channel_);
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
||||||
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
|
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
|
||||||
#include "webrtc/video_engine/test/common/frame_generator.h"
|
#include "webrtc/video_engine/test/common/frame_generator.h"
|
||||||
@ -19,7 +20,6 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
class VideoSendStreamTest : public ::testing::Test {};
|
|
||||||
class SendTransportObserver : public test::NullTransport {
|
class SendTransportObserver : public test::NullTransport {
|
||||||
public:
|
public:
|
||||||
explicit SendTransportObserver(unsigned long timeout_ms)
|
explicit SendTransportObserver(unsigned long timeout_ms)
|
||||||
@ -39,8 +39,32 @@ class SendTransportObserver : public test::NullTransport {
|
|||||||
unsigned long timeout_ms_;
|
unsigned long timeout_ms_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class VideoSendStreamTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
static const uint32_t kSendSsrc;
|
||||||
|
void RunSendTest(newapi::VideoCall* call,
|
||||||
|
const newapi::VideoSendStream::Config& config,
|
||||||
|
SendTransportObserver* observer) {
|
||||||
|
newapi::VideoSendStream* send_stream = call->CreateSendStream(config);
|
||||||
|
scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
|
||||||
|
test::FrameGeneratorCapturer::Create(
|
||||||
|
send_stream->Input(),
|
||||||
|
test::FrameGenerator::Create(320, 240, Clock::GetRealTimeClock()),
|
||||||
|
30));
|
||||||
|
send_stream->StartSend();
|
||||||
|
frame_generator_capturer->Start();
|
||||||
|
|
||||||
|
EXPECT_EQ(kEventSignaled, observer->Wait());
|
||||||
|
|
||||||
|
frame_generator_capturer->Stop();
|
||||||
|
send_stream->StopSend();
|
||||||
|
call->DestroySendStream(send_stream);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint32_t VideoSendStreamTest::kSendSsrc = 0xC0FFEE;
|
||||||
|
|
||||||
TEST_F(VideoSendStreamTest, SendsSetSsrc) {
|
TEST_F(VideoSendStreamTest, SendsSetSsrc) {
|
||||||
static const uint32_t kSendSsrc = 0xC0FFEE;
|
|
||||||
class SendSsrcObserver : public SendTransportObserver {
|
class SendSsrcObserver : public SendTransportObserver {
|
||||||
public:
|
public:
|
||||||
SendSsrcObserver() : SendTransportObserver(30 * 1000) {}
|
SendSsrcObserver() : SendTransportObserver(30 * 1000) {}
|
||||||
@ -62,20 +86,42 @@ TEST_F(VideoSendStreamTest, SendsSetSsrc) {
|
|||||||
|
|
||||||
newapi::VideoSendStream::Config send_config = call->GetDefaultSendConfig();
|
newapi::VideoSendStream::Config send_config = call->GetDefaultSendConfig();
|
||||||
send_config.rtp.ssrcs.push_back(kSendSsrc);
|
send_config.rtp.ssrcs.push_back(kSendSsrc);
|
||||||
newapi::VideoSendStream* send_stream = call->CreateSendStream(send_config);
|
|
||||||
scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
|
|
||||||
test::FrameGeneratorCapturer::Create(
|
|
||||||
send_stream->Input(),
|
|
||||||
test::FrameGenerator::Create(320, 240, Clock::GetRealTimeClock()),
|
|
||||||
30));
|
|
||||||
send_stream->StartSend();
|
|
||||||
frame_generator_capturer->Start();
|
|
||||||
|
|
||||||
EXPECT_EQ(kEventSignaled, observer.Wait());
|
RunSendTest(call.get(), send_config, &observer);
|
||||||
|
}
|
||||||
|
|
||||||
frame_generator_capturer->Stop();
|
TEST_F(VideoSendStreamTest, SupportsCName) {
|
||||||
send_stream->StopSend();
|
static std::string kCName = "PjQatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo=";
|
||||||
call->DestroySendStream(send_stream);
|
class CNameObserver : public SendTransportObserver {
|
||||||
|
public:
|
||||||
|
CNameObserver() : SendTransportObserver(30 * 1000) {}
|
||||||
|
|
||||||
|
virtual bool SendRTCP(const uint8_t* packet, size_t length) OVERRIDE {
|
||||||
|
RTCPUtility::RTCPParserV2 parser(packet, length, true);
|
||||||
|
EXPECT_TRUE(parser.IsValid());
|
||||||
|
|
||||||
|
RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
|
||||||
|
while (packet_type != RTCPUtility::kRtcpNotValidCode) {
|
||||||
|
if (packet_type == RTCPUtility::kRtcpSdesChunkCode) {
|
||||||
|
EXPECT_EQ(parser.Packet().CName.CName, kCName);
|
||||||
|
send_test_complete_->Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
packet_type = parser.Iterate();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} observer;
|
||||||
|
|
||||||
|
newapi::VideoCall::Config call_config(&observer);
|
||||||
|
scoped_ptr<newapi::VideoCall> call(newapi::VideoCall::Create(call_config));
|
||||||
|
|
||||||
|
newapi::VideoSendStream::Config send_config = call->GetDefaultSendConfig();
|
||||||
|
send_config.rtp.ssrcs.push_back(kSendSsrc);
|
||||||
|
send_config.rtp.c_name = kCName;
|
||||||
|
|
||||||
|
RunSendTest(call.get(), send_config, &observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user