s/WebRtcVideoChannel2/WebRtcVideoChannel and s/WebRtcVideoEngine2/WebRtcVideoEngine
WebRtcVideoChannel and and WebRtcVideoEngine seem to have been removed, and only WebRtcVideoChannel2 and WebRtcVideoEngine2 remain, which removes the need for the "2" postfix. BUG=None Review-Url: https://codereview.webrtc.org/2932073002 Cr-Commit-Position: refs/heads/master@{#18531}
This commit is contained in:
parent
a8e781aedf
commit
f184138a5f
@ -33,7 +33,7 @@ class TransportFeedbackObserver;
|
||||
//
|
||||
// This should also have a reference to the underlying
|
||||
// webrtc::Transport(s). Currently, webrtc::Transport is implemented by
|
||||
// WebRtcVideoChannel2 and WebRtcVoiceMediaChannel, and owned by
|
||||
// WebRtcVideoChannel and WebRtcVoiceMediaChannel, and owned by
|
||||
// WebrtcSession. Video and audio always uses different transport
|
||||
// objects, even in the common case where they are bundled over the
|
||||
// same underlying transport.
|
||||
|
||||
@ -140,8 +140,8 @@ rtc_static_library("rtc_media") {
|
||||
"engine/webrtcvideocapturerfactory.h",
|
||||
"engine/webrtcvideodecoderfactory.h",
|
||||
"engine/webrtcvideoencoderfactory.h",
|
||||
"engine/webrtcvideoengine2.cc",
|
||||
"engine/webrtcvideoengine2.h",
|
||||
"engine/webrtcvideoengine.cc",
|
||||
"engine/webrtcvideoengine.h",
|
||||
"engine/webrtcvoe.h",
|
||||
"engine/webrtcvoiceengine.cc",
|
||||
"engine/webrtcvoiceengine.h",
|
||||
@ -381,7 +381,7 @@ if (rtc_include_tests) {
|
||||
"engine/webrtcmediaengine_unittest.cc",
|
||||
"engine/webrtcvideocapturer_unittest.cc",
|
||||
"engine/webrtcvideoencoderfactory_unittest.cc",
|
||||
"engine/webrtcvideoengine2_unittest.cc",
|
||||
"engine/webrtcvideoengine_unittest.cc",
|
||||
"engine/webrtcvoiceengine_unittest.cc",
|
||||
]
|
||||
|
||||
|
||||
@ -108,7 +108,7 @@ struct MediaConfig {
|
||||
// Enable WebRTC suspension of video. No video frames will be sent
|
||||
// when the bitrate is below the configured minimum bitrate. This
|
||||
// flag comes from the PeerConnection constraint
|
||||
// 'googSuspendBelowMinBitrate', and WebRtcVideoChannel2 copies it
|
||||
// 'googSuspendBelowMinBitrate', and WebRtcVideoChannel copies it
|
||||
// to VideoSendStream::Config::suspend_below_min_bitrate.
|
||||
bool suspend_below_min_bitrate = false;
|
||||
|
||||
@ -122,7 +122,7 @@ struct MediaConfig {
|
||||
// This flag comes from PeerConnection's RtcConfiguration, but is
|
||||
// currently only set by the command line flag
|
||||
// 'disable-rtc-smoothness-algorithm'.
|
||||
// WebRtcVideoChannel2::AddRecvStream copies it to the created
|
||||
// WebRtcVideoChannel::AddRecvStream copies it to the created
|
||||
// WebRtcVideoReceiveStream, where it is returned by the
|
||||
// SmoothsRenderedFrames method. This method is used by the
|
||||
// VideoReceiveStream, where the value is passed on to the
|
||||
@ -343,12 +343,12 @@ struct VideoOptions {
|
||||
}
|
||||
|
||||
// Enable denoising? This flag comes from the getUserMedia
|
||||
// constraint 'googNoiseReduction', and WebRtcVideoEngine2 passes it
|
||||
// constraint 'googNoiseReduction', and WebRtcVideoEngine passes it
|
||||
// on to the codec options. Disabled by default.
|
||||
rtc::Optional<bool> video_noise_reduction;
|
||||
// Force screencast to use a minimum bitrate. This flag comes from
|
||||
// the PeerConnection constraint 'googScreencastMinBitrate'. It is
|
||||
// copied to the encoder config by WebRtcVideoChannel2.
|
||||
// copied to the encoder config by WebRtcVideoChannel.
|
||||
rtc::Optional<int> screencast_min_bitrate_kbps;
|
||||
// Set by screencast sources. Implies selection of encoding settings
|
||||
// suitable for screencast. Most likely not the right way to do
|
||||
@ -1021,7 +1021,7 @@ struct VideoSendParameters : RtpSendParameters<VideoCodec> {
|
||||
// description's SDP line 'a=x-google-flag:conference', copied over
|
||||
// by VideoChannel::SetRemoteContent_w, and ultimately used by
|
||||
// conference mode screencast logic in
|
||||
// WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig.
|
||||
// WebRtcVideoChannel::WebRtcVideoSendStream::CreateVideoEncoderConfig.
|
||||
// The special screencast behaviour is disabled by default.
|
||||
bool conference_mode = false;
|
||||
};
|
||||
|
||||
@ -67,7 +67,7 @@ webrtc::VideoDecoder* InternalDecoderFactory::CreateVideoDecoder(
|
||||
return webrtc::H264Decoder::Create();
|
||||
// This could happen in a software-fallback for a codec type only
|
||||
// supported externally (e.g. H.264 on iOS or Android) or in current usage
|
||||
// in WebRtcVideoEngine2 if the external decoder fails to be created.
|
||||
// in WebRtcVideoEngine if the external decoder fails to be created.
|
||||
LOG(LS_ERROR) << "Unable to create an H.264 decoder fallback. "
|
||||
<< "Decoding of this stream will be broken.";
|
||||
return new NullVideoDecoder();
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
#include "webrtc/media/engine/webrtcvoiceengine.h"
|
||||
|
||||
#ifdef HAVE_WEBRTC_VIDEO
|
||||
#include "webrtc/media/engine/webrtcvideoengine2.h"
|
||||
#include "webrtc/media/engine/webrtcvideoengine.h"
|
||||
#else
|
||||
#include "webrtc/media/engine/nullwebrtcvideoengine.h"
|
||||
#endif
|
||||
@ -26,7 +26,7 @@ namespace cricket {
|
||||
|
||||
class WebRtcMediaEngine2
|
||||
#ifdef HAVE_WEBRTC_VIDEO
|
||||
: public CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine2> {
|
||||
: public CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine> {
|
||||
#else
|
||||
: public CompositeMediaEngine<WebRtcVoiceEngine, NullWebRtcVideoEngine> {
|
||||
#endif
|
||||
@ -40,7 +40,7 @@ class WebRtcMediaEngine2
|
||||
WebRtcVideoDecoderFactory* video_decoder_factory,
|
||||
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer)
|
||||
#ifdef HAVE_WEBRTC_VIDEO
|
||||
: CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine2>(
|
||||
: CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine>(
|
||||
adm,
|
||||
audio_encoder_factory,
|
||||
audio_decoder_factory,
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "webrtc/media/engine/webrtcvideoengine2.h"
|
||||
#include "webrtc/media/engine/webrtcvideoengine.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <algorithm>
|
||||
@ -373,7 +373,7 @@ static std::vector<VideoCodec> GetSupportedCodecs(
|
||||
const WebRtcVideoEncoderFactory* external_encoder_factory);
|
||||
|
||||
rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
|
||||
const VideoCodec& codec) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
bool is_screencast = parameters_.options.is_screencast.value_or(false);
|
||||
@ -432,7 +432,7 @@ DefaultUnsignalledSsrcHandler::DefaultUnsignalledSsrcHandler()
|
||||
: default_sink_(nullptr) {}
|
||||
|
||||
UnsignalledSsrcHandler::Action DefaultUnsignalledSsrcHandler::OnUnsignalledSsrc(
|
||||
WebRtcVideoChannel2* channel,
|
||||
WebRtcVideoChannel* channel,
|
||||
uint32_t ssrc) {
|
||||
rtc::Optional<uint32_t> default_recv_ssrc =
|
||||
channel->GetDefaultReceiveStreamSsrc();
|
||||
@ -460,7 +460,7 @@ DefaultUnsignalledSsrcHandler::GetDefaultSink() const {
|
||||
}
|
||||
|
||||
void DefaultUnsignalledSsrcHandler::SetDefaultSink(
|
||||
WebRtcVideoChannel2* channel,
|
||||
WebRtcVideoChannel* channel,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) {
|
||||
default_sink_ = sink;
|
||||
rtc::Optional<uint32_t> default_recv_ssrc =
|
||||
@ -470,38 +470,38 @@ void DefaultUnsignalledSsrcHandler::SetDefaultSink(
|
||||
}
|
||||
}
|
||||
|
||||
WebRtcVideoEngine2::WebRtcVideoEngine2()
|
||||
WebRtcVideoEngine::WebRtcVideoEngine()
|
||||
: initialized_(false),
|
||||
external_decoder_factory_(NULL),
|
||||
external_encoder_factory_(NULL) {
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()";
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()";
|
||||
}
|
||||
|
||||
WebRtcVideoEngine2::~WebRtcVideoEngine2() {
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine2::~WebRtcVideoEngine2";
|
||||
WebRtcVideoEngine::~WebRtcVideoEngine() {
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine::~WebRtcVideoEngine";
|
||||
}
|
||||
|
||||
void WebRtcVideoEngine2::Init() {
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine2::Init";
|
||||
void WebRtcVideoEngine::Init() {
|
||||
LOG(LS_INFO) << "WebRtcVideoEngine::Init";
|
||||
initialized_ = true;
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel(
|
||||
WebRtcVideoChannel* WebRtcVideoEngine::CreateChannel(
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options) {
|
||||
RTC_DCHECK(initialized_);
|
||||
LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString();
|
||||
return new WebRtcVideoChannel2(call, config, options,
|
||||
external_encoder_factory_,
|
||||
external_decoder_factory_);
|
||||
return new WebRtcVideoChannel(call, config, options,
|
||||
external_encoder_factory_,
|
||||
external_decoder_factory_);
|
||||
}
|
||||
|
||||
std::vector<VideoCodec> WebRtcVideoEngine2::codecs() const {
|
||||
std::vector<VideoCodec> WebRtcVideoEngine::codecs() const {
|
||||
return GetSupportedCodecs(external_encoder_factory_);
|
||||
}
|
||||
|
||||
RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const {
|
||||
RtpCapabilities WebRtcVideoEngine::GetCapabilities() const {
|
||||
RtpCapabilities capabilities;
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kTimestampOffsetUri,
|
||||
@ -526,13 +526,13 @@ RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const {
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
void WebRtcVideoEngine2::SetExternalDecoderFactory(
|
||||
void WebRtcVideoEngine::SetExternalDecoderFactory(
|
||||
WebRtcVideoDecoderFactory* decoder_factory) {
|
||||
RTC_DCHECK(!initialized_);
|
||||
external_decoder_factory_ = decoder_factory;
|
||||
}
|
||||
|
||||
void WebRtcVideoEngine2::SetExternalEncoderFactory(
|
||||
void WebRtcVideoEngine::SetExternalEncoderFactory(
|
||||
WebRtcVideoEncoderFactory* encoder_factory) {
|
||||
RTC_DCHECK(!initialized_);
|
||||
if (external_encoder_factory_ == encoder_factory)
|
||||
@ -636,7 +636,7 @@ static std::vector<VideoCodec> GetSupportedCodecs(
|
||||
return unified_codecs;
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoChannel2(
|
||||
WebRtcVideoChannel::WebRtcVideoChannel(
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
@ -658,15 +658,15 @@ WebRtcVideoChannel2::WebRtcVideoChannel2(
|
||||
recv_flexfec_payload_type_ = recv_codecs_.front().flexfec_payload_type;
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::~WebRtcVideoChannel2() {
|
||||
WebRtcVideoChannel::~WebRtcVideoChannel() {
|
||||
for (auto& kv : send_streams_)
|
||||
delete kv.second;
|
||||
for (auto& kv : receive_streams_)
|
||||
delete kv.second;
|
||||
}
|
||||
|
||||
rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>
|
||||
WebRtcVideoChannel2::SelectSendVideoCodec(
|
||||
rtc::Optional<WebRtcVideoChannel::VideoCodecSettings>
|
||||
WebRtcVideoChannel::SelectSendVideoCodec(
|
||||
const std::vector<VideoCodecSettings>& remote_mapped_codecs) const {
|
||||
const std::vector<VideoCodec> local_supported_codecs =
|
||||
GetSupportedCodecs(external_encoder_factory_);
|
||||
@ -684,7 +684,7 @@ WebRtcVideoChannel2::SelectSendVideoCodec(
|
||||
return rtc::Optional<VideoCodecSettings>();
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::NonFlexfecReceiveCodecsHaveChanged(
|
||||
bool WebRtcVideoChannel::NonFlexfecReceiveCodecsHaveChanged(
|
||||
std::vector<VideoCodecSettings> before,
|
||||
std::vector<VideoCodecSettings> after) {
|
||||
if (before.size() != after.size()) {
|
||||
@ -707,13 +707,13 @@ bool WebRtcVideoChannel2::NonFlexfecReceiveCodecsHaveChanged(
|
||||
std::sort(after.begin(), after.end(), comparison);
|
||||
|
||||
// Changes in FlexFEC payload type are handled separately in
|
||||
// WebRtcVideoChannel2::GetChangedRecvParameters, so disregard FlexFEC in the
|
||||
// WebRtcVideoChannel::GetChangedRecvParameters, so disregard FlexFEC in the
|
||||
// comparison here.
|
||||
return !std::equal(before.begin(), before.end(), after.begin(),
|
||||
VideoCodecSettings::EqualsDisregardingFlexfec);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::GetChangedSendParameters(
|
||||
bool WebRtcVideoChannel::GetChangedSendParameters(
|
||||
const VideoSendParameters& params,
|
||||
ChangedSendParameters* changed_params) const {
|
||||
if (!ValidateCodecFormats(params.codecs) ||
|
||||
@ -776,12 +776,12 @@ bool WebRtcVideoChannel2::GetChangedSendParameters(
|
||||
return true;
|
||||
}
|
||||
|
||||
rtc::DiffServCodePoint WebRtcVideoChannel2::PreferredDscp() const {
|
||||
rtc::DiffServCodePoint WebRtcVideoChannel::PreferredDscp() const {
|
||||
return rtc::DSCP_AF41;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendParameters");
|
||||
bool WebRtcVideoChannel::SetSendParameters(const VideoSendParameters& params) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetSendParameters");
|
||||
LOG(LS_INFO) << "SetSendParameters: " << params.ToString();
|
||||
ChangedSendParameters changed_params;
|
||||
if (!GetChangedSendParameters(params, &changed_params)) {
|
||||
@ -823,7 +823,7 @@ bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) {
|
||||
// bitrate config for the codec. This allows FEC to be applied above the
|
||||
// codec target bitrate.
|
||||
// TODO(pbos): Figure out whether b=AS means max bitrate for this
|
||||
// WebRtcVideoChannel2 (in which case we're good), or per sender (SSRC),
|
||||
// WebRtcVideoChannel (in which case we're good), or per sender (SSRC),
|
||||
// in which case this should not set a Call::BitrateConfig but rather
|
||||
// reconfigure all senders.
|
||||
bitrate_config_.max_bitrate_bps =
|
||||
@ -856,7 +856,7 @@ bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) {
|
||||
return true;
|
||||
}
|
||||
|
||||
webrtc::RtpParameters WebRtcVideoChannel2::GetRtpSendParameters(
|
||||
webrtc::RtpParameters WebRtcVideoChannel::GetRtpSendParameters(
|
||||
uint32_t ssrc) const {
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
auto it = send_streams_.find(ssrc);
|
||||
@ -875,10 +875,10 @@ webrtc::RtpParameters WebRtcVideoChannel2::GetRtpSendParameters(
|
||||
return rtp_params;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetRtpSendParameters(
|
||||
bool WebRtcVideoChannel::SetRtpSendParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRtpSendParameters");
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetRtpSendParameters");
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
auto it = send_streams_.find(ssrc);
|
||||
if (it == send_streams_.end()) {
|
||||
@ -899,7 +899,7 @@ bool WebRtcVideoChannel2::SetRtpSendParameters(
|
||||
return it->second->SetRtpParameters(parameters);
|
||||
}
|
||||
|
||||
webrtc::RtpParameters WebRtcVideoChannel2::GetRtpReceiveParameters(
|
||||
webrtc::RtpParameters WebRtcVideoChannel::GetRtpReceiveParameters(
|
||||
uint32_t ssrc) const {
|
||||
webrtc::RtpParameters rtp_params;
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
@ -931,10 +931,10 @@ webrtc::RtpParameters WebRtcVideoChannel2::GetRtpReceiveParameters(
|
||||
return rtp_params;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetRtpReceiveParameters(
|
||||
bool WebRtcVideoChannel::SetRtpReceiveParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRtpReceiveParameters");
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetRtpReceiveParameters");
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
|
||||
// SSRC of 0 represents an unsignaled receive stream.
|
||||
@ -963,7 +963,7 @@ bool WebRtcVideoChannel2::SetRtpReceiveParameters(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::GetChangedRecvParameters(
|
||||
bool WebRtcVideoChannel::GetChangedRecvParameters(
|
||||
const VideoRecvParameters& params,
|
||||
ChangedRecvParameters* changed_params) const {
|
||||
if (!ValidateCodecFormats(params.codecs) ||
|
||||
@ -1012,8 +1012,8 @@ bool WebRtcVideoChannel2::GetChangedRecvParameters(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvParameters");
|
||||
bool WebRtcVideoChannel::SetRecvParameters(const VideoRecvParameters& params) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetRecvParameters");
|
||||
LOG(LS_INFO) << "SetRecvParameters: " << params.ToString();
|
||||
ChangedRecvParameters changed_params;
|
||||
if (!GetChangedRecvParameters(params, &changed_params)) {
|
||||
@ -1045,7 +1045,7 @@ bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string WebRtcVideoChannel2::CodecSettingsVectorToString(
|
||||
std::string WebRtcVideoChannel::CodecSettingsVectorToString(
|
||||
const std::vector<VideoCodecSettings>& codecs) {
|
||||
std::stringstream out;
|
||||
out << '{';
|
||||
@ -1059,7 +1059,7 @@ std::string WebRtcVideoChannel2::CodecSettingsVectorToString(
|
||||
return out.str();
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::GetSendCodec(VideoCodec* codec) {
|
||||
bool WebRtcVideoChannel::GetSendCodec(VideoCodec* codec) {
|
||||
if (!send_codec_) {
|
||||
LOG(LS_VERBOSE) << "GetSendCodec: No send codec set.";
|
||||
return false;
|
||||
@ -1068,8 +1068,8 @@ bool WebRtcVideoChannel2::GetSendCodec(VideoCodec* codec) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetSend(bool send) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSend");
|
||||
bool WebRtcVideoChannel::SetSend(bool send) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetSend");
|
||||
LOG(LS_VERBOSE) << "SetSend: " << (send ? "true" : "false");
|
||||
if (send && !send_codec_) {
|
||||
LOG(LS_ERROR) << "SetSend(true) called before setting codec.";
|
||||
@ -1088,7 +1088,7 @@ bool WebRtcVideoChannel2::SetSend(bool send) {
|
||||
// TODO(nisse): The enable argument was used for mute logic which has
|
||||
// been moved to VideoBroadcaster. So remove the argument from this
|
||||
// method.
|
||||
bool WebRtcVideoChannel2::SetVideoSend(
|
||||
bool WebRtcVideoChannel::SetVideoSend(
|
||||
uint32_t ssrc,
|
||||
bool enable,
|
||||
const VideoOptions* options,
|
||||
@ -1111,7 +1111,7 @@ bool WebRtcVideoChannel2::SetVideoSend(
|
||||
return kv->second->SetVideoSend(enable, options, source);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::ValidateSendSsrcAvailability(
|
||||
bool WebRtcVideoChannel::ValidateSendSsrcAvailability(
|
||||
const StreamParams& sp) const {
|
||||
for (uint32_t ssrc : sp.ssrcs) {
|
||||
if (send_ssrcs_.find(ssrc) != send_ssrcs_.end()) {
|
||||
@ -1122,7 +1122,7 @@ bool WebRtcVideoChannel2::ValidateSendSsrcAvailability(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::ValidateReceiveSsrcAvailability(
|
||||
bool WebRtcVideoChannel::ValidateReceiveSsrcAvailability(
|
||||
const StreamParams& sp) const {
|
||||
for (uint32_t ssrc : sp.ssrcs) {
|
||||
if (receive_ssrcs_.find(ssrc) != receive_ssrcs_.end()) {
|
||||
@ -1134,7 +1134,7 @@ bool WebRtcVideoChannel2::ValidateReceiveSsrcAvailability(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::AddSendStream(const StreamParams& sp) {
|
||||
bool WebRtcVideoChannel::AddSendStream(const StreamParams& sp) {
|
||||
LOG(LS_INFO) << "AddSendStream: " << sp.ToString();
|
||||
if (!ValidateStreamParams(sp))
|
||||
return false;
|
||||
@ -1175,7 +1175,7 @@ bool WebRtcVideoChannel2::AddSendStream(const StreamParams& sp) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::RemoveSendStream(uint32_t ssrc) {
|
||||
bool WebRtcVideoChannel::RemoveSendStream(uint32_t ssrc) {
|
||||
LOG(LS_INFO) << "RemoveSendStream: " << ssrc;
|
||||
|
||||
WebRtcVideoSendStream* removed_stream;
|
||||
@ -1212,19 +1212,19 @@ bool WebRtcVideoChannel2::RemoveSendStream(uint32_t ssrc) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::DeleteReceiveStream(
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream* stream) {
|
||||
void WebRtcVideoChannel::DeleteReceiveStream(
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream* stream) {
|
||||
for (uint32_t old_ssrc : stream->GetSsrcs())
|
||||
receive_ssrcs_.erase(old_ssrc);
|
||||
delete stream;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp) {
|
||||
bool WebRtcVideoChannel::AddRecvStream(const StreamParams& sp) {
|
||||
return AddRecvStream(sp, false);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp,
|
||||
bool default_stream) {
|
||||
bool WebRtcVideoChannel::AddRecvStream(const StreamParams& sp,
|
||||
bool default_stream) {
|
||||
RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
||||
|
||||
LOG(LS_INFO) << "AddRecvStream" << (default_stream ? " (default stream)" : "")
|
||||
@ -1269,7 +1269,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp,
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::ConfigureReceiverRtp(
|
||||
void WebRtcVideoChannel::ConfigureReceiverRtp(
|
||||
webrtc::VideoReceiveStream::Config* config,
|
||||
webrtc::FlexfecReceiveStream::Config* flexfec_config,
|
||||
const StreamParams& sp) const {
|
||||
@ -1321,7 +1321,7 @@ void WebRtcVideoChannel2::ConfigureReceiverRtp(
|
||||
}
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::RemoveRecvStream(uint32_t ssrc) {
|
||||
bool WebRtcVideoChannel::RemoveRecvStream(uint32_t ssrc) {
|
||||
LOG(LS_INFO) << "RemoveRecvStream: " << ssrc;
|
||||
if (ssrc == 0) {
|
||||
LOG(LS_ERROR) << "RemoveRecvStream with 0 ssrc is not supported.";
|
||||
@ -1341,14 +1341,14 @@ bool WebRtcVideoChannel2::RemoveRecvStream(uint32_t ssrc) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SetSink(
|
||||
bool WebRtcVideoChannel::SetSink(
|
||||
uint32_t ssrc,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) {
|
||||
LOG(LS_INFO) << "SetSink: ssrc:" << ssrc << " "
|
||||
<< (sink ? "(ptr)" : "nullptr");
|
||||
if (ssrc == 0) {
|
||||
// Do not hold |stream_crit_| here, since SetDefaultSink will call
|
||||
// WebRtcVideoChannel2::GetDefaultReceiveStreamSsrc().
|
||||
// WebRtcVideoChannel::GetDefaultReceiveStreamSsrc().
|
||||
default_unsignalled_ssrc_handler_.SetDefaultSink(this, sink);
|
||||
return true;
|
||||
}
|
||||
@ -1364,8 +1364,8 @@ bool WebRtcVideoChannel2::SetSink(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::GetStats");
|
||||
bool WebRtcVideoChannel::GetStats(VideoMediaInfo* info) {
|
||||
TRACE_EVENT0("webrtc", "WebRtcVideoChannel::GetStats");
|
||||
|
||||
// Log stats periodically.
|
||||
bool log_stats = false;
|
||||
@ -1395,7 +1395,7 @@ bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::FillSenderStats(VideoMediaInfo* video_media_info,
|
||||
void WebRtcVideoChannel::FillSenderStats(VideoMediaInfo* video_media_info,
|
||||
bool log_stats) {
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it =
|
||||
@ -1406,7 +1406,7 @@ void WebRtcVideoChannel2::FillSenderStats(VideoMediaInfo* video_media_info,
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::FillReceiverStats(VideoMediaInfo* video_media_info,
|
||||
void WebRtcVideoChannel::FillReceiverStats(VideoMediaInfo* video_media_info,
|
||||
bool log_stats) {
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
for (std::map<uint32_t, WebRtcVideoReceiveStream*>::iterator it =
|
||||
@ -1417,7 +1417,7 @@ void WebRtcVideoChannel2::FillReceiverStats(VideoMediaInfo* video_media_info,
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::FillBitrateInfo(BandwidthEstimationInfo* bwe_info) {
|
||||
void WebRtcVideoChannel::FillBitrateInfo(BandwidthEstimationInfo* bwe_info) {
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator stream =
|
||||
send_streams_.begin();
|
||||
@ -1426,7 +1426,7 @@ void WebRtcVideoChannel2::FillBitrateInfo(BandwidthEstimationInfo* bwe_info) {
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::FillSendAndReceiveCodecStats(
|
||||
void WebRtcVideoChannel::FillSendAndReceiveCodecStats(
|
||||
VideoMediaInfo* video_media_info) {
|
||||
for (const VideoCodec& codec : send_params_.codecs) {
|
||||
webrtc::RtpCodecParameters codec_params = codec.ToCodecParameters();
|
||||
@ -1440,7 +1440,7 @@ void WebRtcVideoChannel2::FillSendAndReceiveCodecStats(
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnPacketReceived(
|
||||
void WebRtcVideoChannel::OnPacketReceived(
|
||||
rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) {
|
||||
const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp,
|
||||
@ -1501,7 +1501,7 @@ void WebRtcVideoChannel2::OnPacketReceived(
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnRtcpReceived(
|
||||
void WebRtcVideoChannel::OnRtcpReceived(
|
||||
rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) {
|
||||
const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp,
|
||||
@ -1516,26 +1516,26 @@ void WebRtcVideoChannel2::OnRtcpReceived(
|
||||
webrtc_packet_time);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnReadyToSend(bool ready) {
|
||||
void WebRtcVideoChannel::OnReadyToSend(bool ready) {
|
||||
LOG(LS_VERBOSE) << "OnReadyToSend: " << (ready ? "Ready." : "Not ready.");
|
||||
call_->SignalChannelNetworkState(
|
||||
webrtc::MediaType::VIDEO,
|
||||
ready ? webrtc::kNetworkUp : webrtc::kNetworkDown);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnNetworkRouteChanged(
|
||||
void WebRtcVideoChannel::OnNetworkRouteChanged(
|
||||
const std::string& transport_name,
|
||||
const rtc::NetworkRoute& network_route) {
|
||||
call_->OnNetworkRouteChanged(transport_name, network_route);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::OnTransportOverheadChanged(
|
||||
void WebRtcVideoChannel::OnTransportOverheadChanged(
|
||||
int transport_overhead_per_packet) {
|
||||
call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO,
|
||||
transport_overhead_per_packet);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) {
|
||||
void WebRtcVideoChannel::SetInterface(NetworkInterface* iface) {
|
||||
MediaChannel::SetInterface(iface);
|
||||
// Set the RTP recv/send buffer to a bigger size
|
||||
MediaChannel::SetOption(NetworkInterface::ST_RTP,
|
||||
@ -1551,7 +1551,7 @@ void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) {
|
||||
kVideoRtpBufferSize);
|
||||
}
|
||||
|
||||
rtc::Optional<uint32_t> WebRtcVideoChannel2::GetDefaultReceiveStreamSsrc() {
|
||||
rtc::Optional<uint32_t> WebRtcVideoChannel::GetDefaultReceiveStreamSsrc() {
|
||||
rtc::CritScope stream_lock(&stream_crit_);
|
||||
rtc::Optional<uint32_t> ssrc;
|
||||
for (auto it = receive_streams_.begin(); it != receive_streams_.end(); ++it) {
|
||||
@ -1563,21 +1563,21 @@ rtc::Optional<uint32_t> WebRtcVideoChannel2::GetDefaultReceiveStreamSsrc() {
|
||||
return ssrc;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SendRtp(const uint8_t* data,
|
||||
size_t len,
|
||||
const webrtc::PacketOptions& options) {
|
||||
bool WebRtcVideoChannel::SendRtp(const uint8_t* data,
|
||||
size_t len,
|
||||
const webrtc::PacketOptions& options) {
|
||||
rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen);
|
||||
rtc::PacketOptions rtc_options;
|
||||
rtc_options.packet_id = options.packet_id;
|
||||
return MediaChannel::SendPacket(&packet, rtc_options);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) {
|
||||
bool WebRtcVideoChannel::SendRtcp(const uint8_t* data, size_t len) {
|
||||
rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen);
|
||||
return MediaChannel::SendRtcp(&packet, rtc::PacketOptions());
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters::
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::VideoSendStreamParameters::
|
||||
VideoSendStreamParameters(
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
@ -1589,7 +1589,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters::
|
||||
conference_mode(false),
|
||||
codec_settings(codec_settings) {}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder(
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder(
|
||||
webrtc::VideoEncoder* encoder,
|
||||
const cricket::VideoCodec& codec,
|
||||
bool external)
|
||||
@ -1604,7 +1604,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder(
|
||||
}
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoSendStream::Config config,
|
||||
@ -1682,14 +1682,14 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
||||
}
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
|
||||
if (stream_ != NULL) {
|
||||
call_->DestroyVideoSendStream(stream_);
|
||||
}
|
||||
DestroyVideoEncoder(&allocated_encoder_);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend(
|
||||
bool WebRtcVideoChannel::WebRtcVideoSendStream::SetVideoSend(
|
||||
bool enable,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source) {
|
||||
@ -1731,7 +1731,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend(
|
||||
}
|
||||
|
||||
webrtc::VideoSendStream::DegradationPreference
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::GetDegradationPreference() const {
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::GetDegradationPreference() const {
|
||||
// Do not adapt resolution for screen content as this will likely
|
||||
// result in blurry and unreadable text.
|
||||
// |this| acts like a VideoSource to make sure SinkWants are handled on the
|
||||
@ -1750,12 +1750,12 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetDegradationPreference() const {
|
||||
}
|
||||
|
||||
const std::vector<uint32_t>&
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const {
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::GetSsrcs() const {
|
||||
return ssrcs_;
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::AllocatedEncoder
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::CreateVideoEncoder(
|
||||
const VideoCodec& codec,
|
||||
bool force_encoder_allocation) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
@ -1797,7 +1797,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
|
||||
return AllocatedEncoder(NULL, cricket::VideoCodec(), false);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::DestroyVideoEncoder(
|
||||
AllocatedEncoder* encoder) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (encoder->external) {
|
||||
@ -1806,7 +1806,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(
|
||||
delete encoder->encoder;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::SetCodec(
|
||||
const VideoCodecSettings& codec_settings,
|
||||
bool force_encoder_allocation) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
@ -1847,7 +1847,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
|
||||
HasNack(codec_settings.codec) ? kNackHistoryMs : 0;
|
||||
|
||||
parameters_.codec_settings =
|
||||
rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>(codec_settings);
|
||||
rtc::Optional<WebRtcVideoChannel::VideoCodecSettings>(codec_settings);
|
||||
|
||||
LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetCodec.";
|
||||
RecreateWebRtcStream();
|
||||
@ -1857,7 +1857,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::SetSendParameters(
|
||||
const ChangedSendParameters& params) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
// |recreate_stream| means construction-time parameters have changed and the
|
||||
@ -1895,7 +1895,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
|
||||
}
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters(
|
||||
bool WebRtcVideoChannel::WebRtcVideoSendStream::SetRtpParameters(
|
||||
const webrtc::RtpParameters& new_parameters) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (!ValidateRtpParameters(new_parameters)) {
|
||||
@ -1905,7 +1905,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters(
|
||||
bool reconfigure_encoder = new_parameters.encodings[0].max_bitrate_bps !=
|
||||
rtp_parameters_.encodings[0].max_bitrate_bps;
|
||||
rtp_parameters_ = new_parameters;
|
||||
// Codecs are currently handled at the WebRtcVideoChannel2 level.
|
||||
// Codecs are currently handled at the WebRtcVideoChannel level.
|
||||
rtp_parameters_.codecs.clear();
|
||||
if (reconfigure_encoder) {
|
||||
ReconfigureEncoder();
|
||||
@ -1916,12 +1916,12 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters(
|
||||
}
|
||||
|
||||
webrtc::RtpParameters
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::GetRtpParameters() const {
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::GetRtpParameters() const {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
return rtp_parameters_;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::WebRtcVideoSendStream::ValidateRtpParameters(
|
||||
bool WebRtcVideoChannel::WebRtcVideoSendStream::ValidateRtpParameters(
|
||||
const webrtc::RtpParameters& rtp_parameters) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (rtp_parameters.encodings.size() != 1) {
|
||||
@ -1936,7 +1936,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::ValidateRtpParameters(
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::UpdateSendState() {
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::UpdateSendState() {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
// TODO(deadbeef): Need to handle more than one encoding in the future.
|
||||
RTC_DCHECK(rtp_parameters_.encodings.size() == 1u);
|
||||
@ -1951,7 +1951,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::UpdateSendState() {
|
||||
}
|
||||
|
||||
webrtc::VideoEncoderConfig
|
||||
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
|
||||
WebRtcVideoChannel::WebRtcVideoSendStream::CreateVideoEncoderConfig(
|
||||
const VideoCodec& codec) const {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
webrtc::VideoEncoderConfig encoder_config;
|
||||
@ -2000,7 +2000,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
|
||||
return encoder_config;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::ReconfigureEncoder() {
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::ReconfigureEncoder() {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (!stream_) {
|
||||
// The webrtc::VideoSendStream |stream_| has not yet been created but other
|
||||
@ -2026,13 +2026,13 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::ReconfigureEncoder() {
|
||||
parameters_.encoder_config = std::move(encoder_config);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) {
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::SetSend(bool send) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
sending_ = send;
|
||||
UpdateSendState();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::RemoveSink(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::RemoveSink(
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
RTC_DCHECK(encoder_sink_ == sink);
|
||||
@ -2040,7 +2040,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RemoveSink(
|
||||
source_->RemoveSink(sink);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::AddOrUpdateSink(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::AddOrUpdateSink(
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
|
||||
const rtc::VideoSinkWants& wants) {
|
||||
if (worker_thread_ == rtc::Thread::Current()) {
|
||||
@ -2065,7 +2065,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::AddOrUpdateSink(
|
||||
}
|
||||
}
|
||||
|
||||
VideoSenderInfo WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo(
|
||||
VideoSenderInfo WebRtcVideoChannel::WebRtcVideoSendStream::GetVideoSenderInfo(
|
||||
bool log_stats) {
|
||||
VideoSenderInfo info;
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
@ -2142,7 +2142,7 @@ VideoSenderInfo WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo(
|
||||
return info;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::FillBitrateInfo(
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::FillBitrateInfo(
|
||||
BandwidthEstimationInfo* bwe_info) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (stream_ == NULL) {
|
||||
@ -2159,7 +2159,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::FillBitrateInfo(
|
||||
bwe_info->actual_enc_bitrate += stats.media_bitrate_bps;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() {
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream() {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (stream_ != NULL) {
|
||||
call_->DestroyVideoSendStream(stream_);
|
||||
@ -2192,7 +2192,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() {
|
||||
UpdateSendState();
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoReceiveStream::Config config,
|
||||
@ -2220,7 +2220,7 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream(
|
||||
RTC_DCHECK(old_decoders.empty());
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::AllocatedDecoder::
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::AllocatedDecoder::
|
||||
AllocatedDecoder(webrtc::VideoDecoder* decoder,
|
||||
webrtc::VideoCodecType type,
|
||||
bool external)
|
||||
@ -2235,7 +2235,7 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::AllocatedDecoder::
|
||||
}
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() {
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() {
|
||||
if (flexfec_stream_) {
|
||||
call_->DestroyFlexfecReceiveStream(flexfec_stream_);
|
||||
}
|
||||
@ -2244,12 +2244,12 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() {
|
||||
}
|
||||
|
||||
const std::vector<uint32_t>&
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetSsrcs() const {
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetSsrcs() const {
|
||||
return stream_params_.ssrcs;
|
||||
}
|
||||
|
||||
rtc::Optional<uint32_t>
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const {
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const {
|
||||
std::vector<uint32_t> primary_ssrcs;
|
||||
stream_params_.GetPrimarySsrcs(&primary_ssrcs);
|
||||
|
||||
@ -2261,8 +2261,8 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const {
|
||||
}
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::AllocatedDecoder
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder(
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::AllocatedDecoder
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder(
|
||||
std::vector<AllocatedDecoder>* old_decoders,
|
||||
const VideoCodec& codec) {
|
||||
webrtc::VideoCodecType type = webrtc::PayloadNameToCodecType(codec.name)
|
||||
@ -2292,7 +2292,7 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder(
|
||||
type, false /* is_external */);
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs(
|
||||
const std::vector<VideoCodecSettings>& recv_codecs,
|
||||
std::vector<AllocatedDecoder>* old_decoders) {
|
||||
*old_decoders = allocated_decoders_;
|
||||
@ -2323,12 +2323,12 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs(
|
||||
HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureFlexfecCodec(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureFlexfecCodec(
|
||||
int flexfec_payload_type) {
|
||||
flexfec_config_.payload_type = flexfec_payload_type;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::SetLocalSsrc(
|
||||
uint32_t local_ssrc) {
|
||||
// TODO(pbos): Consider turning this sanity check into a RTC_DCHECK. You
|
||||
// should not be able to create a sender with the same SSRC as a receiver, but
|
||||
@ -2349,7 +2349,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc(
|
||||
RecreateWebRtcVideoStream();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::SetFeedbackParameters(
|
||||
bool nack_enabled,
|
||||
bool remb_enabled,
|
||||
bool transport_cc_enabled,
|
||||
@ -2382,7 +2382,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters(
|
||||
RecreateWebRtcVideoStream();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::SetRecvParameters(
|
||||
const ChangedRecvParameters& params) {
|
||||
bool video_needs_recreation = false;
|
||||
bool flexfec_needs_recreation = false;
|
||||
@ -2414,7 +2414,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters(
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::
|
||||
RecreateWebRtcVideoStream() {
|
||||
if (stream_) {
|
||||
call_->DestroyVideoReceiveStream(stream_);
|
||||
@ -2426,7 +2426,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::
|
||||
stream_->Start();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::
|
||||
MaybeRecreateWebRtcFlexfecStream() {
|
||||
if (flexfec_stream_) {
|
||||
call_->DestroyFlexfecReceiveStream(flexfec_stream_);
|
||||
@ -2438,7 +2438,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::
|
||||
}
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ClearDecoders(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::ClearDecoders(
|
||||
std::vector<AllocatedDecoder>* allocated_decoders) {
|
||||
for (size_t i = 0; i < allocated_decoders->size(); ++i) {
|
||||
if ((*allocated_decoders)[i].external) {
|
||||
@ -2450,7 +2450,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ClearDecoders(
|
||||
allocated_decoders->clear();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::OnFrame(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::OnFrame(
|
||||
const webrtc::VideoFrame& frame) {
|
||||
rtc::CritScope crit(&sink_lock_);
|
||||
|
||||
@ -2472,18 +2472,18 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::OnFrame(
|
||||
sink_->OnFrame(frame);
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsDefaultStream() const {
|
||||
bool WebRtcVideoChannel::WebRtcVideoReceiveStream::IsDefaultStream() const {
|
||||
return default_stream_;
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetSink(
|
||||
void WebRtcVideoChannel::WebRtcVideoReceiveStream::SetSink(
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) {
|
||||
rtc::CritScope crit(&sink_lock_);
|
||||
sink_ = sink;
|
||||
}
|
||||
|
||||
std::string
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetCodecNameFromPayloadType(
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetCodecNameFromPayloadType(
|
||||
int payload_type) {
|
||||
for (const webrtc::VideoReceiveStream::Decoder& decoder : config_.decoders) {
|
||||
if (decoder.payload_type == payload_type) {
|
||||
@ -2494,7 +2494,7 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetCodecNameFromPayloadType(
|
||||
}
|
||||
|
||||
VideoReceiverInfo
|
||||
WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetVideoReceiverInfo(
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetVideoReceiverInfo(
|
||||
bool log_stats) {
|
||||
VideoReceiverInfo info;
|
||||
info.ssrc_groups = stream_params_.ssrc_groups;
|
||||
@ -2549,30 +2549,30 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetVideoReceiverInfo(
|
||||
return info;
|
||||
}
|
||||
|
||||
WebRtcVideoChannel2::VideoCodecSettings::VideoCodecSettings()
|
||||
WebRtcVideoChannel::VideoCodecSettings::VideoCodecSettings()
|
||||
: flexfec_payload_type(-1), rtx_payload_type(-1) {}
|
||||
|
||||
bool WebRtcVideoChannel2::VideoCodecSettings::operator==(
|
||||
const WebRtcVideoChannel2::VideoCodecSettings& other) const {
|
||||
bool WebRtcVideoChannel::VideoCodecSettings::operator==(
|
||||
const WebRtcVideoChannel::VideoCodecSettings& other) const {
|
||||
return codec == other.codec && ulpfec == other.ulpfec &&
|
||||
flexfec_payload_type == other.flexfec_payload_type &&
|
||||
rtx_payload_type == other.rtx_payload_type;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::VideoCodecSettings::EqualsDisregardingFlexfec(
|
||||
const WebRtcVideoChannel2::VideoCodecSettings& a,
|
||||
const WebRtcVideoChannel2::VideoCodecSettings& b) {
|
||||
bool WebRtcVideoChannel::VideoCodecSettings::EqualsDisregardingFlexfec(
|
||||
const WebRtcVideoChannel::VideoCodecSettings& a,
|
||||
const WebRtcVideoChannel::VideoCodecSettings& b) {
|
||||
return a.codec == b.codec && a.ulpfec == b.ulpfec &&
|
||||
a.rtx_payload_type == b.rtx_payload_type;
|
||||
}
|
||||
|
||||
bool WebRtcVideoChannel2::VideoCodecSettings::operator!=(
|
||||
const WebRtcVideoChannel2::VideoCodecSettings& other) const {
|
||||
bool WebRtcVideoChannel::VideoCodecSettings::operator!=(
|
||||
const WebRtcVideoChannel::VideoCodecSettings& other) const {
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
std::vector<WebRtcVideoChannel2::VideoCodecSettings>
|
||||
WebRtcVideoChannel2::MapCodecs(const std::vector<VideoCodec>& codecs) {
|
||||
std::vector<WebRtcVideoChannel::VideoCodecSettings>
|
||||
WebRtcVideoChannel::MapCodecs(const std::vector<VideoCodec>& codecs) {
|
||||
RTC_DCHECK(!codecs.empty());
|
||||
|
||||
std::vector<VideoCodecSettings> video_codecs;
|
||||
528
webrtc/media/engine/webrtcvideoengine.h
Normal file
528
webrtc/media/engine/webrtcvideoengine.h
Normal file
@ -0,0 +1,528 @@
|
||||
/*
|
||||
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_
|
||||
#define WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/api/call/transport.h"
|
||||
#include "webrtc/api/video/video_frame.h"
|
||||
#include "webrtc/base/asyncinvoker.h"
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/networkroute.h"
|
||||
#include "webrtc/base/optional.h"
|
||||
#include "webrtc/base/thread_annotations.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/call/call.h"
|
||||
#include "webrtc/call/flexfec_receive_stream.h"
|
||||
#include "webrtc/media/base/mediaengine.h"
|
||||
#include "webrtc/media/base/videosinkinterface.h"
|
||||
#include "webrtc/media/base/videosourceinterface.h"
|
||||
#include "webrtc/media/engine/webrtcvideodecoderfactory.h"
|
||||
#include "webrtc/media/engine/webrtcvideoencoderfactory.h"
|
||||
#include "webrtc/video_receive_stream.h"
|
||||
#include "webrtc/video_send_stream.h"
|
||||
|
||||
namespace webrtc {
|
||||
class VideoDecoder;
|
||||
class VideoEncoder;
|
||||
struct MediaConfig;
|
||||
}
|
||||
|
||||
namespace rtc {
|
||||
class Thread;
|
||||
} // namespace rtc
|
||||
|
||||
namespace cricket {
|
||||
|
||||
class VideoCapturer;
|
||||
class VideoProcessor;
|
||||
class VideoRenderer;
|
||||
class VoiceMediaChannel;
|
||||
class WebRtcDecoderObserver;
|
||||
class WebRtcEncoderObserver;
|
||||
class WebRtcLocalStreamInfo;
|
||||
class WebRtcRenderAdapter;
|
||||
class WebRtcVideoChannel;
|
||||
class WebRtcVideoChannelRecvInfo;
|
||||
class WebRtcVideoChannelSendInfo;
|
||||
class WebRtcVoiceEngine;
|
||||
class WebRtcVoiceMediaChannel;
|
||||
|
||||
struct Device;
|
||||
|
||||
class UnsignalledSsrcHandler {
|
||||
public:
|
||||
enum Action {
|
||||
kDropPacket,
|
||||
kDeliverPacket,
|
||||
};
|
||||
virtual Action OnUnsignalledSsrc(WebRtcVideoChannel* channel,
|
||||
uint32_t ssrc) = 0;
|
||||
virtual ~UnsignalledSsrcHandler() = default;
|
||||
};
|
||||
|
||||
// TODO(pbos): Remove, use external handlers only.
|
||||
class DefaultUnsignalledSsrcHandler : public UnsignalledSsrcHandler {
|
||||
public:
|
||||
DefaultUnsignalledSsrcHandler();
|
||||
Action OnUnsignalledSsrc(WebRtcVideoChannel* channel,
|
||||
uint32_t ssrc) override;
|
||||
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* GetDefaultSink() const;
|
||||
void SetDefaultSink(WebRtcVideoChannel* channel,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink);
|
||||
|
||||
virtual ~DefaultUnsignalledSsrcHandler() = default;
|
||||
|
||||
private:
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* default_sink_;
|
||||
};
|
||||
|
||||
// WebRtcVideoEngine is used for the new native WebRTC Video API (webrtc:1667).
|
||||
class WebRtcVideoEngine {
|
||||
public:
|
||||
WebRtcVideoEngine();
|
||||
virtual ~WebRtcVideoEngine();
|
||||
|
||||
// Basic video engine implementation.
|
||||
void Init();
|
||||
|
||||
WebRtcVideoChannel* CreateChannel(webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options);
|
||||
|
||||
std::vector<VideoCodec> codecs() const;
|
||||
RtpCapabilities GetCapabilities() const;
|
||||
|
||||
// Set a WebRtcVideoDecoderFactory for external decoding. Video engine does
|
||||
// not take the ownership of |decoder_factory|. The caller needs to make sure
|
||||
// that |decoder_factory| outlives the video engine.
|
||||
void SetExternalDecoderFactory(WebRtcVideoDecoderFactory* decoder_factory);
|
||||
// Set a WebRtcVideoEncoderFactory for external encoding. Video engine does
|
||||
// not take the ownership of |encoder_factory|. The caller needs to make sure
|
||||
// that |encoder_factory| outlives the video engine.
|
||||
virtual void SetExternalEncoderFactory(
|
||||
WebRtcVideoEncoderFactory* encoder_factory);
|
||||
|
||||
private:
|
||||
bool initialized_;
|
||||
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory_;
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory_;
|
||||
std::unique_ptr<WebRtcVideoEncoderFactory> simulcast_encoder_factory_;
|
||||
};
|
||||
|
||||
class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
|
||||
public:
|
||||
WebRtcVideoChannel(webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory,
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory);
|
||||
~WebRtcVideoChannel() override;
|
||||
|
||||
// VideoMediaChannel implementation
|
||||
rtc::DiffServCodePoint PreferredDscp() const override;
|
||||
|
||||
bool SetSendParameters(const VideoSendParameters& params) override;
|
||||
bool SetRecvParameters(const VideoRecvParameters& params) override;
|
||||
webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override;
|
||||
bool SetRtpSendParameters(uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) override;
|
||||
webrtc::RtpParameters GetRtpReceiveParameters(uint32_t ssrc) const override;
|
||||
bool SetRtpReceiveParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) override;
|
||||
bool GetSendCodec(VideoCodec* send_codec) override;
|
||||
bool SetSend(bool send) override;
|
||||
bool SetVideoSend(
|
||||
uint32_t ssrc,
|
||||
bool enable,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source) override;
|
||||
bool AddSendStream(const StreamParams& sp) override;
|
||||
bool RemoveSendStream(uint32_t ssrc) override;
|
||||
bool AddRecvStream(const StreamParams& sp) override;
|
||||
bool AddRecvStream(const StreamParams& sp, bool default_stream);
|
||||
bool RemoveRecvStream(uint32_t ssrc) override;
|
||||
bool SetSink(uint32_t ssrc,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override;
|
||||
void FillBitrateInfo(BandwidthEstimationInfo* bwe_info) override;
|
||||
bool GetStats(VideoMediaInfo* info) override;
|
||||
|
||||
void OnPacketReceived(rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) override;
|
||||
void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) override;
|
||||
void OnReadyToSend(bool ready) override;
|
||||
void OnNetworkRouteChanged(const std::string& transport_name,
|
||||
const rtc::NetworkRoute& network_route) override;
|
||||
void OnTransportOverheadChanged(int transport_overhead_per_packet) override;
|
||||
void SetInterface(NetworkInterface* iface) override;
|
||||
|
||||
// Implemented for VideoMediaChannelTest.
|
||||
bool sending() const { return sending_; }
|
||||
|
||||
rtc::Optional<uint32_t> GetDefaultReceiveStreamSsrc();
|
||||
|
||||
// AdaptReason is used for expressing why a WebRtcVideoSendStream request
|
||||
// a lower input frame size than the currently configured camera input frame
|
||||
// size. There can be more than one reason OR:ed together.
|
||||
enum AdaptReason {
|
||||
ADAPTREASON_NONE = 0,
|
||||
ADAPTREASON_CPU = 1,
|
||||
ADAPTREASON_BANDWIDTH = 2,
|
||||
};
|
||||
|
||||
private:
|
||||
class WebRtcVideoReceiveStream;
|
||||
struct VideoCodecSettings {
|
||||
VideoCodecSettings();
|
||||
|
||||
// Checks if all members of |*this| are equal to the corresponding members
|
||||
// of |other|.
|
||||
bool operator==(const VideoCodecSettings& other) const;
|
||||
bool operator!=(const VideoCodecSettings& other) const;
|
||||
|
||||
// Checks if all members of |a|, except |flexfec_payload_type|, are equal
|
||||
// to the corresponding members of |b|.
|
||||
static bool EqualsDisregardingFlexfec(const VideoCodecSettings& a,
|
||||
const VideoCodecSettings& b);
|
||||
|
||||
VideoCodec codec;
|
||||
webrtc::UlpfecConfig ulpfec;
|
||||
int flexfec_payload_type;
|
||||
int rtx_payload_type;
|
||||
};
|
||||
|
||||
struct ChangedSendParameters {
|
||||
// These optionals are unset if not changed.
|
||||
rtc::Optional<VideoCodecSettings> codec;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions;
|
||||
rtc::Optional<int> max_bandwidth_bps;
|
||||
rtc::Optional<bool> conference_mode;
|
||||
rtc::Optional<webrtc::RtcpMode> rtcp_mode;
|
||||
};
|
||||
|
||||
struct ChangedRecvParameters {
|
||||
// These optionals are unset if not changed.
|
||||
rtc::Optional<std::vector<VideoCodecSettings>> codec_settings;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions;
|
||||
// Keep track of the FlexFEC payload type separately from |codec_settings|.
|
||||
// This allows us to recreate the FlexfecReceiveStream separately from the
|
||||
// VideoReceiveStream when the FlexFEC payload type is changed.
|
||||
rtc::Optional<int> flexfec_payload_type;
|
||||
};
|
||||
|
||||
bool GetChangedSendParameters(const VideoSendParameters& params,
|
||||
ChangedSendParameters* changed_params) const;
|
||||
bool GetChangedRecvParameters(const VideoRecvParameters& params,
|
||||
ChangedRecvParameters* changed_params) const;
|
||||
|
||||
void SetMaxSendBandwidth(int bps);
|
||||
|
||||
void ConfigureReceiverRtp(
|
||||
webrtc::VideoReceiveStream::Config* config,
|
||||
webrtc::FlexfecReceiveStream::Config* flexfec_config,
|
||||
const StreamParams& sp) const;
|
||||
bool ValidateSendSsrcAvailability(const StreamParams& sp) const
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
bool ValidateReceiveSsrcAvailability(const StreamParams& sp) const
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
void DeleteReceiveStream(WebRtcVideoReceiveStream* stream)
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
|
||||
static std::string CodecSettingsVectorToString(
|
||||
const std::vector<VideoCodecSettings>& codecs);
|
||||
|
||||
// Wrapper for the sender part.
|
||||
class WebRtcVideoSendStream
|
||||
: public rtc::VideoSourceInterface<webrtc::VideoFrame> {
|
||||
public:
|
||||
WebRtcVideoSendStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory,
|
||||
bool enable_cpu_overuse_detection,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings,
|
||||
const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions,
|
||||
const VideoSendParameters& send_params);
|
||||
virtual ~WebRtcVideoSendStream();
|
||||
|
||||
void SetSendParameters(const ChangedSendParameters& send_params);
|
||||
bool SetRtpParameters(const webrtc::RtpParameters& parameters);
|
||||
webrtc::RtpParameters GetRtpParameters() const;
|
||||
|
||||
// Implements rtc::VideoSourceInterface<webrtc::VideoFrame>.
|
||||
// WebRtcVideoSendStream acts as a source to the webrtc::VideoSendStream
|
||||
// in |stream_|. This is done to proxy VideoSinkWants from the encoder to
|
||||
// the worker thread.
|
||||
void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
|
||||
const rtc::VideoSinkWants& wants) override;
|
||||
void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override;
|
||||
|
||||
bool SetVideoSend(bool mute,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source);
|
||||
|
||||
void SetSend(bool send);
|
||||
|
||||
const std::vector<uint32_t>& GetSsrcs() const;
|
||||
VideoSenderInfo GetVideoSenderInfo(bool log_stats);
|
||||
void FillBitrateInfo(BandwidthEstimationInfo* bwe_info);
|
||||
|
||||
private:
|
||||
// Parameters needed to reconstruct the underlying stream.
|
||||
// webrtc::VideoSendStream doesn't support setting a lot of options on the
|
||||
// fly, so when those need to be changed we tear down and reconstruct with
|
||||
// similar parameters depending on which options changed etc.
|
||||
struct VideoSendStreamParameters {
|
||||
VideoSendStreamParameters(
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings);
|
||||
webrtc::VideoSendStream::Config config;
|
||||
VideoOptions options;
|
||||
int max_bitrate_bps;
|
||||
bool conference_mode;
|
||||
rtc::Optional<VideoCodecSettings> codec_settings;
|
||||
// Sent resolutions + bitrates etc. by the underlying VideoSendStream,
|
||||
// typically changes when setting a new resolution or reconfiguring
|
||||
// bitrates.
|
||||
webrtc::VideoEncoderConfig encoder_config;
|
||||
};
|
||||
|
||||
struct AllocatedEncoder {
|
||||
AllocatedEncoder(webrtc::VideoEncoder* encoder,
|
||||
const cricket::VideoCodec& codec,
|
||||
bool external);
|
||||
webrtc::VideoEncoder* encoder;
|
||||
webrtc::VideoEncoder* external_encoder;
|
||||
cricket::VideoCodec codec;
|
||||
bool external;
|
||||
};
|
||||
|
||||
rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
|
||||
ConfigureVideoEncoderSettings(const VideoCodec& codec);
|
||||
// If force_encoder_allocation is true, a new AllocatedEncoder is always
|
||||
// created. If false, the allocated encoder may be reused, if the type
|
||||
// matches.
|
||||
AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec,
|
||||
bool force_encoder_allocation);
|
||||
void DestroyVideoEncoder(AllocatedEncoder* encoder);
|
||||
void SetCodec(const VideoCodecSettings& codec,
|
||||
bool force_encoder_allocation);
|
||||
void RecreateWebRtcStream();
|
||||
webrtc::VideoEncoderConfig CreateVideoEncoderConfig(
|
||||
const VideoCodec& codec) const;
|
||||
void ReconfigureEncoder();
|
||||
bool ValidateRtpParameters(const webrtc::RtpParameters& parameters);
|
||||
|
||||
// Calls Start or Stop according to whether or not |sending_| is true,
|
||||
// and whether or not the encoding in |rtp_parameters_| is active.
|
||||
void UpdateSendState();
|
||||
|
||||
webrtc::VideoSendStream::DegradationPreference GetDegradationPreference()
|
||||
const EXCLUSIVE_LOCKS_REQUIRED(&thread_checker_);
|
||||
|
||||
rtc::ThreadChecker thread_checker_;
|
||||
rtc::AsyncInvoker invoker_;
|
||||
rtc::Thread* worker_thread_;
|
||||
const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
|
||||
const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
|
||||
webrtc::Call* const call_;
|
||||
const bool enable_cpu_overuse_detection_;
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
WebRtcVideoEncoderFactory* const external_encoder_factory_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
|
||||
webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
// Contains settings that are the same for all streams in the MediaChannel,
|
||||
// such as codecs, header extensions, and the global bitrate limit for the
|
||||
// entire channel.
|
||||
VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_);
|
||||
// Contains settings that are unique for each stream, such as max_bitrate.
|
||||
// Does *not* contain codecs, however.
|
||||
// TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_.
|
||||
// TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only
|
||||
// one stream per MediaChannel.
|
||||
webrtc::RtpParameters rtp_parameters_ ACCESS_ON(&thread_checker_);
|
||||
AllocatedEncoder allocated_encoder_ ACCESS_ON(&thread_checker_);
|
||||
|
||||
bool sending_ ACCESS_ON(&thread_checker_);
|
||||
};
|
||||
|
||||
// Wrapper for the receiver part, contains configs etc. that are needed to
|
||||
// reconstruct the underlying VideoReceiveStream.
|
||||
class WebRtcVideoReceiveStream
|
||||
: public rtc::VideoSinkInterface<webrtc::VideoFrame> {
|
||||
public:
|
||||
WebRtcVideoReceiveStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoReceiveStream::Config config,
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory,
|
||||
bool default_stream,
|
||||
const std::vector<VideoCodecSettings>& recv_codecs,
|
||||
const webrtc::FlexfecReceiveStream::Config& flexfec_config);
|
||||
~WebRtcVideoReceiveStream();
|
||||
|
||||
const std::vector<uint32_t>& GetSsrcs() const;
|
||||
rtc::Optional<uint32_t> GetFirstPrimarySsrc() const;
|
||||
|
||||
void SetLocalSsrc(uint32_t local_ssrc);
|
||||
// TODO(deadbeef): Move these feedback parameters into the recv parameters.
|
||||
void SetFeedbackParameters(bool nack_enabled,
|
||||
bool remb_enabled,
|
||||
bool transport_cc_enabled,
|
||||
webrtc::RtcpMode rtcp_mode);
|
||||
void SetRecvParameters(const ChangedRecvParameters& recv_params);
|
||||
|
||||
void OnFrame(const webrtc::VideoFrame& frame) override;
|
||||
bool IsDefaultStream() const;
|
||||
|
||||
void SetSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink);
|
||||
|
||||
VideoReceiverInfo GetVideoReceiverInfo(bool log_stats);
|
||||
|
||||
private:
|
||||
struct AllocatedDecoder {
|
||||
AllocatedDecoder(webrtc::VideoDecoder* decoder,
|
||||
webrtc::VideoCodecType type,
|
||||
bool external);
|
||||
webrtc::VideoDecoder* decoder;
|
||||
// Decoder wrapped into a fallback decoder to permit software fallback.
|
||||
webrtc::VideoDecoder* external_decoder;
|
||||
webrtc::VideoCodecType type;
|
||||
bool external;
|
||||
};
|
||||
|
||||
void RecreateWebRtcVideoStream();
|
||||
void MaybeRecreateWebRtcFlexfecStream();
|
||||
|
||||
void ConfigureCodecs(const std::vector<VideoCodecSettings>& recv_codecs,
|
||||
std::vector<AllocatedDecoder>* old_codecs);
|
||||
void ConfigureFlexfecCodec(int flexfec_payload_type);
|
||||
AllocatedDecoder CreateOrReuseVideoDecoder(
|
||||
std::vector<AllocatedDecoder>* old_decoder,
|
||||
const VideoCodec& codec);
|
||||
void ClearDecoders(std::vector<AllocatedDecoder>* allocated_decoders);
|
||||
|
||||
std::string GetCodecNameFromPayloadType(int payload_type);
|
||||
|
||||
webrtc::Call* const call_;
|
||||
StreamParams stream_params_;
|
||||
|
||||
// Both |stream_| and |flexfec_stream_| are managed by |this|. They are
|
||||
// destroyed by calling call_->DestroyVideoReceiveStream and
|
||||
// call_->DestroyFlexfecReceiveStream, respectively.
|
||||
webrtc::VideoReceiveStream* stream_;
|
||||
const bool default_stream_;
|
||||
webrtc::VideoReceiveStream::Config config_;
|
||||
webrtc::FlexfecReceiveStream::Config flexfec_config_;
|
||||
webrtc::FlexfecReceiveStream* flexfec_stream_;
|
||||
|
||||
WebRtcVideoDecoderFactory* const external_decoder_factory_;
|
||||
std::vector<AllocatedDecoder> allocated_decoders_;
|
||||
|
||||
rtc::CriticalSection sink_lock_;
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
|
||||
// Expands remote RTP timestamps to int64_t to be able to estimate how long
|
||||
// the stream has been running.
|
||||
rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_
|
||||
GUARDED_BY(sink_lock_);
|
||||
int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_);
|
||||
// Start NTP time is estimated as current remote NTP time (estimated from
|
||||
// RTCP) minus the elapsed time, as soon as remote NTP time is available.
|
||||
int64_t estimated_remote_start_ntp_time_ms_ GUARDED_BY(sink_lock_);
|
||||
};
|
||||
|
||||
void Construct(webrtc::Call* call, WebRtcVideoEngine* engine);
|
||||
|
||||
bool SendRtp(const uint8_t* data,
|
||||
size_t len,
|
||||
const webrtc::PacketOptions& options) override;
|
||||
bool SendRtcp(const uint8_t* data, size_t len) override;
|
||||
|
||||
static std::vector<VideoCodecSettings> MapCodecs(
|
||||
const std::vector<VideoCodec>& codecs);
|
||||
// Select what video codec will be used for sending, i.e. what codec is used
|
||||
// for local encoding, based on supported remote codecs. The first remote
|
||||
// codec that is supported locally will be selected.
|
||||
rtc::Optional<VideoCodecSettings> SelectSendVideoCodec(
|
||||
const std::vector<VideoCodecSettings>& remote_mapped_codecs) const;
|
||||
|
||||
static bool NonFlexfecReceiveCodecsHaveChanged(
|
||||
std::vector<VideoCodecSettings> before,
|
||||
std::vector<VideoCodecSettings> after);
|
||||
|
||||
void FillSenderStats(VideoMediaInfo* info, bool log_stats);
|
||||
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_;
|
||||
|
||||
uint32_t rtcp_receiver_report_ssrc_;
|
||||
bool sending_;
|
||||
webrtc::Call* const call_;
|
||||
|
||||
DefaultUnsignalledSsrcHandler default_unsignalled_ssrc_handler_;
|
||||
UnsignalledSsrcHandler* const unsignalled_ssrc_handler_;
|
||||
|
||||
const MediaConfig::Video video_config_;
|
||||
|
||||
rtc::CriticalSection stream_crit_;
|
||||
// Using primary-ssrc (first ssrc) as key.
|
||||
std::map<uint32_t, WebRtcVideoSendStream*> send_streams_
|
||||
GUARDED_BY(stream_crit_);
|
||||
std::map<uint32_t, WebRtcVideoReceiveStream*> receive_streams_
|
||||
GUARDED_BY(stream_crit_);
|
||||
std::set<uint32_t> send_ssrcs_ GUARDED_BY(stream_crit_);
|
||||
std::set<uint32_t> receive_ssrcs_ GUARDED_BY(stream_crit_);
|
||||
|
||||
rtc::Optional<VideoCodecSettings> send_codec_;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> send_rtp_extensions_;
|
||||
|
||||
WebRtcVideoEncoderFactory* const external_encoder_factory_;
|
||||
WebRtcVideoDecoderFactory* const external_decoder_factory_;
|
||||
std::vector<VideoCodecSettings> recv_codecs_;
|
||||
std::vector<webrtc::RtpExtension> recv_rtp_extensions_;
|
||||
// See reason for keeping track of the FlexFEC payload type separately in
|
||||
// comment in WebRtcVideoChannel::ChangedRecvParameters.
|
||||
int recv_flexfec_payload_type_;
|
||||
webrtc::Call::Config::BitrateConfig bitrate_config_;
|
||||
// TODO(deadbeef): Don't duplicate information between
|
||||
// send_params/recv_params, rtp_extensions, options, etc.
|
||||
VideoSendParameters send_params_;
|
||||
VideoOptions default_send_options_;
|
||||
VideoRecvParameters recv_params_;
|
||||
int64_t last_stats_log_ms_;
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE_H_
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
|
||||
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
@ -11,518 +11,8 @@
|
||||
#ifndef WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
|
||||
#define WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/api/call/transport.h"
|
||||
#include "webrtc/api/video/video_frame.h"
|
||||
#include "webrtc/base/asyncinvoker.h"
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/networkroute.h"
|
||||
#include "webrtc/base/optional.h"
|
||||
#include "webrtc/base/thread_annotations.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/call/call.h"
|
||||
#include "webrtc/call/flexfec_receive_stream.h"
|
||||
#include "webrtc/media/base/mediaengine.h"
|
||||
#include "webrtc/media/base/videosinkinterface.h"
|
||||
#include "webrtc/media/base/videosourceinterface.h"
|
||||
#include "webrtc/media/engine/webrtcvideodecoderfactory.h"
|
||||
#include "webrtc/media/engine/webrtcvideoencoderfactory.h"
|
||||
#include "webrtc/video_receive_stream.h"
|
||||
#include "webrtc/video_send_stream.h"
|
||||
|
||||
namespace webrtc {
|
||||
class VideoDecoder;
|
||||
class VideoEncoder;
|
||||
struct MediaConfig;
|
||||
}
|
||||
|
||||
namespace rtc {
|
||||
class Thread;
|
||||
} // namespace rtc
|
||||
|
||||
namespace cricket {
|
||||
|
||||
class VideoCapturer;
|
||||
class VideoProcessor;
|
||||
class VideoRenderer;
|
||||
class VoiceMediaChannel;
|
||||
class WebRtcDecoderObserver;
|
||||
class WebRtcEncoderObserver;
|
||||
class WebRtcLocalStreamInfo;
|
||||
class WebRtcRenderAdapter;
|
||||
class WebRtcVideoChannel2;
|
||||
class WebRtcVideoChannelRecvInfo;
|
||||
class WebRtcVideoChannelSendInfo;
|
||||
class WebRtcVoiceEngine;
|
||||
class WebRtcVoiceMediaChannel;
|
||||
|
||||
struct Device;
|
||||
|
||||
class UnsignalledSsrcHandler {
|
||||
public:
|
||||
enum Action {
|
||||
kDropPacket,
|
||||
kDeliverPacket,
|
||||
};
|
||||
virtual Action OnUnsignalledSsrc(WebRtcVideoChannel2* channel,
|
||||
uint32_t ssrc) = 0;
|
||||
virtual ~UnsignalledSsrcHandler() = default;
|
||||
};
|
||||
|
||||
// TODO(pbos): Remove, use external handlers only.
|
||||
class DefaultUnsignalledSsrcHandler : public UnsignalledSsrcHandler {
|
||||
public:
|
||||
DefaultUnsignalledSsrcHandler();
|
||||
Action OnUnsignalledSsrc(WebRtcVideoChannel2* channel,
|
||||
uint32_t ssrc) override;
|
||||
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* GetDefaultSink() const;
|
||||
void SetDefaultSink(WebRtcVideoChannel2* channel,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink);
|
||||
|
||||
virtual ~DefaultUnsignalledSsrcHandler() = default;
|
||||
|
||||
private:
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* default_sink_;
|
||||
};
|
||||
|
||||
// WebRtcVideoEngine2 is used for the new native WebRTC Video API (webrtc:1667).
|
||||
class WebRtcVideoEngine2 {
|
||||
public:
|
||||
WebRtcVideoEngine2();
|
||||
virtual ~WebRtcVideoEngine2();
|
||||
|
||||
// Basic video engine implementation.
|
||||
void Init();
|
||||
|
||||
WebRtcVideoChannel2* CreateChannel(webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options);
|
||||
|
||||
std::vector<VideoCodec> codecs() const;
|
||||
RtpCapabilities GetCapabilities() const;
|
||||
|
||||
// Set a WebRtcVideoDecoderFactory for external decoding. Video engine does
|
||||
// not take the ownership of |decoder_factory|. The caller needs to make sure
|
||||
// that |decoder_factory| outlives the video engine.
|
||||
void SetExternalDecoderFactory(WebRtcVideoDecoderFactory* decoder_factory);
|
||||
// Set a WebRtcVideoEncoderFactory for external encoding. Video engine does
|
||||
// not take the ownership of |encoder_factory|. The caller needs to make sure
|
||||
// that |encoder_factory| outlives the video engine.
|
||||
virtual void SetExternalEncoderFactory(
|
||||
WebRtcVideoEncoderFactory* encoder_factory);
|
||||
|
||||
private:
|
||||
bool initialized_;
|
||||
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory_;
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory_;
|
||||
std::unique_ptr<WebRtcVideoEncoderFactory> simulcast_encoder_factory_;
|
||||
};
|
||||
|
||||
class WebRtcVideoChannel2 : public VideoMediaChannel, public webrtc::Transport {
|
||||
public:
|
||||
WebRtcVideoChannel2(webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory,
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory);
|
||||
~WebRtcVideoChannel2() override;
|
||||
|
||||
// VideoMediaChannel implementation
|
||||
rtc::DiffServCodePoint PreferredDscp() const override;
|
||||
|
||||
bool SetSendParameters(const VideoSendParameters& params) override;
|
||||
bool SetRecvParameters(const VideoRecvParameters& params) override;
|
||||
webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override;
|
||||
bool SetRtpSendParameters(uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) override;
|
||||
webrtc::RtpParameters GetRtpReceiveParameters(uint32_t ssrc) const override;
|
||||
bool SetRtpReceiveParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters) override;
|
||||
bool GetSendCodec(VideoCodec* send_codec) override;
|
||||
bool SetSend(bool send) override;
|
||||
bool SetVideoSend(
|
||||
uint32_t ssrc,
|
||||
bool enable,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source) override;
|
||||
bool AddSendStream(const StreamParams& sp) override;
|
||||
bool RemoveSendStream(uint32_t ssrc) override;
|
||||
bool AddRecvStream(const StreamParams& sp) override;
|
||||
bool AddRecvStream(const StreamParams& sp, bool default_stream);
|
||||
bool RemoveRecvStream(uint32_t ssrc) override;
|
||||
bool SetSink(uint32_t ssrc,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override;
|
||||
void FillBitrateInfo(BandwidthEstimationInfo* bwe_info) override;
|
||||
bool GetStats(VideoMediaInfo* info) override;
|
||||
|
||||
void OnPacketReceived(rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) override;
|
||||
void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet,
|
||||
const rtc::PacketTime& packet_time) override;
|
||||
void OnReadyToSend(bool ready) override;
|
||||
void OnNetworkRouteChanged(const std::string& transport_name,
|
||||
const rtc::NetworkRoute& network_route) override;
|
||||
void OnTransportOverheadChanged(int transport_overhead_per_packet) override;
|
||||
void SetInterface(NetworkInterface* iface) override;
|
||||
|
||||
// Implemented for VideoMediaChannelTest.
|
||||
bool sending() const { return sending_; }
|
||||
|
||||
rtc::Optional<uint32_t> GetDefaultReceiveStreamSsrc();
|
||||
|
||||
// AdaptReason is used for expressing why a WebRtcVideoSendStream request
|
||||
// a lower input frame size than the currently configured camera input frame
|
||||
// size. There can be more than one reason OR:ed together.
|
||||
enum AdaptReason {
|
||||
ADAPTREASON_NONE = 0,
|
||||
ADAPTREASON_CPU = 1,
|
||||
ADAPTREASON_BANDWIDTH = 2,
|
||||
};
|
||||
|
||||
private:
|
||||
class WebRtcVideoReceiveStream;
|
||||
struct VideoCodecSettings {
|
||||
VideoCodecSettings();
|
||||
|
||||
// Checks if all members of |*this| are equal to the corresponding members
|
||||
// of |other|.
|
||||
bool operator==(const VideoCodecSettings& other) const;
|
||||
bool operator!=(const VideoCodecSettings& other) const;
|
||||
|
||||
// Checks if all members of |a|, except |flexfec_payload_type|, are equal
|
||||
// to the corresponding members of |b|.
|
||||
static bool EqualsDisregardingFlexfec(const VideoCodecSettings& a,
|
||||
const VideoCodecSettings& b);
|
||||
|
||||
VideoCodec codec;
|
||||
webrtc::UlpfecConfig ulpfec;
|
||||
int flexfec_payload_type;
|
||||
int rtx_payload_type;
|
||||
};
|
||||
|
||||
struct ChangedSendParameters {
|
||||
// These optionals are unset if not changed.
|
||||
rtc::Optional<VideoCodecSettings> codec;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions;
|
||||
rtc::Optional<int> max_bandwidth_bps;
|
||||
rtc::Optional<bool> conference_mode;
|
||||
rtc::Optional<webrtc::RtcpMode> rtcp_mode;
|
||||
};
|
||||
|
||||
struct ChangedRecvParameters {
|
||||
// These optionals are unset if not changed.
|
||||
rtc::Optional<std::vector<VideoCodecSettings>> codec_settings;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> rtp_header_extensions;
|
||||
// Keep track of the FlexFEC payload type separately from |codec_settings|.
|
||||
// This allows us to recreate the FlexfecReceiveStream separately from the
|
||||
// VideoReceiveStream when the FlexFEC payload type is changed.
|
||||
rtc::Optional<int> flexfec_payload_type;
|
||||
};
|
||||
|
||||
bool GetChangedSendParameters(const VideoSendParameters& params,
|
||||
ChangedSendParameters* changed_params) const;
|
||||
bool GetChangedRecvParameters(const VideoRecvParameters& params,
|
||||
ChangedRecvParameters* changed_params) const;
|
||||
|
||||
void SetMaxSendBandwidth(int bps);
|
||||
|
||||
void ConfigureReceiverRtp(
|
||||
webrtc::VideoReceiveStream::Config* config,
|
||||
webrtc::FlexfecReceiveStream::Config* flexfec_config,
|
||||
const StreamParams& sp) const;
|
||||
bool ValidateSendSsrcAvailability(const StreamParams& sp) const
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
bool ValidateReceiveSsrcAvailability(const StreamParams& sp) const
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
void DeleteReceiveStream(WebRtcVideoReceiveStream* stream)
|
||||
EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
|
||||
|
||||
static std::string CodecSettingsVectorToString(
|
||||
const std::vector<VideoCodecSettings>& codecs);
|
||||
|
||||
// Wrapper for the sender part.
|
||||
class WebRtcVideoSendStream
|
||||
: public rtc::VideoSourceInterface<webrtc::VideoFrame> {
|
||||
public:
|
||||
WebRtcVideoSendStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
WebRtcVideoEncoderFactory* external_encoder_factory,
|
||||
bool enable_cpu_overuse_detection,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings,
|
||||
const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions,
|
||||
const VideoSendParameters& send_params);
|
||||
virtual ~WebRtcVideoSendStream();
|
||||
|
||||
void SetSendParameters(const ChangedSendParameters& send_params);
|
||||
bool SetRtpParameters(const webrtc::RtpParameters& parameters);
|
||||
webrtc::RtpParameters GetRtpParameters() const;
|
||||
|
||||
// Implements rtc::VideoSourceInterface<webrtc::VideoFrame>.
|
||||
// WebRtcVideoSendStream acts as a source to the webrtc::VideoSendStream
|
||||
// in |stream_|. This is done to proxy VideoSinkWants from the encoder to
|
||||
// the worker thread.
|
||||
void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
|
||||
const rtc::VideoSinkWants& wants) override;
|
||||
void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override;
|
||||
|
||||
bool SetVideoSend(bool mute,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source);
|
||||
|
||||
void SetSend(bool send);
|
||||
|
||||
const std::vector<uint32_t>& GetSsrcs() const;
|
||||
VideoSenderInfo GetVideoSenderInfo(bool log_stats);
|
||||
void FillBitrateInfo(BandwidthEstimationInfo* bwe_info);
|
||||
|
||||
private:
|
||||
// Parameters needed to reconstruct the underlying stream.
|
||||
// webrtc::VideoSendStream doesn't support setting a lot of options on the
|
||||
// fly, so when those need to be changed we tear down and reconstruct with
|
||||
// similar parameters depending on which options changed etc.
|
||||
struct VideoSendStreamParameters {
|
||||
VideoSendStreamParameters(
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings);
|
||||
webrtc::VideoSendStream::Config config;
|
||||
VideoOptions options;
|
||||
int max_bitrate_bps;
|
||||
bool conference_mode;
|
||||
rtc::Optional<VideoCodecSettings> codec_settings;
|
||||
// Sent resolutions + bitrates etc. by the underlying VideoSendStream,
|
||||
// typically changes when setting a new resolution or reconfiguring
|
||||
// bitrates.
|
||||
webrtc::VideoEncoderConfig encoder_config;
|
||||
};
|
||||
|
||||
struct AllocatedEncoder {
|
||||
AllocatedEncoder(webrtc::VideoEncoder* encoder,
|
||||
const cricket::VideoCodec& codec,
|
||||
bool external);
|
||||
webrtc::VideoEncoder* encoder;
|
||||
webrtc::VideoEncoder* external_encoder;
|
||||
cricket::VideoCodec codec;
|
||||
bool external;
|
||||
};
|
||||
|
||||
rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
|
||||
ConfigureVideoEncoderSettings(const VideoCodec& codec);
|
||||
// If force_encoder_allocation is true, a new AllocatedEncoder is always
|
||||
// created. If false, the allocated encoder may be reused, if the type
|
||||
// matches.
|
||||
AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec,
|
||||
bool force_encoder_allocation);
|
||||
void DestroyVideoEncoder(AllocatedEncoder* encoder);
|
||||
void SetCodec(const VideoCodecSettings& codec,
|
||||
bool force_encoder_allocation);
|
||||
void RecreateWebRtcStream();
|
||||
webrtc::VideoEncoderConfig CreateVideoEncoderConfig(
|
||||
const VideoCodec& codec) const;
|
||||
void ReconfigureEncoder();
|
||||
bool ValidateRtpParameters(const webrtc::RtpParameters& parameters);
|
||||
|
||||
// Calls Start or Stop according to whether or not |sending_| is true,
|
||||
// and whether or not the encoding in |rtp_parameters_| is active.
|
||||
void UpdateSendState();
|
||||
|
||||
webrtc::VideoSendStream::DegradationPreference GetDegradationPreference()
|
||||
const EXCLUSIVE_LOCKS_REQUIRED(&thread_checker_);
|
||||
|
||||
rtc::ThreadChecker thread_checker_;
|
||||
rtc::AsyncInvoker invoker_;
|
||||
rtc::Thread* worker_thread_;
|
||||
const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
|
||||
const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
|
||||
webrtc::Call* const call_;
|
||||
const bool enable_cpu_overuse_detection_;
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
WebRtcVideoEncoderFactory* const external_encoder_factory_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
|
||||
webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
|
||||
ACCESS_ON(&thread_checker_);
|
||||
// Contains settings that are the same for all streams in the MediaChannel,
|
||||
// such as codecs, header extensions, and the global bitrate limit for the
|
||||
// entire channel.
|
||||
VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_);
|
||||
// Contains settings that are unique for each stream, such as max_bitrate.
|
||||
// Does *not* contain codecs, however.
|
||||
// TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_.
|
||||
// TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only
|
||||
// one stream per MediaChannel.
|
||||
webrtc::RtpParameters rtp_parameters_ ACCESS_ON(&thread_checker_);
|
||||
AllocatedEncoder allocated_encoder_ ACCESS_ON(&thread_checker_);
|
||||
|
||||
bool sending_ ACCESS_ON(&thread_checker_);
|
||||
};
|
||||
|
||||
// Wrapper for the receiver part, contains configs etc. that are needed to
|
||||
// reconstruct the underlying VideoReceiveStream.
|
||||
class WebRtcVideoReceiveStream
|
||||
: public rtc::VideoSinkInterface<webrtc::VideoFrame> {
|
||||
public:
|
||||
WebRtcVideoReceiveStream(
|
||||
webrtc::Call* call,
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoReceiveStream::Config config,
|
||||
WebRtcVideoDecoderFactory* external_decoder_factory,
|
||||
bool default_stream,
|
||||
const std::vector<VideoCodecSettings>& recv_codecs,
|
||||
const webrtc::FlexfecReceiveStream::Config& flexfec_config);
|
||||
~WebRtcVideoReceiveStream();
|
||||
|
||||
const std::vector<uint32_t>& GetSsrcs() const;
|
||||
rtc::Optional<uint32_t> GetFirstPrimarySsrc() const;
|
||||
|
||||
void SetLocalSsrc(uint32_t local_ssrc);
|
||||
// TODO(deadbeef): Move these feedback parameters into the recv parameters.
|
||||
void SetFeedbackParameters(bool nack_enabled,
|
||||
bool remb_enabled,
|
||||
bool transport_cc_enabled,
|
||||
webrtc::RtcpMode rtcp_mode);
|
||||
void SetRecvParameters(const ChangedRecvParameters& recv_params);
|
||||
|
||||
void OnFrame(const webrtc::VideoFrame& frame) override;
|
||||
bool IsDefaultStream() const;
|
||||
|
||||
void SetSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink);
|
||||
|
||||
VideoReceiverInfo GetVideoReceiverInfo(bool log_stats);
|
||||
|
||||
private:
|
||||
struct AllocatedDecoder {
|
||||
AllocatedDecoder(webrtc::VideoDecoder* decoder,
|
||||
webrtc::VideoCodecType type,
|
||||
bool external);
|
||||
webrtc::VideoDecoder* decoder;
|
||||
// Decoder wrapped into a fallback decoder to permit software fallback.
|
||||
webrtc::VideoDecoder* external_decoder;
|
||||
webrtc::VideoCodecType type;
|
||||
bool external;
|
||||
};
|
||||
|
||||
void RecreateWebRtcVideoStream();
|
||||
void MaybeRecreateWebRtcFlexfecStream();
|
||||
|
||||
void ConfigureCodecs(const std::vector<VideoCodecSettings>& recv_codecs,
|
||||
std::vector<AllocatedDecoder>* old_codecs);
|
||||
void ConfigureFlexfecCodec(int flexfec_payload_type);
|
||||
AllocatedDecoder CreateOrReuseVideoDecoder(
|
||||
std::vector<AllocatedDecoder>* old_decoder,
|
||||
const VideoCodec& codec);
|
||||
void ClearDecoders(std::vector<AllocatedDecoder>* allocated_decoders);
|
||||
|
||||
std::string GetCodecNameFromPayloadType(int payload_type);
|
||||
|
||||
webrtc::Call* const call_;
|
||||
StreamParams stream_params_;
|
||||
|
||||
// Both |stream_| and |flexfec_stream_| are managed by |this|. They are
|
||||
// destroyed by calling call_->DestroyVideoReceiveStream and
|
||||
// call_->DestroyFlexfecReceiveStream, respectively.
|
||||
webrtc::VideoReceiveStream* stream_;
|
||||
const bool default_stream_;
|
||||
webrtc::VideoReceiveStream::Config config_;
|
||||
webrtc::FlexfecReceiveStream::Config flexfec_config_;
|
||||
webrtc::FlexfecReceiveStream* flexfec_stream_;
|
||||
|
||||
WebRtcVideoDecoderFactory* const external_decoder_factory_;
|
||||
std::vector<AllocatedDecoder> allocated_decoders_;
|
||||
|
||||
rtc::CriticalSection sink_lock_;
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
|
||||
// Expands remote RTP timestamps to int64_t to be able to estimate how long
|
||||
// the stream has been running.
|
||||
rtc::TimestampWrapAroundHandler timestamp_wraparound_handler_
|
||||
GUARDED_BY(sink_lock_);
|
||||
int64_t first_frame_timestamp_ GUARDED_BY(sink_lock_);
|
||||
// Start NTP time is estimated as current remote NTP time (estimated from
|
||||
// RTCP) minus the elapsed time, as soon as remote NTP time is available.
|
||||
int64_t estimated_remote_start_ntp_time_ms_ GUARDED_BY(sink_lock_);
|
||||
};
|
||||
|
||||
void Construct(webrtc::Call* call, WebRtcVideoEngine2* engine);
|
||||
|
||||
bool SendRtp(const uint8_t* data,
|
||||
size_t len,
|
||||
const webrtc::PacketOptions& options) override;
|
||||
bool SendRtcp(const uint8_t* data, size_t len) override;
|
||||
|
||||
static std::vector<VideoCodecSettings> MapCodecs(
|
||||
const std::vector<VideoCodec>& codecs);
|
||||
// Select what video codec will be used for sending, i.e. what codec is used
|
||||
// for local encoding, based on supported remote codecs. The first remote
|
||||
// codec that is supported locally will be selected.
|
||||
rtc::Optional<VideoCodecSettings> SelectSendVideoCodec(
|
||||
const std::vector<VideoCodecSettings>& remote_mapped_codecs) const;
|
||||
|
||||
static bool NonFlexfecReceiveCodecsHaveChanged(
|
||||
std::vector<VideoCodecSettings> before,
|
||||
std::vector<VideoCodecSettings> after);
|
||||
|
||||
void FillSenderStats(VideoMediaInfo* info, bool log_stats);
|
||||
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_;
|
||||
|
||||
uint32_t rtcp_receiver_report_ssrc_;
|
||||
bool sending_;
|
||||
webrtc::Call* const call_;
|
||||
|
||||
DefaultUnsignalledSsrcHandler default_unsignalled_ssrc_handler_;
|
||||
UnsignalledSsrcHandler* const unsignalled_ssrc_handler_;
|
||||
|
||||
const MediaConfig::Video video_config_;
|
||||
|
||||
rtc::CriticalSection stream_crit_;
|
||||
// Using primary-ssrc (first ssrc) as key.
|
||||
std::map<uint32_t, WebRtcVideoSendStream*> send_streams_
|
||||
GUARDED_BY(stream_crit_);
|
||||
std::map<uint32_t, WebRtcVideoReceiveStream*> receive_streams_
|
||||
GUARDED_BY(stream_crit_);
|
||||
std::set<uint32_t> send_ssrcs_ GUARDED_BY(stream_crit_);
|
||||
std::set<uint32_t> receive_ssrcs_ GUARDED_BY(stream_crit_);
|
||||
|
||||
rtc::Optional<VideoCodecSettings> send_codec_;
|
||||
rtc::Optional<std::vector<webrtc::RtpExtension>> send_rtp_extensions_;
|
||||
|
||||
WebRtcVideoEncoderFactory* const external_encoder_factory_;
|
||||
WebRtcVideoDecoderFactory* const external_decoder_factory_;
|
||||
std::vector<VideoCodecSettings> recv_codecs_;
|
||||
std::vector<webrtc::RtpExtension> recv_rtp_extensions_;
|
||||
// See reason for keeping track of the FlexFEC payload type separately in
|
||||
// comment in WebRtcVideoChannel2::ChangedRecvParameters.
|
||||
int recv_flexfec_payload_type_;
|
||||
webrtc::Call::Config::BitrateConfig bitrate_config_;
|
||||
// TODO(deadbeef): Don't duplicate information between
|
||||
// send_params/recv_params, rtp_extensions, options, etc.
|
||||
VideoSendParameters send_params_;
|
||||
VideoOptions default_send_options_;
|
||||
VideoRecvParameters recv_params_;
|
||||
int64_t last_stats_log_ms_;
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
// TODO(eladalon): Remove this legacy.
|
||||
#include "webrtc/media/engine/webrtcvideoengine.h"
|
||||
|
||||
#endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -35,7 +35,7 @@ class RtpReceiverInternal : public RtpReceiverInterface {
|
||||
public:
|
||||
virtual void Stop() = 0;
|
||||
// This SSRC is used as an identifier for the receiver between the API layer
|
||||
// and the WebRtcVideoEngine2, WebRtcVoiceEngine layer.
|
||||
// and the WebRtcVideoEngine, WebRtcVoiceEngine layer.
|
||||
virtual uint32_t ssrc() const = 0;
|
||||
};
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
#include "webrtc/base/stringencode.h"
|
||||
#include "webrtc/base/stringutils.h"
|
||||
#include "webrtc/media/base/mediaconstants.h"
|
||||
#include "webrtc/media/engine/webrtcvideoengine2.h"
|
||||
#include "webrtc/media/engine/webrtcvideoengine.h"
|
||||
#include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
|
||||
#include "webrtc/p2p/base/p2pconstants.h"
|
||||
#include "webrtc/pc/mediasession.h"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user