Expose RtpCodecParameters to VideoMediaInfo stats.
Payload type -> RtpCodecParameters maps added for sender and receiver side. It contains information that will be needed for RTCCodecStats[1] dictionaries. Video[Sender/Receiver]Info is updated with current codec payload type for every stream which can be used to look up the codec in VideoMediaInfo. A similar change should be made for VoiceMediaInfo and Voice[Sender/Receiver]Info. [1] https://w3c.github.io/webrtc-stats/#codec-dict* BUG=chromium:659117 Review-Url: https://codereview.webrtc.org/2484193002 Cr-Commit-Position: refs/heads/master@{#15060}
This commit is contained in:
parent
82ebe02491
commit
a65704b5c9
@ -692,7 +692,11 @@ struct VideoSenderInfo : public MediaSenderInfo {
|
||||
frames_encoded(0) {}
|
||||
|
||||
std::vector<SsrcGroup> ssrc_groups;
|
||||
// TODO(hbos): Move this to |VideoMediaInfo::send_codecs|?
|
||||
std::string encoder_implementation_name;
|
||||
// TODO(hbos): Move this to |MediaSenderInfo| when supported by
|
||||
// |VoiceSenderInfo| as well (which also extends that class).
|
||||
rtc::Optional<uint32_t> codec_payload_type;
|
||||
int packets_cached;
|
||||
int firs_rcvd;
|
||||
int plis_rcvd;
|
||||
@ -736,7 +740,11 @@ struct VideoReceiverInfo : public MediaReceiverInfo {
|
||||
}
|
||||
|
||||
std::vector<SsrcGroup> ssrc_groups;
|
||||
// TODO(hbos): Move this to |VideoMediaInfo::receive_codecs|?
|
||||
std::string decoder_implementation_name;
|
||||
// TODO(hbos): Move this to |MediaReceiverInfo| when supported by
|
||||
// |VoiceReceiverInfo| as well (which also extends that class).
|
||||
rtc::Optional<uint32_t> codec_payload_type;
|
||||
int packets_concealed;
|
||||
int firs_sent;
|
||||
int plis_sent;
|
||||
@ -812,6 +820,9 @@ struct BandwidthEstimationInfo {
|
||||
int64_t bucket_delay;
|
||||
};
|
||||
|
||||
// Maps from payload type to |RtpCodecParameters|.
|
||||
typedef std::map<int, webrtc::RtpCodecParameters> RtpCodecParametersMap;
|
||||
|
||||
struct VoiceMediaInfo {
|
||||
void Clear() {
|
||||
senders.clear();
|
||||
@ -826,10 +837,14 @@ struct VideoMediaInfo {
|
||||
senders.clear();
|
||||
receivers.clear();
|
||||
bw_estimations.clear();
|
||||
send_codecs.clear();
|
||||
receive_codecs.clear();
|
||||
}
|
||||
std::vector<VideoSenderInfo> senders;
|
||||
std::vector<VideoReceiverInfo> receivers;
|
||||
std::vector<BandwidthEstimationInfo> bw_estimations;
|
||||
RtpCodecParametersMap send_codecs;
|
||||
RtpCodecParametersMap receive_codecs;
|
||||
};
|
||||
|
||||
struct DataMediaInfo {
|
||||
|
||||
@ -423,6 +423,8 @@ class VideoMediaChannelTest : public testing::Test,
|
||||
EXPECT_GT(info.senders[0].bytes_sent, 0);
|
||||
EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent);
|
||||
EXPECT_EQ(0.0, info.senders[0].fraction_lost);
|
||||
ASSERT_TRUE(info.senders[0].codec_payload_type);
|
||||
EXPECT_EQ(DefaultCodec().id, *info.senders[0].codec_payload_type);
|
||||
EXPECT_EQ(0, info.senders[0].firs_rcvd);
|
||||
EXPECT_EQ(0, info.senders[0].plis_rcvd);
|
||||
EXPECT_EQ(0, info.senders[0].nacks_rcvd);
|
||||
@ -431,10 +433,16 @@ class VideoMediaChannelTest : public testing::Test,
|
||||
EXPECT_GT(info.senders[0].framerate_input, 0);
|
||||
EXPECT_GT(info.senders[0].framerate_sent, 0);
|
||||
|
||||
EXPECT_EQ(1U, info.send_codecs.count(DefaultCodec().id));
|
||||
EXPECT_EQ(DefaultCodec().ToCodecParameters(),
|
||||
info.send_codecs[DefaultCodec().id]);
|
||||
|
||||
ASSERT_EQ(1U, info.receivers.size());
|
||||
EXPECT_EQ(1U, info.senders[0].ssrcs().size());
|
||||
EXPECT_EQ(1U, info.receivers[0].ssrcs().size());
|
||||
EXPECT_EQ(info.senders[0].ssrcs()[0], info.receivers[0].ssrcs()[0]);
|
||||
ASSERT_TRUE(info.receivers[0].codec_payload_type);
|
||||
EXPECT_EQ(DefaultCodec().id, *info.receivers[0].codec_payload_type);
|
||||
EXPECT_EQ(NumRtpBytes(), info.receivers[0].bytes_rcvd);
|
||||
EXPECT_EQ(NumRtpPackets(), info.receivers[0].packets_rcvd);
|
||||
EXPECT_EQ(0.0, info.receivers[0].fraction_lost);
|
||||
@ -449,6 +457,10 @@ class VideoMediaChannelTest : public testing::Test,
|
||||
EXPECT_GT(info.receivers[0].framerate_rcvd, 0);
|
||||
EXPECT_GT(info.receivers[0].framerate_decoded, 0);
|
||||
EXPECT_GT(info.receivers[0].framerate_output, 0);
|
||||
|
||||
EXPECT_EQ(1U, info.receive_codecs.count(DefaultCodec().id));
|
||||
EXPECT_EQ(DefaultCodec().ToCodecParameters(),
|
||||
info.receive_codecs[DefaultCodec().id]);
|
||||
}
|
||||
|
||||
cricket::VideoSenderInfo GetSenderStats(size_t i) {
|
||||
|
||||
@ -1334,6 +1334,7 @@ bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) {
|
||||
info->Clear();
|
||||
FillSenderStats(info, log_stats);
|
||||
FillReceiverStats(info, log_stats);
|
||||
FillSendAndReceiveCodecStats(info);
|
||||
webrtc::Call::Stats stats = call_->GetStats();
|
||||
FillBandwidthEstimationStats(stats, info);
|
||||
if (stats.rtt_ms != -1) {
|
||||
@ -1388,6 +1389,20 @@ void WebRtcVideoChannel2::FillBandwidthEstimationStats(
|
||||
video_media_info->bw_estimations.push_back(bwe_info);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::FillSendAndReceiveCodecStats(
|
||||
VideoMediaInfo* video_media_info) {
|
||||
for (const VideoCodec& codec : send_params_.codecs) {
|
||||
webrtc::RtpCodecParameters codec_params = codec.ToCodecParameters();
|
||||
video_media_info->send_codecs.insert(
|
||||
std::make_pair(codec_params.payload_type, std::move(codec_params)));
|
||||
}
|
||||
for (const VideoCodec& codec : recv_params_.codecs) {
|
||||
webrtc::RtpCodecParameters codec_params = codec.ToCodecParameters();
|
||||
video_media_info->receive_codecs.insert(
|
||||
std::make_pair(codec_params.payload_type, std::move(codec_params)));
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnPacketReceived(
|
||||
rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) {
|
||||
@ -1992,8 +2007,11 @@ VideoSenderInfo WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo(
|
||||
for (uint32_t ssrc : parameters_.config.rtp.ssrcs)
|
||||
info.add_ssrc(ssrc);
|
||||
|
||||
if (parameters_.codec_settings)
|
||||
if (parameters_.codec_settings) {
|
||||
info.codec_name = parameters_.codec_settings->codec.name;
|
||||
info.codec_payload_type = rtc::Optional<uint32_t>(
|
||||
static_cast<uint32_t>(parameters_.codec_settings->codec.id));
|
||||
}
|
||||
|
||||
if (stream_ == NULL)
|
||||
return info;
|
||||
@ -2401,6 +2419,10 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetVideoReceiverInfo(
|
||||
info.add_ssrc(config_.rtp.remote_ssrc);
|
||||
webrtc::VideoReceiveStream::Stats stats = stream_->GetStats();
|
||||
info.decoder_implementation_name = stats.decoder_implementation_name;
|
||||
if (stats.current_payload_type != -1) {
|
||||
info.codec_payload_type = rtc::Optional<uint32_t>(
|
||||
static_cast<uint32_t>(stats.current_payload_type));
|
||||
}
|
||||
info.bytes_rcvd = stats.rtp_stats.transmitted.payload_bytes +
|
||||
stats.rtp_stats.transmitted.header_bytes +
|
||||
stats.rtp_stats.transmitted.padding_bytes;
|
||||
|
||||
@ -474,6 +474,7 @@ class WebRtcVideoChannel2 : public VideoMediaChannel, public webrtc::Transport {
|
||||
void FillReceiverStats(VideoMediaInfo* info, bool log_stats);
|
||||
void FillBandwidthEstimationStats(const webrtc::Call::Stats& stats,
|
||||
VideoMediaInfo* info);
|
||||
void FillSendAndReceiveCodecStats(VideoMediaInfo* video_media_info);
|
||||
|
||||
rtc::ThreadChecker thread_checker_;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user