Hi,
I'm hoping someone can help me out with a short term work around for this issue (most likely a bug) with webrtc. The end result for us is an unusable system the way things currently are with the webrtc sdk because of dropped frames. Note, I have cpuoveruse disabled and dropframes set to not be used. I have my configurations below. We are using webrtc's trunk from about a week ago, but this issue has been with the sdk for quite a while. I have a demo soon so I'm really hoping someone can help me out. We are running over a local LAN, either a windows PC or android device on the same router, (stun server is on the wan). The router says traffic shows we are not even using 1/16th of its bandwidth and QOS is turned off. Note, only 3 devices are connected to this router.
I start to see errors like:
Error(stunport.cc:226): Jingle:Port[video:1:0::Net[Intel(R):
192.168.1.103/32]]: UDP send of 1168 bytes failed with error 10035
Warning(channel.cc:546): Got EWOULDBLOCK from socket.
which then eventually, I think leads into the error:
Warning(webrtcvideoengine.cc:1540): webrtc: The configured min bitrate (128 kbps) is greater than the estimated available bandwidth (30 kbps).
Sometimes we even hit this error in rtp_packet_history:
if (packet_length > max_packet_length_) {
WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, -1,
"Failed to store RTP packet, length: %d", packet_length);
return -1;
}
Note, we are not a typical camera. We have a scene that may look as if the image is never changing over many frames (at 15hz, 720P), If we configure the min video bandwidth to be about 768k or 1.5M via the SDP, I can see where things are tracking with this static scene as the bit rate eventually goes down to the setting we have in the SDP,
Note, we only use video and an datachannel. We do not have an audio track.
settings->plType = VCM_VP8_PAYLOAD_TYPE;
settings->startBitrate = 100;
settings->minBitrate = VCM_MIN_BITRATE;
settings->maxBitrate = 0;
settings->maxFramerate = VCM_DEFAULT_FRAME_RATE;
settings->width = VCM_DEFAULT_CODEC_WIDTH;
settings->height = VCM_DEFAULT_CODEC_HEIGHT;
settings->numberOfSimulcastStreams = 0;
settings->qpMax = 56;
settings->codecSpecific.VP8.resilience = kResilientStream;
settings->codecSpecific.VP8.numberOfTemporalLayers = 1;
settings->codecSpecific.VP8.denoisingOn = false;
settings->codecSpecific.VP8.errorConcealmentOn = false;
settings->codecSpecific.VP8.automaticResizeOn = true;
settings->codecSpecific.VP8.frameDroppingOn = false;
settings->codecSpecific.VP8.keyFrameInterval = 3000;
// rate control settings
config_->rc_dropframe_thresh = 0;
config_->rc_end_usage = VPX_CBR;
config_->g_pass = VPX_RC_ONE_PASS;
config_->rc_resize_allowed = true;
config_->rc_min_quantizer = 2;
config_->rc_max_quantizer = inst->qpMax;
config_->rc_undershoot_pct = 100;
config_->rc_overshoot_pct = 30;
config_->rc_buf_initial_sz = 60;
config_->rc_buf_optimal_sz = 80;
config_->rc_buf_sz = 100;
// set the maximum target size of any key-frame.
rc_max_intra_target_ = MaxIntraTarget(config_->rc_buf_optimal_sz);
setup_constraints.AddOptional( webrtc::MediaConstraintsInterface::kEnableRtpDataChannels, true);
setup_constraints.AddOptional( webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, true);
setup_constraints.AddOptional( webrtc::MediaConstraintsInterface::kEnableIPv6, true); //
setup_constraints.AddOptional( webrtc::MediaConstraintsInterface::kCpuOveruseDetection, false);
peer_connection_ = peer_connection_factory_->CreatePeerConnection(servers,
&setup_constraints,
/* &identityservice*/NULL,
this);