3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebRTC 音频发送和接收处理过程

發布時間:2024/4/11 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebRTC 音频发送和接收处理过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

曾經整理過一個 WebRTC 音頻發送和接收處理的關鍵過程,WebRTC Audio 接收和發送的關鍵過程 ,不過之前的分析是基于比較老的版本做的。分析所基于的應用程序,依然選擇 WebRTC 的示例應用 peerconnection_client。

這里基于 WebRTC 比較新的 M96 版的代碼,再來看下音頻發送和接收處理過程。

1. 創建 JsepTransportController

#0 webrtc::JsepTransportController::JsepTransportController(rtc::Thread*, cricket::PortAllocator*, webrtc::AsyncDnsResolverFactoryInterface*, webrtc::JsepTransportController::Config) (this=0x0, network_thread=0x0, port_allocator=0x7fffdb3f94f0, async_dns_resolver_factory=0x7fffe4004bc0, config=...)at ../../pc/jsep_transport_controller.cc:41 #1 0x00005555561bdcc7 in webrtc::PeerConnection::InitializeTransportController_n(webrtc::PeerConnectionInterface::RTCConfiguration const&, webrtc::PeerConnectionDependencies const&) (this=0x7fffe40043c0, configuration=..., dependencies=...) at ../../pc/peer_connection.cc:696 #2 0x00005555561ba922 in webrtc::PeerConnection::<lambda()>::operator()(void) const (__closure=0x7fffeeffc030) at ../../pc/peer_connection.cc:615 #3 0x00005555561e0998 in rtc::FunctionView<void()>::CallVoidPtr<webrtc::PeerConnection::Initialize(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies)::<lambda()> >(rtc::FunctionView<void()>::VoidUnion) (vu=...) at ../../api/function_view.h:109 #4 0x000055555605c164 in rtc::FunctionView<void ()>::operator()() const (this=0x7fffeeffbec8) at ../../api/function_view.h:95

2. 創建并注冊 transport

#0 webrtc::JsepTransportCollection::RegisterTransport(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unique_ptr<cricket::JsepTransport, std::default_delete<cricket::JsepTransport> >)(this=0x7fffdb3f8f50, mid="", transport=std::unique_ptr<cricket::JsepTransport> = {...}) at ../../pc/jsep_transport_collection.cc:158 #1 0x0000555556b9e732 in webrtc::JsepTransportController::MaybeCreateJsepTransport(bool, cricket::ContentInfo const&, cricket::SessionDescription const&) (this=0x7fffc0000d10, local=false, content_info=..., description=...) at ../../pc/jsep_transport_controller.cc:1082 #2 0x0000555556b9acae in webrtc::JsepTransportController::ApplyDescription_n(bool, webrtc::SdpType, cricket::SessionDescription const*)(this=0x7fffc0000d10, local=false, type=webrtc::SdpType::kOffer, description=0x5555586ca200) at ../../pc/jsep_transport_controller.cc:583 #3 0x0000555556b950e7 in webrtc::JsepTransportController::SetRemoteDescription(webrtc::SdpType, cricket::SessionDescription const*)(this=0x7fffc0000d10, type=webrtc::SdpType::kOffer, description=0x5555586ca200) at ../../pc/jsep_transport_controller.cc:105 #4 0x0000555556b94db6 in webrtc::JsepTransportController::<lambda()>::operator()(void) const (__closure=0x7fffef7fc690)at ../../pc/jsep_transport_controller.cc:101 #5 0x0000555556ba10cd in rtc::FunctionView<webrtc::RTCError()>::CallVoidPtr<webrtc::JsepTransportController::SetRemoteDescription(webrtc::SdpType, const cricket::SessionDescription*)::<lambda()> >(rtc::FunctionView<webrtc::RTCError()>::VoidUnion) (vu=...) at ../../api/function_view.h:109

3. 獲取 RTP transport 并創建 VoiceChannel

在 SdpOfferAnswerHandler::CreateVoiceChannel() 中根據 mid 通過 PeerConnection 獲得 RTP transport

cricket::VoiceChannel* SdpOfferAnswerHandler::CreateVoiceChannel(const std::string& mid) {TRACE_EVENT0("webrtc", "SdpOfferAnswerHandler::CreateVoiceChannel");RTC_DCHECK_RUN_ON(signaling_thread());if (!channel_manager()->media_engine())return nullptr;RtpTransportInternal* rtp_transport = pc_->GetRtpTransport(mid);// TODO(bugs.webrtc.org/11992): CreateVoiceChannel internally switches to the// worker thread. We shouldn't be using the `call_ptr_` hack here but simply// be on the worker thread and use `call_` (update upstream code).return channel_manager()->CreateVoiceChannel(pc_->call_ptr(), pc_->configuration()->media_config, rtp_transport,signaling_thread(), mid, pc_->SrtpRequired(), pc_->GetCryptoOptions(),&ssrc_generator_, audio_options()); }

PeerConnection 將根據 mid 通過 JsepTransportController 獲取 RTP transport:

RtpTransportInternal* PeerConnection::GetRtpTransport(const std::string& mid) {RTC_DCHECK_RUN_ON(signaling_thread());return network_thread()->Invoke<RtpTransportInternal*>(RTC_FROM_HERE, [this, &mid] {auto rtp_transport = transport_controller_->GetRtpTransport(mid);RTC_DCHECK(rtp_transport);return rtp_transport;}); }

然后創建創建 VoiceChannel:

#0 cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, cricket::MediaConfig const&, webrtc::RtpTransportInternal*, rtc::Thread*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*, cricket::AudioOptions const&)(this=0x7fffeeffaec0, call=0x5555561f550e <rtc::FunctionView<void ()>::CallVoidPtr<rtc::Thread::Invoke<webrtc::RtpTransportInternal*, void>(rtc::Location const&, rtc::FunctionView<webrtc::RtpTransportInternal* ()>)::{lambda()#1}>(rtc::FunctionView<void ()>::VoidUnion)>, media_config=..., rtp_transport=0x55555825bef0 <vtable for rtc::MessageHandler+16>, signaling_thread=0xd68a928ef375e700, content_name="", srtp_required=255, crypto_options=..., ssrc_generator=0xd68a928ef375e700, options=...)at ../../pc/channel_manager.cc:150 #1 0x0000555556272a7a in webrtc::SdpOfferAnswerHandler::CreateVoiceChannel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x7fffe4005350, mid="0") at ../../pc/sdp_offer_answer.cc:4618 #2 0x0000555556263bfb in webrtc::SdpOfferAnswerHandler::UpdateTransceiverChannel(rtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver> >, cricket::ContentInfo const&, cricket::ContentGroup const*)(this=0x7fffe4005350, transceiver=..., content=..., bundle_group=0x555558513270) at ../../pc/sdp_offer_answer.cc:3389 #3 0x0000555556260c59 in webrtc::SdpOfferAnswerHandler::UpdateTransceiversAndDataChannels(cricket::ContentSource, webrtc::SessionDescriptionInterface const&, webrtc::SessionDescriptionInterface const*, webrtc::SessionDescriptionInterface const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, cricket::ContentGroup const*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, cricket::ContentGroup const*> > > const&)(this=0x7fffe4005350, source=cricket::CS_REMOTE, new_session=..., old_local_description=0x0, old_remote_description=0x0, bundle_groups_by_mid=std::map with 2 elements = {...}) at ../../pc/sdp_offer_answer.cc:3209 #4 0x000055555624d8f5 in webrtc::SdpOfferAnswerHandler::ApplyRemoteDescription(std::unique_ptr<webrtc::SessionDescriptionInterface, std::default_delete<webrtc::SessionDescriptionInterface> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, cricket::ContentGroup const*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, cricket::ContentGroup const*> > > const&)(this=0x7fffe4005350, desc=std::unique_ptr<webrtc::SessionDescriptionInterface> = {...}, bundle_groups_by_mid=std::map with 2 elements = {...}) at ../../pc/sdp_offer_answer.cc:1599 #5 0x00005555562546ff in webrtc::SdpOfferAnswerHandler::DoSetRemoteDescription(std::unique_ptr<webrtc::SessionDescriptionInterface, std::default_delete<webrtc::SessionDescriptionInterface> >, rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface>) (this=0x7fffe4005350, desc=std::unique_ptr<webrtc::SessionDescriptionInterface> = {...}, observer=...)at ../../pc/sdp_offer_answer.cc:2196 #6 0x000055555624cbbb in webrtc::SdpOfferAnswerHandler::<lambda(std::function<void()>)>::operator()(std::function<void()>)(__closure=0x7fffeeffc340, operations_chain_callback=...) at ../../pc/sdp_offer_answer.cc:1510 #7 0x00005555562813b9 in rtc::rtc_operations_chain_internal::OperationWithFunctor<webrtc::SdpOfferAnswerHandler::SetRemoteDescription(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*)::<lambda(std::function<void()>)> >::Run(void) (this=0x7fffe40185d0) at ../../rtc_base/operations_chain.h:71 #8 0x0000555556278f74 in rtc::OperationsChain::ChainOperation<webrtc::SdpOfferAnswerHandler::SetRemoteDescription(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*)::<lambda(std::function<void()>)> >(webrtc::SdpOfferAnswerHandler::<lambda(std::function<void()>)> &&) (this=0x7fffe4005670, functor=...) at ../../rtc_base/operations_chain.h:154 #9 0x000055555624ce45 in webrtc::SdpOfferAnswerHandler::SetRemoteDescription(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*) (this=0x7fffe4005350, observer=0x55555881d6e0, desc_ptr=0x5555585ca780) --Type <RET> for more, q to quit, c to continue without paging--.cc:1494 #10 0x00005555561cc02f in webrtc::PeerConnection::SetRemoteDescription(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*)(this=0x7fffe4004580, observer=0x55555881d6e0, desc_ptr=0x5555585ca780) at ../../pc/peer_connection.cc:1362 #11 0x0000555556178768 in webrtc::ReturnType<void>::Invoke<webrtc::PeerConnectionInterface, void (webrtc::PeerConnectionInterface::*)(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*), webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*>(webrtc::PeerConnectionInterface*, void (webrtc::PeerConnectionInterface::*)(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*), webrtc::SetSessionDescriptionObserver*&&, webrtc::SessionDescriptionInterface*&&) (this=0x7fffffffc580, c=0x7fffe4004580, m=&virtual table offset 320)at ../../pc/proxy.h:119 #12 0x000055555617412f in webrtc::MethodCall<webrtc::PeerConnectionInterface, void, webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*>::Invoke<0ul, 1ul>(std::integer_sequence<unsigned long, 0ul, 1ul>) (this=0x7fffffffc560) at ../../pc/proxy.h:153 #13 0x00005555561835b8 in webrtc::MethodCall<webrtc::PeerConnectionInterface, void, webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*>::Run() (this=0x7fffffffc560) at ../../pc/proxy.h:146 #14 0x00005555560575f4 in rtc::Thread::QueuedTaskHandler::OnMessage(rtc::Message*) (this=0x5555585ace98, msg=0x7fffeeffcab0)at ../../rtc_base/thread.cc:1042 #15 0x0000555556055398 in rtc::Thread::Dispatch(rtc::Message*) (this=0x5555585acd70, pmsg=0x7fffeeffcab0) at ../../rtc_base/thread.cc:711

ChannelManager::CreateVoiceChannel() 的實現如下:

VoiceChannel* ChannelManager::CreateVoiceChannel(webrtc::Call* call,const MediaConfig& media_config,webrtc::RtpTransportInternal* rtp_transport,rtc::Thread* signaling_thread,const std::string& content_name,bool srtp_required,const webrtc::CryptoOptions& crypto_options,rtc::UniqueRandomIdGenerator* ssrc_generator,const AudioOptions& options) {RTC_DCHECK(call);RTC_DCHECK(media_engine_);// TODO(bugs.webrtc.org/11992): Remove this workaround after updates in// PeerConnection and add the expectation that we're already on the right// thread.if (!worker_thread_->IsCurrent()) {return worker_thread_->Invoke<VoiceChannel*>(RTC_FROM_HERE, [&] {return CreateVoiceChannel(call, media_config, rtp_transport,signaling_thread, content_name, srtp_required,crypto_options, ssrc_generator, options);});}RTC_DCHECK_RUN_ON(worker_thread_);VoiceMediaChannel* media_channel = media_engine_->voice().CreateMediaChannel(call, media_config, options, crypto_options);if (!media_channel) {return nullptr;}auto voice_channel = std::make_unique<VoiceChannel>(worker_thread_, network_thread_, signaling_thread,absl::WrapUnique(media_channel), content_name, srtp_required,crypto_options, ssrc_generator);voice_channel->Init_w(rtp_transport);VoiceChannel* voice_channel_ptr = voice_channel.get();voice_channels_.push_back(std::move(voice_channel));return voice_channel_ptr; }

4. 為 BaseChannel/VoiceChannel 設置 RtpTransport

為 BaseChannel 設置 RtpTransport 的動作在 BaseChannel 中 BaseChannel::Init_w() 函數里的一個 lambda 表達式中完成:

#0 cricket::BaseChannel::SetRtpTransport(webrtc::RtpTransportInternal*)(this=0x555556ba2534 <cricket::JsepTransport::rtp_transport() const+52>, rtp_transport=0x7fffdb3f9430)at ../../pc/channel.cc:222 #1 0x0000555556b6f1f6 in cricket::BaseChannel::<lambda()>::operator()(void) const (__closure=0x7fffdabf8300)at ../../pc/channel.cc:200 #2 0x0000555556b7d400 in rtc::FunctionView<void()>::CallVoidPtr<cricket::BaseChannel::Init_w(webrtc::RtpTransportInternal*)::<lambda()> >(rtc::FunctionView<void()>::VoidUnion) (vu=...) at ../../api/function_view.h:109

BaseChannel::Init_w() 的調用過程如下:

#0 cricket::BaseChannel::Init_w(webrtc::RtpTransportInternal*) (this=0x7fffdabf8328, rtp_transport=0x7fffdabf82c0)at ../../pc/channel.cc:196 #1 0x0000555556b8dd8a in cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, cricket::MediaConfig const&, webrtc::RtpTransportInternal*, rtc::Thread*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*, cricket::AudioOptions const&)(this=0x7fffc408c160, call=0x7fffc4090080, media_config=..., rtp_transport=0x7fffc0003e00, signaling_thread=0x5555586bfd90, content_name="0", srtp_required=true, crypto_options=..., ssrc_generator=0x7fffe0007710, options=...)at ../../pc/channel_manager.cc:177 #2 0x0000555556b8d86d in cricket::ChannelManager::<lambda()>::operator()(void) const (__closure=0x7fffef7fbf30)at ../../pc/channel_manager.cc:158 #3 0x0000555556b8f4dd in rtc::FunctionView<cricket::VoiceChannel*()>::CallVoidPtr<cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, const cricket::MediaConfig&, webrtc::RtpTransportInternal*, rtc::Thread*, const string&, bool, const webrtc::CryptoOptions&, rtc::UniqueRandomIdGenerator*, const cricket::AudioOptions&)::<lambda()> >(rtc::FunctionView<cricket::VoiceChannel*()>::VoidUnion) (vu=...) at ../../api/function_view.h:109

BaseChannel::Init_w() 的代碼如下:

void BaseChannel::Init_w(webrtc::RtpTransportInternal* rtp_transport) {RTC_DCHECK_RUN_ON(worker_thread());network_thread_->Invoke<void>(RTC_FROM_HERE, [this, rtp_transport] {SetRtpTransport(rtp_transport);// Both RTP and RTCP channels should be set, we can call SetInterface on// the media channel and it can set network options.media_channel_->SetInterface(this);}); }

這段代碼將數據包發送過程中的多個組件連接起來。MediaChannel::SetInterface(NetworkInterface* iface) 接口需要一個 MediaChannel::NetworkInterface 接口的實現,MediaChannel 可以通過這個接口發送數據包:

class MediaChannel {public:class NetworkInterface {public:enum SocketType { ST_RTP, ST_RTCP };virtual bool SendPacket(rtc::CopyOnWriteBuffer* packet,const rtc::PacketOptions& options) = 0;virtual bool SendRtcp(rtc::CopyOnWriteBuffer* packet,const rtc::PacketOptions& options) = 0;virtual int SetOption(SocketType type,rtc::Socket::Option opt,int option) = 0;virtual ~NetworkInterface() {}};

BaseChannel 實現 MediaChannel::NetworkInterface 接口。BaseChannel::Init_w() 將 MediaChannel 、BaseChannel 和 RtpTransportInternal 這三個組件連接起來。

5. MediaChannel 是 WebRtcVoiceMediaChannel

BaseChannel 的 MediaChannel 在對象構造的時候傳入:

#0 cricket::BaseChannel::BaseChannel(rtc::Thread*, rtc::Thread*, rtc::Thread*, std::unique_ptr<cricket::MediaChannel, std::default_delete<cricket::MediaChannel> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions, rtc::UniqueRandomIdGenerator*)(this=0x7fffdabf80e0, worker_thread=0x7fffdabf8100, network_thread=0x7fffdabf80f0, signaling_thread=0x7fffdabf80e0, media_channel=std::unique_ptr<cricket::MediaChannel> = {...}, content_name="", srtp_required=255, crypto_options=..., ssrc_generator=0xc4d93a8ca0272e00) at ../../pc/channel.cc:117 #1 0x0000555556b77d44 in cricket::VoiceChannel::VoiceChannel(rtc::Thread*, rtc::Thread*, rtc::Thread*, std::unique_ptr<cricket::VoiceMediaChannel, std::default_delete<cricket::VoiceMediaChannel> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions, rtc::UniqueRandomIdGenerator*)(this=0x7fffc4092460, worker_thread=0x7fffe4003030, network_thread=0x7fffe4002600, signaling_thread=0x555558805600, media_channel=std::unique_ptr<cricket::VoiceMediaChannel> = {...}, content_name="0", srtp_required=true, crypto_options=..., ssrc_generator=0x7fffe40077b0) at ../../pc/channel.cc:797 #2 0x0000555556b9001a in std::make_unique<cricket::VoiceChannel, rtc::Thread* const&, rtc::Thread* const&, rtc::Thread*&, std::unique_ptr<cricket::VoiceMediaChannel, std::default_delete<cricket::VoiceMediaChannel> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool&, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*&>(rtc::Thread* const&, rtc::Thread* const&, rtc::Thread*&, std::unique_ptr<cricket::VoiceMediaChannel, std::default_delete<cricket::VoiceMediaChannel> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool&, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*&) () at /usr/include/c++/9/bits/unique_ptr.h:857 #3 0x0000555556b8dd4f in cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, cricket::MediaConfig const&, webrtc::RtpTransportInternal*, rtc::Thread*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*, cricket::AudioOptions const&)(this=0x7fffc408c160, call=0x7fffc4090090, media_config=..., rtp_transport=0x7fffc0003f10, signaling_thread=0x555558805600, content_name="0", srtp_required=true, crypto_options=..., ssrc_generator=0x7fffe40077b0, options=...) at ../../pc/channel_manager.cc:175 #4 0x0000555556b8d86d in cricket::ChannelManager::<lambda()>::operator()(void) const (__closure=0x7fffeeffaf30) at ../../pc/channel_manager.cc:158

ChannelManager 中通過 WebRtcVoiceEngine/VoiceEngine 創建 VoiceChannel/BaseChannel 的過程如下:

VoiceChannel* ChannelManager::CreateVoiceChannel(webrtc::Call* call,const MediaConfig& media_config,webrtc::RtpTransportInternal* rtp_transport,rtc::Thread* signaling_thread,const std::string& content_name,bool srtp_required,const webrtc::CryptoOptions& crypto_options,rtc::UniqueRandomIdGenerator* ssrc_generator,const AudioOptions& options) {RTC_DCHECK(call);RTC_DCHECK(media_engine_);// TODO(bugs.webrtc.org/11992): Remove this workaround after updates in// PeerConnection and add the expectation that we're already on the right// thread.if (!worker_thread_->IsCurrent()) {return worker_thread_->Invoke<VoiceChannel*>(RTC_FROM_HERE, [&] {return CreateVoiceChannel(call, media_config, rtp_transport,signaling_thread, content_name, srtp_required,crypto_options, ssrc_generator, options);});}RTC_DCHECK_RUN_ON(worker_thread_);VoiceMediaChannel* media_channel = media_engine_->voice().CreateMediaChannel(call, media_config, options, crypto_options);if (!media_channel) {return nullptr;}auto voice_channel = std::make_unique<VoiceChannel>(worker_thread_, network_thread_, signaling_thread,absl::WrapUnique(media_channel), content_name, srtp_required,crypto_options, ssrc_generator);voice_channel->Init_w(rtp_transport);VoiceChannel* voice_channel_ptr = voice_channel.get();voice_channels_.push_back(std::move(voice_channel));return voice_channel_ptr; }

MediaChannel/VoiceMediaChannel 是 WebRtcVoiceMediaChannel:

#0 webrtc::internal::Call::worker_thread() const (this=0x5555557d146f <webrtc::MutexLock::~MutexLock()+31>) at ../../call/call.cc:1285 #1 0x00005555560d9e8f in cricket::WebRtcVoiceEngine::CreateMediaChannel(webrtc::Call*, cricket::MediaConfig const&, cricket::AudioOptions const&, webrtc::CryptoOptions const&) (this=0x55555844a800, call=0x7fffc4090090, config=..., options=..., crypto_options=...)at ../../media/engine/webrtc_voice_engine.cc:432 #2 0x0000555556b8dcc1 in cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, cricket::MediaConfig const&, webrtc::RtpTransportInternal*, rtc::Thread*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, webrtc::CryptoOptions const&, rtc::UniqueRandomIdGenerator*, cricket::AudioOptions const&)(this=0x7fffc408c160, call=0x7fffc4090090, media_config=..., rtp_transport=0x7fffc0003f20, signaling_thread=0x55555861bdd0, content_name="0", srtp_required=true, crypto_options=..., ssrc_generator=0x7fffe40055b0, options=...) at ../../pc/channel_manager.cc:166 #3 0x0000555556b8d86d in cricket::ChannelManager::<lambda()>::operator()(void) const (__closure=0x7fffeeffaf50) at ../../pc/channel_manager.cc:158 #4 0x0000555556b8f4dd in rtc::FunctionView<cricket::VoiceChannel*()>::CallVoidPtr<cricket::ChannelManager::CreateVoiceChannel(webrtc::Call*, const cricket::MediaConfig&, webrtc::RtpTransportInternal*, rtc::Thread*, const string&, bool, const webrtc::CryptoOptions&, rtc::UniqueRandomIdGenerator*, const cricket::AudioOptions&)::<lambda()> >(rtc::FunctionView<cricket::VoiceChannel*()>::VoidUnion) (vu=...) at ../../api/function_view.h:109

6. 音頻數據包的發送處理

音頻數據包的編碼發送,分為幾個階段。

第一階段,錄制線程將錄制的麥克風音頻數據拋上來,送進編碼線程。

#0 webrtc::voe::(anonymous namespace)::ChannelSend::ProcessAndEncodeAudio(std::unique_ptr<webrtc::AudioFrame, std::default_delete<webrtc::AudioFrame> >) (this=0x5555561264fa <webrtc::AudioProcessingImpl::ApmStatsReporter::GetStatistics()+106>, audio_frame=std::unique_ptr<webrtc::AudioFrame> = {...})at ../../audio/channel_send.cc:815 #1 0x000055555698a90e in webrtc::internal::AudioSendStream::SendAudioData(std::unique_ptr<webrtc::AudioFrame, std::default_delete<webrtc::AudioFrame> >) (this=0x7fffc40dab90, audio_frame=std::unique_ptr<webrtc::AudioFrame> = {...}) at ../../audio/audio_send_stream.cc:422 #2 0x000055555699e2e4 in webrtc::AudioTransportImpl::SendProcessedData(std::unique_ptr<webrtc::AudioFrame, std::default_delete<webrtc::AudioFrame> >)(this=0x7fffc4024f60, audio_frame=std::unique_ptr<webrtc::AudioFrame> = {...}) at ../../audio/audio_transport_impl.cc:190 #3 0x000055555699df46 in webrtc::AudioTransportImpl::RecordedDataIsAvailable(void const*, unsigned long, unsigned long, unsigned long, unsigned int, unsigned int, int, unsigned int, bool, unsigned int&)(this=0x7fffc4024f60, audio_data=0x7fff84001030, number_of_frames=441, bytes_per_sample=4, number_of_channels=2, sample_rate=44100, audio_delay_milliseconds=207, key_pressed=false) at ../../audio/audio_transport_impl.cc:171 #4 0x00005555565b7862 in webrtc::AudioDeviceBuffer::DeliverRecordedData() (this=0x7fffc4002c28)at ../../modules/audio_device/audio_device_buffer.cc:270 #5 0x00005555565a90c0 in webrtc::AudioDeviceLinuxPulse::ProcessRecordedData(signed char*, unsigned int, unsigned int)(this=0x7fffc4004de0, bufferData=0x7fffb0910374 "\r", bufferSizeInSamples=441, recDelay=10)at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:1968 #6 0x00005555565a8f80 in webrtc::AudioDeviceLinuxPulse::ReadRecordedData(void const*, unsigned long)(this=0x7fffc4004de0, bufferData=0x7fffb0910374, bufferSize=4408) at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:1926 #7 0x00005555565abcc1 in webrtc::AudioDeviceLinuxPulse::RecThreadProcess() (this=0x7fffc4004de0)at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:2247 #8 0x000055555659e509 in webrtc::AudioDeviceLinuxPulse::<lambda()>::operator()(void) const (__closure=0x7fffc4003740)at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:166 #9 0x00005555565abf53 in std::_Function_handler<void(), webrtc::AudioDeviceLinuxPulse::Init()::<lambda()> >::_M_invoke(const std::_Any_data &)(__functor=...) at /usr/include/c++/9/bits/std_function.h:300

第二階段,編碼線程將編碼的數據送進 PacedSender 的隊列里。

#0 webrtc::PacingController::EnqueuePacket(std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> >)(this=0x55555692fb9a <std::tuple<webrtc::RtpPacketToSend*, std::default_delete<webrtc::RtpPacketToSend> >::tuple<webrtc::RtpPacketToSend*&, std::default_delete<webrtc::RtpPacketToSend>, true>(webrtc::RtpPacketToSend*&, std::default_delete<webrtc::RtpPacketToSend>&&)+72>, packet=std::unique_ptr<webrtc::RtpPacketToSend> = {...}) at ../../modules/pacing/pacing_controller.cc:235 #1 0x000055555692edbc in webrtc::PacedSender::EnqueuePackets(std::vector<std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> >, std::allocator<std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> > > >)(this=0x7fffc408e530, packets=std::vector of length 1, capacity 1 = {...}) at ../../modules/pacing/paced_sender.cc:128 #2 0x00005555569b1a6b in webrtc::voe::(anonymous namespace)::RtpPacketSenderProxy::EnqueuePackets(std::vector<std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> >, std::allocator<std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> > > >) (this=0x7fffc40db280, packets=std::vector of length 0, capacity 0) at ../../audio/channel_send.cc:270 #3 0x0000555557425210 in webrtc::RTPSender::SendToNetwork(std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> >)(this=0x7fffc40f35d0, packet=std::unique_ptr<webrtc::RtpPacketToSend> = {...}) at ../../modules/rtp_rtcp/source/rtp_sender.cc:499 #4 0x000055555742b1bb in webrtc::RTPSenderAudio::SendAudio(webrtc::AudioFrameType, signed char, unsigned int, unsigned char const*, unsigned long, long)(this=0x7fffc40f4870, frame_type=webrtc::AudioFrameType::kAudioFrameSpeech, payload_type=111 'o', rtp_timestamp=1692995353, payload_data=0x7fff9c000b90 "x\v\350A1[\355\301e?\257~-rs\252\261\206\314\333X\315\"N}\022\251y\235\352X\234\021x\223\260\206\261\255\243wR7T\317\353\177\035\366\211", <incomplete sequence \362\274>, payload_size=56, absolute_capture_timestamp_ms=-1) at ../../modules/rtp_rtcp/source/rtp_sender_audio.cc:316 #5 0x00005555569b27a4 in webrtc::voe::(anonymous namespace)::ChannelSend::SendRtpAudio(webrtc::AudioFrameType, uint8_t, uint32_t, rtc::ArrayView<unsigned char const, -4711>, int64_t)(this=0x7fffc40db010, frameType=webrtc::AudioFrameType::kAudioFrameSpeech, payloadType=111 'o', rtp_timestamp=0, payload=..., absolute_capture_timestamp_ms=-1) at ../../audio/channel_send.cc:442 #6 0x00005555569b20f7 in webrtc::voe::(anonymous namespace)::ChannelSend::SendData(webrtc::AudioFrameType, uint8_t, uint32_t, uint8_t const*, size_t, int64_t)(this=0x7fffc40db010, frameType=webrtc::AudioFrameType::kAudioFrameSpeech, payloadType=111 'o', rtp_timestamp=0, payloadData=0x7fff9c000b90 "x\v\350A1[\355\301e?\257~-rs\252\261\206\314\333X\315\"N}\022\251y\235\352X\234\021x\223\260\206\261\255\243wR7T\317\353\177\035\366\211", <incomplete sequence \362\274>, payloadSize=56, absolute_capture_timestamp_ms=-1) at ../../audio/channel_send.cc:370 #7 0x00005555569c9b0c in webrtc::(anonymous namespace)::AudioCodingModuleImpl::Encode(webrtc::(anonymous namespace)::AudioCodingModuleImpl::InputData const&, absl::optional<long>) (this=0x7fffc40dca00, input_data=..., absolute_capture_timestamp_ms=...)at ../../modules/audio_coding/acm2/audio_coding_module.cc:302 #8 0x00005555569c9c9d in webrtc::(anonymous namespace)::AudioCodingModuleImpl::Add10MsData(webrtc::AudioFrame const&)(this=0x7fffc40dca00, audio_frame=...) at ../../modules/audio_coding/acm2/audio_coding_module.cc:339 #9 0x00005555569b8269 in webrtc::voe::(anonymous namespace)::ChannelSend::<lambda()>::operator()(void) (__closure=0x7fff880e1d98)at ../../audio/channel_send.cc:864 #10 0x00005555569bd044 in webrtc::webrtc_new_closure_impl::ClosureTask<webrtc::voe::(anonymous namespace)::ChannelSend::ProcessAndEncodeAudio(std::unique_ptr<webrtc::AudioFrame>)::<lambda()> >::Run(void) (this=0x7fff880e1d90) at ../../rtc_base/task_utils/to_queued_task.h:32

第三階段,PacedSender 將 RTP 包通過 MediaChannel 發送出去。

#0 cricket::MediaChannel::SendRtp(unsigned char const*, unsigned long, webrtc::PacketOptions const&)(this=0x7fff9c001648, data=0xffffffffffffffff <error: Cannot access memory at address 0xffffffffffffffff>, len=93825004092765, options=...)at ../../media/base/media_channel.cc:169 #1 0x00005555560f11dc in cricket::WebRtcVoiceMediaChannel::SendRtp(unsigned char const*, unsigned long, webrtc::PacketOptions const&)(this=0x7fffc4091a90, data=0x7fff9c0016d0 "\220\357\061&d\351\017\031\342f\335\\\276", <incomplete sequence \336>, len=84, options=...)at ../../media/engine/webrtc_voice_engine.cc:2572 #2 0x0000555557430fd4 in webrtc::RtpSenderEgress::SendPacketToNetwork(webrtc::RtpPacketToSend const&, webrtc::PacketOptions const&, webrtc::PacedPacketInfo const&) (this=0x7fffc40f3310, packet=..., options=..., pacing_info=...) at ../../modules/rtp_rtcp/source/rtp_sender_egress.cc:555 #3 0x000055555742e285 in webrtc::RtpSenderEgress::SendPacket(webrtc::RtpPacketToSend*, webrtc::PacedPacketInfo const&)(this=0x7fffc40f3310, packet=0x7fff9c0015f0, pacing_info=...) at ../../modules/rtp_rtcp/source/rtp_sender_egress.cc:273 #4 0x000055555741cc89 in webrtc::ModuleRtpRtcpImpl2::TrySendPacket(webrtc::RtpPacketToSend*, webrtc::PacedPacketInfo const&)(this=0x7fffc40f2800, packet=0x7fff9c0015f0, pacing_info=...) at ../../modules/rtp_rtcp/source/rtp_rtcp_impl2.cc:376 #5 0x0000555556936fd5 in webrtc::PacketRouter::SendPacket(std::unique_ptr<webrtc::RtpPacketToSend, std::default_delete<webrtc::RtpPacketToSend> >, webrtc::PacedPacketInfo const&) (this=0x7fffc408df18, packet=std::unique_ptr<webrtc::RtpPacketToSend> = {...}, cluster_info=...)at ../../modules/pacing/packet_router.cc:160 #6 0x00005555569347ca in webrtc::PacingController::ProcessPackets() (this=0x7fffc408e598) at ../../modules/pacing/pacing_controller.cc:590 #7 0x000055555692f1e3 in webrtc::PacedSender::Process() (this=0x7fffc408e530) at ../../modules/pacing/paced_sender.cc:183 #8 0x000055555692f6cb in webrtc::PacedSender::ModuleProxy::Process() (this=0x7fffc408e548) at ../../modules/pacing/paced_sender.h:152 #9 0x00005555573aaafe in webrtc::ProcessThreadImpl::Process() (this=0x7fffc408daa0) at ../../modules/utility/source/process_thread_impl.cc:257 #10 0x00005555573a8e9b in webrtc::ProcessThreadImpl::<lambda()>::operator()(void) const (__closure=0x7fffc4095e50)at ../../modules/utility/source/process_thread_impl.cc:86

MediaChannel::SendRtp() 會將發送轉到網絡發送線程中去。

void MediaChannel::SendRtp(const uint8_t* data,size_t len,const webrtc::PacketOptions& options) {auto send =[this, packet_id = options.packet_id,included_in_feedback = options.included_in_feedback,included_in_allocation = options.included_in_allocation,packet = rtc::CopyOnWriteBuffer(data, len, kMaxRtpPacketLen)]() mutable {rtc::PacketOptions rtc_options;rtc_options.packet_id = packet_id;if (DscpEnabled()) {rtc_options.dscp = PreferredDscp();}rtc_options.info_signaled_after_sent.included_in_feedback =included_in_feedback;rtc_options.info_signaled_after_sent.included_in_allocation =included_in_allocation;SendPacket(&packet, rtc_options);};// TODO(bugs.webrtc.org/11993): ModuleRtpRtcpImpl2 and related classes (e.g.// RTCPSender) aren't aware of the network thread and may trigger calls to// this function from different threads. Update those classes to keep// network traffic on the network thread.if (network_thread_->IsCurrent()) {send();} else {network_thread_->PostTask(ToQueuedTask(network_safety_, std::move(send)));} }

第四階段,通過 socket 接口將數據包發送到網絡。

#0 rtc::PhysicalSocket::DoSendTo(int, char const*, int, int, sockaddr const*, unsigned int)(this=0x5555563da778 <rtc::SocketAddress::ToSockAddrStorage(sockaddr_storage*) const+58>, socket=32767, buf=0x7fffdb3f8770 "\001\001", len=-616594960, flags=0, dest_addr=0x0, addrlen=16) at ../../rtc_base/physical_socket_server.cc:509 #1 0x00005555560463f3 in rtc::PhysicalSocket::SendTo(void const*, unsigned long, rtc::SocketAddress const&)(this=0x7fffc00069f8, buffer=0x7fffe0003560, length=100, addr=...) at ../../rtc_base/physical_socket_server.cc:375 #2 0x0000555557346e8e in rtc::AsyncUDPSocket::SendTo(void const*, unsigned long, rtc::SocketAddress const&, rtc::PacketOptions const&)(this=0x7fffc0005210, pv=0x7fffe0003560, cb=100, addr=..., options=...) at ../../rtc_base/async_udp_socket.cc:84 #3 0x000055555731241a in cricket::UDPPort::SendTo(void const*, unsigned long, rtc::SocketAddress const&, rtc::PacketOptions const&, bool)(this=0x7fffc00196a0, data=0x7fffe0003560, size=100, addr=..., options=..., payload=true) at ../../p2p/base/stun_port.cc:286 #4 0x000055555730d814 in cricket::ProxyConnection::Send(void const*, unsigned long, rtc::PacketOptions const&)(this=0x7fffc001a7f0, data=0x7fffe0003560, size=100, options=...) at ../../p2p/base/connection.cc:1371 #5 0x000055555728dfac in cricket::P2PTransportChannel::SendPacket(char const*, unsigned long, rtc::PacketOptions const&, int)(this=0x7fffc0002b20, data=0x7fffe0003560 "\220o1Id\351\222Y\342f\335\\\276", <incomplete sequence \336>, len=100, options=..., flags=0)at ../../p2p/base/p2p_transport_channel.cc:1616 #6 0x000055555726e7de in cricket::DtlsTransport::SendPacket(char const*, unsigned long, rtc::PacketOptions const&, int)(this=0x7fffc00033c0, data=0x7fffe0003560 "\220o1Id\351\222Y\342f\335\\\276", <incomplete sequence \336>, size=100, options=..., flags=1)at ../../p2p/base/dtls_transport.cc:417 #7 0x0000555556bd5522 in webrtc::RtpTransport::SendPacket(bool, rtc::CopyOnWriteBuffer*, rtc::PacketOptions const&, int)(this=0x7fffc0003e00, rtcp=false, packet=0x7fffe00154e8, options=..., flags=1) at ../../pc/rtp_transport.cc:147 #8 0x0000555556bdf39c in webrtc::SrtpTransport::SendRtpPacket(rtc::CopyOnWriteBuffer*, rtc::PacketOptions const&, int)(this=0x7fffc0003e00, packet=0x7fffe00154e8, options=..., flags=1) at ../../pc/srtp_transport.cc:173 #9 0x0000555556b731d8 in cricket::BaseChannel::SendPacket(bool, rtc::CopyOnWriteBuffer*, rtc::PacketOptions const&)(this=0x7fffc4092460, rtcp=false, packet=0x7fffe00154e8, options=...) at ../../pc/channel.cc:437 #10 0x0000555556b710c9 in cricket::BaseChannel::SendPacket(rtc::CopyOnWriteBuffer*, rtc::PacketOptions const&)(this=0x7fffc4092460, packet=0x7fffe00154e8, options=...) at ../../pc/channel.cc:318 #11 0x0000555557257ea2 in cricket::MediaChannel::DoSendPacket(rtc::CopyOnWriteBuffer*, bool, rtc::PacketOptions const&)(this=0x7fffc4091a90, packet=0x7fffe00154e8, rtcp=false, options=...) at ../../media/base/media_channel.cc:163 #12 0x0000555557257496 in cricket::MediaChannel::SendPacket(rtc::CopyOnWriteBuffer*, rtc::PacketOptions const&)(this=0x7fffc4091a90, packet=0x7fffe00154e8, options=...) at ../../media/base/media_channel.cc:71 #13 0x0000555557257f9a in cricket::MediaChannel::<lambda()>::operator()(void) (__closure=0x7fffe00154d8) at ../../media/base/media_channel.cc:184 #14 0x000055555725aeb2 in webrtc::webrtc_new_closure_impl::SafetyClosureTask<cricket::MediaChannel::SendRtp(const uint8_t*, size_t, const webrtc::PacketOptions&)::<lambda()> >::Run(void) (this=0x7fffe00154d0) at ../../rtc_base/task_utils/to_queued_task.h:50

PhysicalSocket::DoSendTo() 實現如下:

int PhysicalSocket::DoSendTo(SOCKET socket,const char* buf,int len,int flags,const struct sockaddr* dest_addr,socklen_t addrlen) {return ::sendto(socket, buf, len, flags, dest_addr, addrlen); }

在 AudioTransportImpl::RecordedDataIsAvailable() 中有如下這段代碼:

RTC_DCHECK_GT(audio_frame->samples_per_channel_, 0);if (async_audio_processing_)async_audio_processing_->Process(std::move(audio_frame));elseSendProcessedData(std::move(audio_frame));return 0; }

這也就意味著,在一些情況下,音頻發送過程會多轉一次線程。

7. 音頻數據包的接收處理

音頻數據包的接收處理分為幾個階段。

第一階段,從網絡接收音頻 RTP 包。

#0 cricket::WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer, long)(this=0x5555557d7c73 <rtc::dchecked_cast<long, long>(long)+28>, packet=..., packet_time_us=1640606419828691)at ../../media/engine/webrtc_voice_engine.cc:2217 #1 0x0000555556b736fe in cricket::BaseChannel::OnRtpPacket(webrtc::RtpPacketReceived const&) (this=0x7fffc4092460, parsed_packet=...)at ../../pc/channel.cc:467 #2 0x00005555568bec90 in webrtc::RtpDemuxer::OnRtpPacket(webrtc::RtpPacketReceived const&) (this=0x7fffc00040a8, packet=...)at ../../call/rtp_demuxer.cc:249 #3 0x0000555556bd5d12 in webrtc::RtpTransport::DemuxPacket(rtc::CopyOnWriteBuffer, long)(this=0x7fffc0003f20, packet=..., packet_time_us=1640606419828691) at ../../pc/rtp_transport.cc:194 #4 0x0000555556be0551 in webrtc::SrtpTransport::OnRtpPacketReceived(rtc::CopyOnWriteBuffer, long)(this=0x7fffc0003f20, packet=..., packet_time_us=1640606419828691) at ../../pc/srtp_transport.cc:226 #5 0x0000555556bd6898 in webrtc::RtpTransport::OnReadPacket(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc0003f20, transport=0x7fffc00034e0, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, len=106, packet_time_us=@0x7fffdb3f8bc8: 1640606419828691, flags=1) at ../../pc/rtp_transport.cc:268 #6 0x0000555556bd7d41 in sigslot::_opaque_connection::emitter<webrtc::RtpTransport, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>(sigslot::_opaque_connection const*, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int) (self=0x7fffc0004420)at ../../rtc_base/third_party/sigslot/sigslot.h:342 #7 0x0000555557276ec7 in sigslot::_opaque_connection::emit<rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int) const (this=0x7fffc0004420) at ../../rtc_base/third_party/sigslot/sigslot.h:331 #8 0x000055555727656d in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>::emit(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc00035d8, args#0=0x7fffc00034e0, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=@0x7fffdb3f8bc8: 1640606419828691, args#4=1) at ../../rtc_base/third_party/sigslot/sigslot.h:566 #9 0x0000555557275b90 in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>::operator()(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc00035d8, args#0=0x7fffc00034e0, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=@0x7fffdb3f8bc8: 1640606419828691, args#4=1) at ../../rtc_base/third_party/sigslot/sigslot.h:570 #10 0x000055555727172e in cricket::DtlsTransport::OnReadPacket(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc00034e0, transport=0x7fffc0002c40, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, size=106, packet_time_us=@0x7fffdb3f8bc8: 1640606419828691, flags=0) at ../../p2p/base/dtls_transport.cc:627 #11 0x0000555557276d64 in sigslot::_opaque_connection::emitter<cricket::DtlsTransport, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>(sigslot::_opaque_connection const*, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int) (self=0x7fffc0002340)at ../../rtc_base/third_party/sigslot/sigslot.h:342 #12 0x0000555557276ec7 in sigslot::_opaque_connection::emit<rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int) const (this=0x7fffc0002340) at ../../rtc_base/third_party/sigslot/sigslot.h:331 #13 0x000055555727656d in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>::emit(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc0002d38, args#0=0x7fffc0002c40, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=@0x7fffdb3f8bc8: 1640606419828691, args#4=0) at ../../rtc_base/third_party/sigslot/sigslot.h:566 #14 0x0000555557275b90 in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int>::operator()(rtc::PacketTransportInternal*, char const*, unsigned long, long const&, int)(this=0x7fffc0002d38, args#0=0x7fffc0002c40, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, ar--Type <RET> for more, q to quit, c to continue without paging-- gs#3=@0x7fffdb3f8bc8: 1640606419828691, args#4=0) at ../../rtc_base/third_party/sigslot/sigslot.h:570 #15 0x0000555557295a6d in cricket::P2PTransportChannel::OnReadPacket(cricket::Connection*, char const*, unsigned long, long)(this=0x7fffc0002c40, connection=0x7fffc0031650, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, len=106, packet_time_us=1640606419828691) at ../../p2p/base/p2p_transport_channel.cc:2228 #16 0x00005555572a4e14 in sigslot::_opaque_connection::emitter<cricket::P2PTransportChannel, cricket::Connection*, char const*, unsigned long, long>(sigslot::_opaque_connection const*, cricket::Connection*, char const*, unsigned long, long) (self=0x7fffc40ccb20)at ../../rtc_base/third_party/sigslot/sigslot.h:342 #17 0x000055555730fcb0 in sigslot::_opaque_connection::emit<cricket::Connection*, char const*, unsigned long, long>(cricket::Connection*, char const*, unsigned long, long) const (this=0x7fffc40ccb20) at ../../rtc_base/third_party/sigslot/sigslot.h:331 #18 0x000055555730f612 in sigslot::signal_with_thread_policy<sigslot::single_threaded, cricket::Connection*, char const*, unsigned long, long>::emit(cricket::Connection*, char const*, unsigned long, long)(this=0x7fffc0031720, args#0=0x7fffc0031650, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=1640606419828691) at ../../rtc_base/third_party/sigslot/sigslot.h:566 #19 0x000055555730ed67 in sigslot::signal_with_thread_policy<sigslot::single_threaded, cricket::Connection*, char const*, unsigned long, long>::operator()(cricket::Connection*, char const*, unsigned long, long)(this=0x7fffc0031720, args#0=0x7fffc0031650, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=1640606419828691) at ../../rtc_base/third_party/sigslot/sigslot.h:570 #20 0x00005555573004c7 in cricket::Connection::OnReadPacket(char const*, unsigned long, long)(this=0x7fffc0031650, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, size=106, packet_time_us=1640606419828691) at ../../p2p/base/connection.cc:465 #21 0x00005555573134b8 in cricket::UDPPort::OnReadPacket(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&)(this=0x7fffc002aa60, socket=0x7fffc0009fa0, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, size=106, remote_addr=..., packet_time_us=@0x7fffdb3f9260: 1640606419828691) at ../../p2p/base/stun_port.cc:394 #22 0x0000555557312fa4 in cricket::UDPPort::HandleIncomingPacket(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long)(this=0x7fffc002aa60, socket=0x7fffc0009fa0, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, size=106, remote_addr=..., packet_time_us=1640606419828691) at ../../p2p/base/stun_port.cc:335 #23 0x00005555572d854f in cricket::AllocationSequence::OnReadPacket(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&)(this=0x7fffc0009e60, socket=0x7fffc0009fa0, data=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, size=106, remote_addr=..., packet_time_us=@0x7fffdb3f9600: 1640606419828691) at ../../p2p/client/basic_port_allocator.cc:1641 #24 0x00005555572e857e in sigslot::_opaque_connection::emitter<cricket::AllocationSequence, rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&>(sigslot::_opaque_connection const*, rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&) (self=0x7fffc001a1c0) at ../../rtc_base/third_party/sigslot/sigslot.h:342 #25 0x00005555572eff15 in sigslot::_opaque_connection::emit<rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&>(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&) const (this=0x7fffc001a1c0)at ../../rtc_base/third_party/sigslot/sigslot.h:331 #26 0x00005555572efda3 in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&>::emit(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&)(this=0x7fffc0009ff0, args#0=0x7fffc0009fa0, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=..., args#4=@0x7fffdb3f9600: 1640606419828691) at ../../rtc_base/third_party/sigslot/sigslot.h:566 #27 0x00005555572efbe0 in sigslot::signal_with_thread_policy<sigslot::single_threaded, rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketA--Type <RET> for more, q to quit, c to continue without paging-- ddress const&, long const&>::operator()(rtc::AsyncPacketSocket*, char const*, unsigned long, rtc::SocketAddress const&, long const&)(this=0x7fffc0009ff0, args#0=0x7fffc0009fa0, args#1=0x7fffc000a1a0 "\220o\\\026_\372\242\367\006~?\276", <incomplete sequence \336>, args#2=106, args#3=..., args#4=@0x7fffdb3f9600: 1640606419828691) at ../../rtc_base/third_party/sigslot/sigslot.h:570 #28 0x00005555573475ff in rtc::AsyncUDPSocket::OnReadEvent(rtc::Socket*) (this=0x7fffc0009fa0, socket=0x7fffc00096e8)at ../../rtc_base/async_udp_socket.cc:132 #29 0x00005555573477e9 in sigslot::_opaque_connection::emitter<rtc::AsyncUDPSocket, rtc::Socket*>(sigslot::_opaque_connection const*, rtc::Socket*)(self=0x7fffc0009b70) at ../../rtc_base/third_party/sigslot/sigslot.h:342 #30 0x000055555604eb9d in sigslot::_opaque_connection::emit<rtc::Socket*>(rtc::Socket*) const (this=0x7fffc0009b70)at ../../rtc_base/third_party/sigslot/sigslot.h:331 #31 0x000055555604d8e6 in sigslot::signal_with_thread_policy<sigslot::multi_threaded_local, rtc::Socket*>::emit(rtc::Socket*)(this=0x7fffc00096f0, args#0=0x7fffc00096e8) at ../../rtc_base/third_party/sigslot/sigslot.h:566 #32 0x000055555604ccb5 in sigslot::signal_with_thread_policy<sigslot::multi_threaded_local, rtc::Socket*>::operator()(rtc::Socket*)(this=0x7fffc00096f0, args#0=0x7fffc00096e8) at ../../rtc_base/third_party/sigslot/sigslot.h:570 #33 0x0000555556047f11 in rtc::SocketDispatcher::OnEvent(unsigned int, int) (this=0x7fffc00096e0, ff=1, err=0)at ../../rtc_base/physical_socket_server.cc:831 #34 0x00005555560492d4 in rtc::ProcessEvents(rtc::Dispatcher*, bool, bool, bool)(dispatcher=0x7fffc00096e0, readable=true, writable=false, check_error=false) at ../../rtc_base/physical_socket_server.cc:1222 #35 0x000055555604b232 in rtc::PhysicalSocketServer::WaitEpoll(int) (this=0x7fffe4002cd0, cmsWait=42) at ../../rtc_base/physical_socket_server.cc:1454 #36 0x0000555556049193 in rtc::PhysicalSocketServer::Wait(int, bool) (this=0x7fffe4002cd0, cmsWait=42, process_io=true)at ../../rtc_base/physical_socket_server.cc:1169 #37 0x00005555560546a0 in rtc::Thread::Get(rtc::Message*, int, bool) (this=0x7fffe4001820, pmsg=0x7fffdb3f9ab0, cmsWait=-1, process_io=true)at ../../rtc_base/thread.cc:547

第二階段,將接收到的音頻 RTP 包異步插入 NetEQ 的包緩沖區里。

#0 webrtc::NetEqImpl::InsertPacketInternal(webrtc::RTPHeader const&, rtc::ArrayView<unsigned char const, -4711l>)(this=0x7fffc0094a80, rtp_header=..., payload=...) at ../../modules/audio_coding/neteq/neteq_impl.cc:563 #1 0x00005555569d7cbb in webrtc::NetEqImpl::InsertPacket(webrtc::RTPHeader const&, rtc::ArrayView<unsigned char const, -4711l>) (this=0x7fffc0094a80, rtp_header=..., payload=...) at ../../modules/audio_coding/neteq/neteq_impl.cc:192 #2 0x00005555569c5425 in webrtc::acm2::AcmReceiver::InsertPacket(webrtc::RTPHeader const&, rtc::ArrayView<unsigned char const, -4711l>) (this=0x7fffc009a958, rtp_header=..., incoming_payload=...) at ../../modules/audio_coding/acm2/acm_receiver.cc:136 #3 0x00005555569a0e4a in webrtc::voe::(anonymous namespace)::ChannelReceive::OnReceivedPayloadData(rtc::ArrayView<unsigned char const, -4711>, webrtc::RTPHeader const&) (this=0x7fffc009a790, payload=..., rtpHeader=...)at ../../audio/channel_receive.cc:340 #4 0x00005555569a48a3 in webrtc::voe::(anonymous namespace)::ChannelReceive::ReceivePacket(uint8_t const*, size_t, webrtc::RTPHeader const&)(this=0x7fffc009a790, packet=0x7fffe0069600 "\220o\003\227\372l\023\347?A(\276", <incomplete sequence \336>, packet_length=80, header=...) at ../../audio/channel_receive.cc:719 #5 0x00005555569a41bc in webrtc::voe::(anonymous namespace)::ChannelReceive::OnRtpPacket(webrtc::RtpPacketReceived const&)(this=0x7fffc009a790, packet=...) at ../../audio/channel_receive.cc:669 #6 0x00005555568bec90 in webrtc::RtpDemuxer::OnRtpPacket(webrtc::RtpPacketReceived const&) (this=0x7fffc0090340, packet=...)at ../../call/rtp_demuxer.cc:249 #7 0x00005555568bae55 in webrtc::RtpStreamReceiverController::OnRtpPacket(webrtc::RtpPacketReceived const&)(this=0x7fffc00902e0, packet=...) at ../../call/rtp_stream_receiver_controller.cc:52 #8 0x0000555556879062 in webrtc::internal::Call::DeliverRtp(webrtc::MediaType, rtc::CopyOnWriteBuffer, long)(this=0x7fffc0090090, media_type=webrtc::MediaType::AUDIO, packet=..., packet_time_us=1640601570497083)at ../../call/call.cc:1587 #9 0x0000555556879641 in webrtc::internal::Call::DeliverPacket(webrtc::MediaType, rtc::CopyOnWriteBuffer, long)(this=0x7fffc0090090, media_type=webrtc::MediaType::AUDIO, packet=..., packet_time_us=1640601570497083)at ../../call/call.cc:1618 #10 0x00005555560ebede in cricket::WebRtcVoiceMediaChannel::<lambda()>::operator()(void) const (__closure=0x7fffe005a768)at ../../media/engine/webrtc_voice_engine.cc:2229 #11 0x00005555560f2b74 in webrtc::webrtc_new_closure_impl::SafetyClosureTask<cricket::WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer, int64_t)::<lambda()> >::Run(void) (this=0x7fffe005a760)at ../../rtc_base/task_utils/to_queued_task.h:50 #12 0x00005555560575f4 in rtc::Thread::QueuedTaskHandler::OnMessage(rtc::Message*) (this=0x7fffe4002728, msg=0x7fffdb3f9ab0)at ../../rtc_base/thread.cc:1042 #13 0x0000555556055398 in rtc::Thread::Dispatch(rtc::Message*) (this=0x7fffe4002600, pmsg=0x7fffdb3f9ab0)at ../../rtc_base/thread.cc:711 #14 0x000055555605842a in rtc::Thread::ProcessMessages(int) (this=0x7fffe4002600, cmsLoop=-1) at ../../rtc_base/thread.cc:1149 #15 0x000055555605694f in rtc::Thread::Run() (this=0x7fffe4002600) at ../../rtc_base/thread.cc:901 #16 0x0000555556056914 in rtc::Thread::PreRun(void*) (pv=0x7fffe4002600) at ../../rtc_base/thread.cc:890 #17 0x00007ffff7e55609 in start_thread (arg=<optimized out>) at pthread_create.c:477

第三階段,播放線程從 NetEQ 里獲取音頻包,解碼并播放出來。

#0 webrtc::NetEqImpl::GetAudioInternal(webrtc::AudioFrame*, bool*, absl::optional<webrtc::NetEq::Operation>)(this=0x0, audio_frame=0x0, muted=0x0, action_override=...) at ../../modules/audio_coding/neteq/neteq_impl.cc:836 #1 0x00005555569d804f in webrtc::NetEqImpl::GetAudio(webrtc::AudioFrame*, bool*, int*, absl::optional<webrtc::NetEq::Operation>)(this=0x7fffc4094ab0, audio_frame=0x7fffc4100b60, muted=0x7fffcd9f3aa7, current_sample_rate_hz=0x7fffcd9efc40, action_override=...)at ../../modules/audio_coding/neteq/neteq_impl.cc:261 #2 0x00005555569c5896 in webrtc::acm2::AcmReceiver::GetAudio(int, webrtc::AudioFrame*, bool*)(this=0x7fffc409a958, desired_freq_hz=16000, audio_frame=0x7fffc4100b60, muted=0x7fffcd9f3aa7)at ../../modules/audio_coding/acm2/acm_receiver.cc:151 #3 0x00005555569a1d8b in webrtc::voe::(anonymous namespace)::ChannelReceive::GetAudioFrameWithInfo(int, webrtc::AudioFrame*)(this=0x7fffc409a790, sample_rate_hz=16000, audio_frame=0x7fffc4100b60) at ../../audio/channel_receive.cc:388 #4 0x0000555556984783 in webrtc::internal::AudioReceiveStream::GetAudioFrameWithInfo(int, webrtc::AudioFrame*)(this=0x7fffc409a530, sample_rate_hz=16000, audio_frame=0x7fffc4100b60) at ../../audio/audio_receive_stream.cc:393 #5 0x0000555556b5c3d9 in webrtc::AudioMixerImpl::GetAudioFromSources(int) (this=0x7fffc40208f0, output_frequency=16000)at ../../modules/audio_mixer/audio_mixer_impl.cc:205 #6 0x0000555556b5be4c in webrtc::AudioMixerImpl::Mix(unsigned long, webrtc::AudioFrame*)(this=0x7fffc40208f0, number_of_channels=2, audio_frame_for_mixing=0x7fffc4025068) at ../../modules/audio_mixer/audio_mixer_impl.cc:175 #7 0x000055555699ef20 in webrtc::AudioTransportImpl::NeedMorePlayData(unsigned long, unsigned long, unsigned long, unsigned int, void*, unsigned long&, long*, long*)(this=0x7fffc4024f60, nSamples=441, nBytesPerSample=4, nChannels=2, samplesPerSec=44100, audioSamples=0x7fff94001030, nSamplesOut=@0x7fffcd9f4348: 0, elapsed_time_ms=0x7fffcd9f4350, ntp_time_ms=0x7fffcd9f4358) at ../../audio/audio_transport_impl.cc:215 #8 0x00005555565b7e9b in webrtc::AudioDeviceBuffer::RequestPlayoutData(unsigned long) (this=0x7fffc4002c28, samples_per_channel=441)at ../../modules/audio_device/audio_device_buffer.cc:302 #9 0x00005555565aa394 in webrtc::AudioDeviceLinuxPulse::PlayThreadProcess() (this=0x7fffc4004de0)at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:2106 #10 0x000055555659e52d in webrtc::AudioDeviceLinuxPulse::<lambda()>::operator()(void) const (__closure=0x7fffc4007890)at ../../modules/audio_device/linux/audio_device_pulse_linux.cc:174 #11 0x00005555565ac068 in std::_Function_handler<void(), webrtc::AudioDeviceLinuxPulse::Init()::<lambda()> >::_M_invoke(const std::_Any_data &)(__functor=...) at /usr/include/c++/9/bits/std_function.h:300

這里還想要捋出來 WebRTC 中音頻發送和接收處理過程,各個部分的邊界。WebRTC 的整體架構大概如下圖所示:

最下層的是媒體處理核心功能模塊,上面是媒體引擎, 再上面是 PeerConnection 和 API,此外,WebRTC 還提供了大量的基礎組件,如 socket,線程,鎖 等等等。前面我們說明的音頻發送和接收處理過程,除了最后 6. 音頻數據包的發送處理7. 音頻數據包的接收處理 兩個過程,其它都完全屬于 PeerConnection。對于 6. 音頻數據包的發送處理 過程,通過 BaseChannel 實現 MediaChannel::NetworkInterface 接口,并注冊給 MediaChannel,將 PeerConnection 的發送能力和媒體處理核心功能組件連接起來。對于接收處理過程,邊界則在 RtpTransport::DemuxPacket(),RtpTransport 是 PeerConnection 傳輸引擎的一部分,它通過 webrtc::RtpDemuxer 將收到的音頻包送進核心的媒體處理功能中去。

總結

以上是生活随笔為你收集整理的WebRTC 音频发送和接收处理过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99久久婷婷国产综合精品青草免费 | 狠狠躁日日躁夜夜躁2020 | 日日麻批免费40分钟无码 | √天堂资源地址中文在线 | 国产激情无码一区二区 | 成人无码影片精品久久久 | 福利一区二区三区视频在线观看 | 国产69精品久久久久app下载 | 亚洲中文字幕va福利 | 免费人成在线视频无码 | 激情人妻另类人妻伦 | 精品无人区无码乱码毛片国产 | 久久精品人妻少妇一区二区三区 | 国产乱人偷精品人妻a片 | 麻豆国产97在线 | 欧洲 | 岛国片人妻三上悠亚 | 久久久久久国产精品无码下载 | 老熟妇乱子伦牲交视频 | 丝袜 中出 制服 人妻 美腿 | 亚洲色大成网站www国产 | 人人妻人人澡人人爽精品欧美 | 亚洲小说春色综合另类 | 清纯唯美经典一区二区 | 大色综合色综合网站 | 国精产品一品二品国精品69xx | 日韩精品久久久肉伦网站 | 日本精品人妻无码免费大全 | 亚洲春色在线视频 | 人妻无码久久精品人妻 | 乱码av麻豆丝袜熟女系列 | 国产精品亚洲专区无码不卡 | 久久久久久久女国产乱让韩 | 黑人巨大精品欧美一区二区 | 奇米影视7777久久精品人人爽 | 人人澡人人妻人人爽人人蜜桃 | 日韩欧美中文字幕公布 | 国产高清不卡无码视频 | 免费观看黄网站 | 伦伦影院午夜理论片 | 撕开奶罩揉吮奶头视频 | 永久免费观看美女裸体的网站 | 九月婷婷人人澡人人添人人爽 | 国产一区二区三区精品视频 | 国产情侣作爱视频免费观看 | 国产精品a成v人在线播放 | 久久国产精品萌白酱免费 | 国产午夜亚洲精品不卡下载 | 丝袜足控一区二区三区 | 在线a亚洲视频播放在线观看 | 免费网站看v片在线18禁无码 | www成人国产高清内射 | 人妻少妇精品久久 | 无码av岛国片在线播放 | 国产精品无码mv在线观看 | 日韩欧美中文字幕在线三区 | 一二三四在线观看免费视频 | 国产农村妇女高潮大叫 | 狠狠色色综合网站 | 国产手机在线αⅴ片无码观看 | 六十路熟妇乱子伦 | 国产成人人人97超碰超爽8 | 亚洲精品一区二区三区四区五区 | 无码人妻精品一区二区三区下载 | 中文字幕av日韩精品一区二区 | 欧美日韩亚洲国产精品 | 国产亚洲人成在线播放 | 精品无码一区二区三区的天堂 | 乱码av麻豆丝袜熟女系列 | 国产国产精品人在线视 | 国产精品久免费的黄网站 | 日日麻批免费40分钟无码 | 久久久久免费看成人影片 | 欧美三级不卡在线观看 | 天堂在线观看www | 台湾无码一区二区 | 午夜丰满少妇性开放视频 | 少妇的肉体aa片免费 | 亚洲aⅴ无码成人网站国产app | av在线亚洲欧洲日产一区二区 | 熟妇人妻无码xxx视频 | 欧美老熟妇乱xxxxx | 国产成人无码午夜视频在线观看 | 国产无遮挡又黄又爽免费视频 | 国产亚洲精品久久久久久久 | 国产av一区二区三区最新精品 | 98国产精品综合一区二区三区 | 国产成人综合在线女婷五月99播放 | 国产午夜精品一区二区三区嫩草 | 亚洲热妇无码av在线播放 | 国产成人无码av一区二区 | 少妇人妻偷人精品无码视频 | 午夜福利不卡在线视频 | 高潮毛片无遮挡高清免费 | 未满成年国产在线观看 | 国产精品亚洲专区无码不卡 | 福利一区二区三区视频在线观看 | 国模大胆一区二区三区 | 久久无码专区国产精品s | 东京热一精品无码av | 日本va欧美va欧美va精品 | 国产在线精品一区二区三区直播 | 久久亚洲国产成人精品性色 | 日日摸日日碰夜夜爽av | 免费中文字幕日韩欧美 | 亚洲国精产品一二二线 | 国产午夜无码视频在线观看 | 欧美激情一区二区三区成人 | 欧洲精品码一区二区三区免费看 | 国产另类ts人妖一区二区 | 午夜福利试看120秒体验区 | 精品夜夜澡人妻无码av蜜桃 | 国产精品高潮呻吟av久久 | 国产两女互慰高潮视频在线观看 | 精品 日韩 国产 欧美 视频 | 国产精品香蕉在线观看 | 99久久亚洲精品无码毛片 | 国产精品亚洲专区无码不卡 | 中国大陆精品视频xxxx | 亚洲欧美日韩成人高清在线一区 | 久9re热视频这里只有精品 | 国产无遮挡又黄又爽又色 | 久久精品中文字幕一区 | 色欲人妻aaaaaaa无码 | 亚洲综合色区中文字幕 | 亚洲一区二区三区播放 | 在线观看国产一区二区三区 | 色爱情人网站 | 亚洲日韩中文字幕在线播放 | 激情内射日本一区二区三区 | 久久久久久九九精品久 | 亚洲一区二区三区四区 | 51国偷自产一区二区三区 | 国产成人av免费观看 | 久久久久亚洲精品男人的天堂 | 十八禁视频网站在线观看 | 国产口爆吞精在线视频 | 国产后入清纯学生妹 | 乱码av麻豆丝袜熟女系列 | www国产亚洲精品久久久日本 | 色婷婷久久一区二区三区麻豆 | av香港经典三级级 在线 | 日日碰狠狠躁久久躁蜜桃 | 亚洲综合在线一区二区三区 | 亚洲综合精品香蕉久久网 | 99久久久无码国产aaa精品 | 丰满人妻一区二区三区免费视频 | 国产成人av免费观看 | 小泽玛莉亚一区二区视频在线 | 7777奇米四色成人眼影 | 国产精品香蕉在线观看 | 国产农村妇女高潮大叫 | 国产精华av午夜在线观看 | 天堂а√在线中文在线 | 77777熟女视频在线观看 а天堂中文在线官网 | 97久久精品无码一区二区 | 好男人社区资源 | 美女扒开屁股让男人桶 | 亚洲呦女专区 | 国产免费无码一区二区视频 | 综合网日日天干夜夜久久 | 台湾无码一区二区 | 男女爱爱好爽视频免费看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 日本在线高清不卡免费播放 | 99视频精品全部免费免费观看 | 又大又黄又粗又爽的免费视频 | 九月婷婷人人澡人人添人人爽 | 国产热a欧美热a在线视频 | 男人扒开女人内裤强吻桶进去 | 中文字幕无码日韩专区 | 国产亚洲精品久久久久久久 | 日韩欧美中文字幕在线三区 | 秋霞成人午夜鲁丝一区二区三区 | 76少妇精品导航 | 国产黑色丝袜在线播放 | 国产精品久久久 | 国产精品久久久久久久影院 | 国内丰满熟女出轨videos | 国产精品毛片一区二区 | 日韩人妻无码一区二区三区久久99 | 国产精品99爱免费视频 | 又粗又大又硬又长又爽 | 日韩人妻无码中文字幕视频 | 国产三级久久久精品麻豆三级 | 欧美自拍另类欧美综合图片区 | 日韩成人一区二区三区在线观看 | 漂亮人妻洗澡被公强 日日躁 | 国产成人无码区免费内射一片色欲 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品手机免费 | 亚洲另类伦春色综合小说 | 欧美人与禽猛交狂配 | 青青久在线视频免费观看 | 奇米影视7777久久精品 | 婷婷五月综合缴情在线视频 | 国产va免费精品观看 | 水蜜桃av无码 | 成人免费无码大片a毛片 | 欧美激情内射喷水高潮 | 2019午夜福利不卡片在线 | 樱花草在线播放免费中文 | 扒开双腿吃奶呻吟做受视频 | 美女黄网站人色视频免费国产 | 国产香蕉尹人视频在线 | 国产人妻人伦精品 | 女人被男人躁得好爽免费视频 | 免费无码午夜福利片69 | 女人和拘做爰正片视频 | 色窝窝无码一区二区三区色欲 | 欧美性色19p | 在线观看国产午夜福利片 | 综合网日日天干夜夜久久 | 欧美日韩视频无码一区二区三 | av人摸人人人澡人人超碰下载 | 久久人人爽人人人人片 | 亚洲中文字幕在线观看 | 国产午夜福利亚洲第一 | 思思久久99热只有频精品66 | 天堂亚洲2017在线观看 | 大地资源网第二页免费观看 | 波多野结衣 黑人 | 少妇高潮喷潮久久久影院 | 亚洲中文无码av永久不收费 | 精品亚洲成av人在线观看 | 99久久人妻精品免费一区 | 大屁股大乳丰满人妻 | 内射欧美老妇wbb | 国产9 9在线 | 中文 | 国产真人无遮挡作爱免费视频 | 亚洲s码欧洲m码国产av | 国产高清不卡无码视频 | 伊人久久大香线蕉av一区二区 | 欧美性色19p | 牲欲强的熟妇农村老妇女 | 亚洲人成网站在线播放942 | 欧美freesex黑人又粗又大 | 欧美人与动性行为视频 | 久久99精品国产麻豆 | 玩弄中年熟妇正在播放 | 精品国产青草久久久久福利 | 狠狠躁日日躁夜夜躁2020 | 亚洲日韩av一区二区三区四区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 99久久久国产精品无码免费 | 55夜色66夜色国产精品视频 | 日日橹狠狠爱欧美视频 | 国产成人av免费观看 | 日本乱偷人妻中文字幕 | 丝袜人妻一区二区三区 | 无遮挡国产高潮视频免费观看 | 娇妻被黑人粗大高潮白浆 | 无遮挡啪啪摇乳动态图 | 久久久久久a亚洲欧洲av冫 | 国产精品99久久精品爆乳 | 中文字幕人成乱码熟女app | 熟妇人妻无乱码中文字幕 | 日日碰狠狠躁久久躁蜜桃 | 亚洲日本一区二区三区在线 | 日产精品99久久久久久 | 人妻少妇精品无码专区二区 | 性色欲网站人妻丰满中文久久不卡 | 精品国产av色一区二区深夜久久 | 日韩在线不卡免费视频一区 | 精品无码一区二区三区的天堂 | 亚洲国产av美女网站 | 日日躁夜夜躁狠狠躁 | 一本久久a久久精品亚洲 | 国产精品亚洲lv粉色 | 国产无套粉嫩白浆在线 | 国产成人精品一区二区在线小狼 | 亚洲春色在线视频 | 色一情一乱一伦一视频免费看 | 人人澡人摸人人添 | 国产情侣作爱视频免费观看 | 国产凸凹视频一区二区 | 久久亚洲a片com人成 | 国产亚洲美女精品久久久2020 | 日产国产精品亚洲系列 | 国产人妻人伦精品 | 国产av人人夜夜澡人人爽麻豆 | 在线视频网站www色 | 中文字幕亚洲情99在线 | 性色欲情网站iwww九文堂 | 婷婷五月综合激情中文字幕 | 精品乱码久久久久久久 | 在线欧美精品一区二区三区 | 少妇性l交大片 | 波多野结衣高清一区二区三区 | 97se亚洲精品一区 | 强开小婷嫩苞又嫩又紧视频 | 亚洲欧美日韩成人高清在线一区 | 国内少妇偷人精品视频免费 | 一本无码人妻在中文字幕免费 | 欧美兽交xxxx×视频 | 亚洲自偷自偷在线制服 | 成人免费视频在线观看 | 丝袜足控一区二区三区 | 久久无码人妻影院 | 一区二区三区乱码在线 | 欧洲 | 真人与拘做受免费视频一 | 中文字幕日韩精品一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 国产免费无码一区二区视频 | 色综合久久久无码中文字幕 | 在线观看免费人成视频 | 麻豆国产丝袜白领秘书在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品无套呻吟在线 | 成人三级无码视频在线观看 | 久久精品国产一区二区三区 | 免费观看又污又黄的网站 | 国产精品手机免费 | 国产精品无套呻吟在线 | 亚洲狠狠婷婷综合久久 | 亚洲一区二区三区在线观看网站 | 综合激情五月综合激情五月激情1 | 亚洲码国产精品高潮在线 | 精品国产精品久久一区免费式 | 波多野结衣高清一区二区三区 | 成人免费视频一区二区 | 双乳奶水饱满少妇呻吟 | 狠狠色丁香久久婷婷综合五月 | 亚洲午夜久久久影院 | 欧美35页视频在线观看 | 真人与拘做受免费视频 | 国产精品无码一区二区三区不卡 | 熟女俱乐部五十路六十路av | 午夜免费福利小电影 | 88国产精品欧美一区二区三区 | 日韩精品久久久肉伦网站 | 又粗又大又硬毛片免费看 | 97无码免费人妻超级碰碰夜夜 | 国产无遮挡又黄又爽免费视频 | 亚洲国产精品久久久天堂 | 国内精品人妻无码久久久影院蜜桃 | 日本www一道久久久免费榴莲 | 99国产欧美久久久精品 | 亚洲精品中文字幕乱码 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 成人欧美一区二区三区黑人 | 国产亚洲精品久久久久久 | 久久亚洲国产成人精品性色 | 成人精品视频一区二区三区尤物 | 亚洲中文字幕成人无码 | 久久99久久99精品中文字幕 | 亚洲国产成人a精品不卡在线 | 国产精品无码成人午夜电影 | 欧美人与禽猛交狂配 | 中文字幕无码av激情不卡 | 国产精品爱久久久久久久 | 亚洲 a v无 码免 费 成 人 a v | 曰韩无码二三区中文字幕 | 性生交大片免费看l | 伊在人天堂亚洲香蕉精品区 | 国产人妻精品一区二区三区 | 大肉大捧一进一出视频出来呀 | 学生妹亚洲一区二区 | 国产精品igao视频网 | 精品久久久无码人妻字幂 | 亚洲性无码av中文字幕 | 亚洲精品国产品国语在线观看 | 人妻少妇精品无码专区二区 | 性欧美大战久久久久久久 | 性做久久久久久久久 | 精品国产一区二区三区av 性色 | 国产精品自产拍在线观看 | 青春草在线视频免费观看 | 内射老妇bbwx0c0ck | 扒开双腿疯狂进出爽爽爽视频 | 久久久无码中文字幕久... | 少妇激情av一区二区 | 久久精品国产大片免费观看 | 国产免费久久精品国产传媒 | 精品国产一区av天美传媒 | 麻豆精品国产精华精华液好用吗 | 久久久成人毛片无码 | 国产9 9在线 | 中文 | 丰满少妇熟乱xxxxx视频 | 久久久精品欧美一区二区免费 | 亚洲欧美日韩国产精品一区二区 | 清纯唯美经典一区二区 | 亚洲精品国产精品乱码视色 | 又大又硬又爽免费视频 | 大肉大捧一进一出视频出来呀 | 高清国产亚洲精品自在久久 | 夜精品a片一区二区三区无码白浆 | 免费看少妇作爱视频 | 丰满少妇高潮惨叫视频 | 99久久人妻精品免费一区 | 亚洲乱码中文字幕在线 | 狠狠噜狠狠狠狠丁香五月 | 丰满护士巨好爽好大乳 | 捆绑白丝粉色jk震动捧喷白浆 | 成人影院yy111111在线观看 | 国内揄拍国内精品少妇国语 | 精品一二三区久久aaa片 | 亚洲一区二区三区在线观看网站 | 欧美 亚洲 国产 另类 | 狂野欧美激情性xxxx | 又粗又大又硬又长又爽 | av无码久久久久不卡免费网站 | 国产无遮挡吃胸膜奶免费看 | 国产亚av手机在线观看 | 国产精品永久免费视频 | 日韩人妻无码一区二区三区久久99 | 波多野结衣高清一区二区三区 | 欧美熟妇另类久久久久久不卡 | 国产内射老熟女aaaa | 精品国偷自产在线 | 日本大香伊一区二区三区 | 18禁止看的免费污网站 | 亚洲国产欧美国产综合一区 | 欧美xxxxx精品 | 97色伦图片97综合影院 | 白嫩日本少妇做爰 | 熟妇激情内射com | 日韩无套无码精品 | 老熟妇乱子伦牲交视频 | 久久国产36精品色熟妇 | 国产激情艳情在线看视频 | 福利一区二区三区视频在线观看 | 国产熟女一区二区三区四区五区 | 日本又色又爽又黄的a片18禁 | 亚洲精品一区二区三区婷婷月 | 欧美猛少妇色xxxxx | 女人被男人躁得好爽免费视频 | 亚洲国产精品久久久天堂 | 成熟妇人a片免费看网站 | 国产午夜福利100集发布 | 激情内射日本一区二区三区 | 国产精品久久久久影院嫩草 | 国产成人精品久久亚洲高清不卡 | 青青青手机频在线观看 | 大屁股大乳丰满人妻 | 鲁一鲁av2019在线 | 荫蒂被男人添的好舒服爽免费视频 | 国产内射老熟女aaaa | 狠狠综合久久久久综合网 | 精品久久综合1区2区3区激情 | www国产亚洲精品久久久日本 | 亚洲色大成网站www国产 | 亚洲色无码一区二区三区 | 六十路熟妇乱子伦 | 狠狠躁日日躁夜夜躁2020 | 国产成人午夜福利在线播放 | 色五月丁香五月综合五月 | 久久无码中文字幕免费影院蜜桃 | 国产精品无码一区二区桃花视频 | 无码av最新清无码专区吞精 | 亚洲精品午夜国产va久久成人 | 76少妇精品导航 | 青春草在线视频免费观看 | 日日碰狠狠躁久久躁蜜桃 | 国产偷自视频区视频 | 久久精品99久久香蕉国产色戒 | 中文字幕乱妇无码av在线 | 亚洲成av人综合在线观看 | 丰满少妇高潮惨叫视频 | 欧美丰满少妇xxxx性 | 国产亚洲视频中文字幕97精品 | 永久免费观看国产裸体美女 | 久久aⅴ免费观看 | 色噜噜亚洲男人的天堂 | 久青草影院在线观看国产 | 99精品无人区乱码1区2区3区 | 少妇一晚三次一区二区三区 | 久久精品一区二区三区四区 | 无码成人精品区在线观看 | 国产乡下妇女做爰 | 国产精品无码久久av | 中文久久乱码一区二区 | 欧美zoozzooz性欧美 | 色综合久久88色综合天天 | 亚洲国产精品无码一区二区三区 | 日日天日日夜日日摸 | 中文字幕av伊人av无码av | 国产精品对白交换视频 | 亚洲精品一区二区三区四区五区 | 国产精品办公室沙发 | 99精品国产综合久久久久五月天 | 激情国产av做激情国产爱 | 77777熟女视频在线观看 а天堂中文在线官网 | 免费视频欧美无人区码 | 国产va免费精品观看 | 久久99精品国产麻豆蜜芽 | 久久97精品久久久久久久不卡 | 免费无码午夜福利片69 | 亚洲成a人片在线观看日本 | 精品久久久久久亚洲精品 | 国内精品人妻无码久久久影院 | 国产av剧情md精品麻豆 | 国产精品久久福利网站 | 一本一道久久综合久久 | 欧美丰满老熟妇xxxxx性 | 国产舌乚八伦偷品w中 | 男女猛烈xx00免费视频试看 | 亚洲成a人片在线观看无码 | 久久zyz资源站无码中文动漫 | 色偷偷人人澡人人爽人人模 | 欧美性猛交xxxx富婆 | 免费视频欧美无人区码 | 亚洲中文字幕久久无码 | 亚洲热妇无码av在线播放 | 丰腴饱满的极品熟妇 | 激情内射日本一区二区三区 | 正在播放东北夫妻内射 | 超碰97人人射妻 | 人人爽人人澡人人人妻 | 日本肉体xxxx裸交 | www国产亚洲精品久久网站 | 又大又紧又粉嫩18p少妇 | 黑人大群体交免费视频 | 亚洲精品午夜无码电影网 | 玩弄人妻少妇500系列视频 | 久久无码专区国产精品s | 人人妻人人藻人人爽欧美一区 | 麻豆果冻传媒2021精品传媒一区下载 | 麻豆md0077饥渴少妇 | 最近免费中文字幕中文高清百度 | 永久免费观看国产裸体美女 | 一本久道久久综合狠狠爱 | 老熟妇仑乱视频一区二区 | 男人的天堂av网站 | 久久久精品人妻久久影视 | 国产欧美精品一区二区三区 | 夜夜高潮次次欢爽av女 | 成人影院yy111111在线观看 | 国产色精品久久人妻 | 国产精品第一区揄拍无码 | 亚洲成a人片在线观看日本 | 综合人妻久久一区二区精品 | 国产亚av手机在线观看 | 一区二区三区高清视频一 | 成人性做爰aaa片免费看不忠 | 青草视频在线播放 | 久久久久久a亚洲欧洲av冫 | 亚洲人成无码网www | 亚洲精品无码人妻无码 | 人妻无码αv中文字幕久久琪琪布 | 亚欧洲精品在线视频免费观看 | 丝袜人妻一区二区三区 | 男女性色大片免费网站 | 国产成人人人97超碰超爽8 | 国产口爆吞精在线视频 | 欧美熟妇另类久久久久久多毛 | 中文字幕av日韩精品一区二区 | 麻豆成人精品国产免费 | 骚片av蜜桃精品一区 | 欧美精品一区二区精品久久 | 亚洲精品成人av在线 | 国产又爽又黄又刺激的视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲精品久久久久中文第一幕 | 国产成人人人97超碰超爽8 | 特黄特色大片免费播放器图片 | 免费观看黄网站 | 久久国产精品_国产精品 | 久久精品国产日本波多野结衣 | 成人片黄网站色大片免费观看 | 三上悠亚人妻中文字幕在线 | 国产偷国产偷精品高清尤物 | 岛国片人妻三上悠亚 | 18禁黄网站男男禁片免费观看 | 日本熟妇浓毛 | 国产精品亚洲综合色区韩国 | 国产精品办公室沙发 | 精品久久久中文字幕人妻 | 国产精品无套呻吟在线 | 又色又爽又黄的美女裸体网站 | 97se亚洲精品一区 | 国产熟女一区二区三区四区五区 | 熟妇激情内射com | 国产sm调教视频在线观看 | 欧美xxxxx精品 | 国产精品二区一区二区aⅴ污介绍 | 日韩在线不卡免费视频一区 | 亲嘴扒胸摸屁股激烈网站 | 一区二区传媒有限公司 | 日韩少妇内射免费播放 | 99riav国产精品视频 | 久久久久99精品成人片 | 日日摸天天摸爽爽狠狠97 | 亚洲色无码一区二区三区 | 成人欧美一区二区三区 | 国产精品永久免费视频 | 天天躁夜夜躁狠狠是什么心态 | 久久视频在线观看精品 | 日本乱偷人妻中文字幕 | 亚洲精品一区二区三区在线观看 | 亚洲中文字幕在线无码一区二区 | 男女猛烈xx00免费视频试看 | 美女扒开屁股让男人桶 | 亚洲人成人无码网www国产 | 天天燥日日燥 | 亚洲色偷偷男人的天堂 | а√资源新版在线天堂 | 中文字幕无码av激情不卡 | 狠狠噜狠狠狠狠丁香五月 | 色五月丁香五月综合五月 | 在线欧美精品一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 成人免费无码大片a毛片 | 老熟女重囗味hdxx69 | 国产精品高潮呻吟av久久 | 中国女人内谢69xxxxxa片 | 久久精品人妻少妇一区二区三区 | 奇米影视888欧美在线观看 | 久久精品国产精品国产精品污 | 欧洲vodafone精品性 | 呦交小u女精品视频 | 中文亚洲成a人片在线观看 | 亚洲中文字幕在线无码一区二区 | 色 综合 欧美 亚洲 国产 | 欧美一区二区三区视频在线观看 | 国产亚洲人成a在线v网站 | 最新国产麻豆aⅴ精品无码 | 久久天天躁夜夜躁狠狠 | 亚洲大尺度无码无码专区 | 精品国产青草久久久久福利 | 夜夜高潮次次欢爽av女 | 精品国产青草久久久久福利 | 精品一区二区不卡无码av | 人人澡人人透人人爽 | 十八禁视频网站在线观看 | 欧美freesex黑人又粗又大 | 人妻无码αv中文字幕久久琪琪布 | 欧美日韩一区二区综合 | 人人爽人人澡人人高潮 | 亚洲春色在线视频 | 日韩亚洲欧美精品综合 | 性欧美videos高清精品 | 熟妇人妻无乱码中文字幕 | 少妇高潮喷潮久久久影院 | 窝窝午夜理论片影院 | 日韩精品成人一区二区三区 | 国产电影无码午夜在线播放 | 欧洲熟妇精品视频 | 亚洲熟女一区二区三区 | 丰满少妇弄高潮了www | 18禁黄网站男男禁片免费观看 | 麻豆国产丝袜白领秘书在线观看 | 一本一道久久综合久久 | 熟女俱乐部五十路六十路av | 色欲综合久久中文字幕网 | 在线a亚洲视频播放在线观看 | 两性色午夜视频免费播放 | 两性色午夜视频免费播放 | 无码人妻精品一区二区三区不卡 | 国产精品国产三级国产专播 | 亚洲日本va中文字幕 | 国产精品久久久久无码av色戒 | 国产97色在线 | 免 | 中文字幕乱码人妻无码久久 | 国产成人无码av一区二区 | 日本一本二本三区免费 | 蜜桃无码一区二区三区 | 熟妇人妻无乱码中文字幕 | 无码av岛国片在线播放 | 无码任你躁久久久久久久 | 国产美女极度色诱视频www | 四虎永久在线精品免费网址 | 98国产精品综合一区二区三区 | 国产乱人无码伦av在线a | 窝窝午夜理论片影院 | 亚洲精品综合一区二区三区在线 | 免费无码一区二区三区蜜桃大 | 中文字幕无码免费久久99 | 少妇高潮喷潮久久久影院 | 正在播放老肥熟妇露脸 | 亚洲人成无码网www | 国产午夜无码精品免费看 | 免费人成网站视频在线观看 | 亚洲一区av无码专区在线观看 | 国产又爽又猛又粗的视频a片 | 国产综合在线观看 | 久久午夜无码鲁丝片秋霞 | 精品国产一区二区三区四区在线看 | 亚洲国产精品无码久久久久高潮 | 欧美猛少妇色xxxxx | 久久精品国产一区二区三区肥胖 | 性色av无码免费一区二区三区 | 国产香蕉97碰碰久久人人 | 在线观看国产一区二区三区 | av无码电影一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 一区二区传媒有限公司 | 亚洲s色大片在线观看 | 成人无码影片精品久久久 | 国产精品内射视频免费 | 成熟妇人a片免费看网站 | 永久免费观看美女裸体的网站 | 亚洲 另类 在线 欧美 制服 | 国产va免费精品观看 | 欧美日韩在线亚洲综合国产人 | 精品无码国产一区二区三区av | 日本熟妇浓毛 | 欧美阿v高清资源不卡在线播放 | 88国产精品欧美一区二区三区 | 学生妹亚洲一区二区 | 国产三级久久久精品麻豆三级 | 久久精品女人的天堂av | 成人精品一区二区三区中文字幕 | 成人精品天堂一区二区三区 | 亚洲色欲色欲欲www在线 | 国内精品久久久久久中文字幕 | 牲欲强的熟妇农村老妇女视频 | 人妻互换免费中文字幕 | 欧美日韩色另类综合 | 亚洲日本va午夜在线电影 | 欧美日韩视频无码一区二区三 | 亚洲综合另类小说色区 | 亚洲中文无码av永久不收费 | 成人无码视频在线观看网站 | 老子影院午夜精品无码 | 亚洲国产精品毛片av不卡在线 | 99精品视频在线观看免费 | 欧美乱妇无乱码大黄a片 | 日韩人妻无码一区二区三区久久99 | 欧洲欧美人成视频在线 | 一个人看的视频www在线 | 日韩欧美群交p片內射中文 | 久热国产vs视频在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久人人爽人人爽人人片av高清 | 国产九九九九九九九a片 | 亚洲国产av精品一区二区蜜芽 | 亚洲日本一区二区三区在线 | 国产人妻久久精品二区三区老狼 | 欧美老妇与禽交 | 国产99久久精品一区二区 | 性色欲网站人妻丰满中文久久不卡 | 欧美精品无码一区二区三区 | 国产精品无码永久免费888 | 性生交大片免费看女人按摩摩 | 国产性生交xxxxx无码 | 久久午夜无码鲁丝片午夜精品 | 熟女体下毛毛黑森林 | 高清无码午夜福利视频 | 天堂一区人妻无码 | 撕开奶罩揉吮奶头视频 | 成人一在线视频日韩国产 | 久久国语露脸国产精品电影 | 欧美丰满少妇xxxx性 | 亚洲色www成人永久网址 | 无码毛片视频一区二区本码 | www国产精品内射老师 | 色欲综合久久中文字幕网 | 亚洲第一无码av无码专区 | 乌克兰少妇xxxx做受 | 久久精品中文闷骚内射 | 欧美freesex黑人又粗又大 | 天堂在线观看www | 欧美性生交活xxxxxdddd | aⅴ亚洲 日韩 色 图网站 播放 | 成人免费视频视频在线观看 免费 | 亚洲中文字幕va福利 | 亚洲春色在线视频 | 国产无套粉嫩白浆在线 | 黑人粗大猛烈进出高潮视频 | 欧美精品一区二区精品久久 | 精品一二三区久久aaa片 | 久久久久久av无码免费看大片 | 男女超爽视频免费播放 | 国产精品高潮呻吟av久久4虎 | 色综合久久久久综合一本到桃花网 | 红桃av一区二区三区在线无码av | 伦伦影院午夜理论片 | 欧洲精品码一区二区三区免费看 | 人妻插b视频一区二区三区 | 国产明星裸体无码xxxx视频 | 99视频精品全部免费免费观看 | 两性色午夜视频免费播放 | 亚洲精品久久久久avwww潮水 | 精品久久久久久人妻无码中文字幕 | 色窝窝无码一区二区三区色欲 | 国产精品无码mv在线观看 | 蜜臀aⅴ国产精品久久久国产老师 | 国产亲子乱弄免费视频 | 中文字幕无码人妻少妇免费 | 色妞www精品免费视频 | 精品国产青草久久久久福利 | 久久精品丝袜高跟鞋 | 国产亚洲精品久久久久久久久动漫 | 成在人线av无码免费 | 国产又粗又硬又大爽黄老大爷视 | 人人爽人人澡人人人妻 | 国产成人一区二区三区在线观看 | 精品一区二区不卡无码av | 精品人妻人人做人人爽夜夜爽 | 性色av无码免费一区二区三区 | 日本又色又爽又黄的a片18禁 | 亚洲日本va中文字幕 | 国产手机在线αⅴ片无码观看 | а√资源新版在线天堂 | 国产97色在线 | 免 | 亚洲国产精品无码久久久久高潮 | 亚洲精品一区二区三区在线 | 无码精品国产va在线观看dvd | 一二三四社区在线中文视频 | 性啪啪chinese东北女人 | 99国产欧美久久久精品 | 亚洲国产av美女网站 | 成年美女黄网站色大免费视频 | 中文字幕无码免费久久99 | 综合网日日天干夜夜久久 | 亚洲欧洲无卡二区视頻 | 国产偷自视频区视频 | 奇米影视888欧美在线观看 | 成人片黄网站色大片免费观看 | 亚无码乱人伦一区二区 | 国产极品美女高潮无套在线观看 | 大色综合色综合网站 | 久久精品国产99久久6动漫 | 欧美黑人性暴力猛交喷水 | 日本成熟视频免费视频 | 国产又粗又硬又大爽黄老大爷视 | www成人国产高清内射 | 国产精品久久久av久久久 | 1000部夫妻午夜免费 | 午夜无码区在线观看 | 日本大乳高潮视频在线观看 | 呦交小u女精品视频 | 中文字幕人成乱码熟女app | 精品久久久中文字幕人妻 | 蜜桃臀无码内射一区二区三区 | 狂野欧美性猛交免费视频 | 成熟妇人a片免费看网站 | 国产精品亚洲а∨无码播放麻豆 | 高潮毛片无遮挡高清免费视频 | 亚洲熟妇色xxxxx亚洲 | 久久精品中文字幕一区 | 成人免费无码大片a毛片 | 亚洲а∨天堂久久精品2021 | 亚洲成a人片在线观看无码3d | 伊人久久大香线蕉av一区二区 | 最近免费中文字幕中文高清百度 | 日本饥渴人妻欲求不满 | 成人影院yy111111在线观看 | 久久99精品久久久久久动态图 | 一本无码人妻在中文字幕免费 | 国产偷国产偷精品高清尤物 | 男女作爱免费网站 | 国产av无码专区亚洲awww | 丰腴饱满的极品熟妇 | 亚洲精品综合五月久久小说 | 色婷婷久久一区二区三区麻豆 | 激情内射亚州一区二区三区爱妻 | 国产真实伦对白全集 | 极品尤物被啪到呻吟喷水 | 国产精品无套呻吟在线 | 熟妇人妻无码xxx视频 | 久青草影院在线观看国产 | 久久人人爽人人爽人人片av高清 | 久久亚洲中文字幕无码 | 高清国产亚洲精品自在久久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久久久久亚洲精品男人的天堂 | 久久久久免费精品国产 | 少妇高潮喷潮久久久影院 | 国产人妻人伦精品 | 精品久久久中文字幕人妻 | 精品国产aⅴ无码一区二区 | 国精产品一品二品国精品69xx | 久久久久亚洲精品中文字幕 | 中文精品久久久久人妻不卡 | 亚洲日韩av片在线观看 | 亚洲aⅴ无码成人网站国产app | 国产欧美精品一区二区三区 | 日日摸天天摸爽爽狠狠97 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 女高中生第一次破苞av | 午夜免费福利小电影 | 我要看www免费看插插视频 | 亚洲熟妇色xxxxx亚洲 | 日本精品少妇一区二区三区 | 国产97在线 | 亚洲 | 国产色视频一区二区三区 | 久久精品无码一区二区三区 | 妺妺窝人体色www在线小说 | 亚洲爆乳精品无码一区二区三区 | 97资源共享在线视频 | 97精品人妻一区二区三区香蕉 | 午夜成人1000部免费视频 | 丝袜美腿亚洲一区二区 | 午夜熟女插插xx免费视频 | 18禁黄网站男男禁片免费观看 | 在线播放免费人成毛片乱码 | 欧美成人午夜精品久久久 | 任你躁在线精品免费 | 精品成在人线av无码免费看 | 欧美激情综合亚洲一二区 | 亚洲中文字幕成人无码 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产精品久久国产精品99 | 欧美阿v高清资源不卡在线播放 | 国产偷国产偷精品高清尤物 | 欧美激情一区二区三区成人 | 四虎永久在线精品免费网址 | 亚洲精品久久久久久久久久久 | 久久久精品人妻久久影视 | 中文字幕人成乱码熟女app | 国产亚洲视频中文字幕97精品 | 欧美35页视频在线观看 | 性色av无码免费一区二区三区 | 亚洲欧美国产精品专区久久 | 台湾无码一区二区 | 1000部夫妻午夜免费 | 六月丁香婷婷色狠狠久久 | 日韩精品无码免费一区二区三区 | 两性色午夜免费视频 | 国产亚洲欧美日韩亚洲中文色 | 无码任你躁久久久久久久 | 国产精品爱久久久久久久 | 国产偷抇久久精品a片69 | 在线精品亚洲一区二区 | 在线成人www免费观看视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品人人妻人人澡人人爽人人 | 中文字幕无码乱人伦 | 中文字幕无线码 | 亚洲精品一区二区三区大桥未久 | 精品国产一区av天美传媒 | 亚洲精品国产第一综合99久久 | 国产精品对白交换视频 | 国产69精品久久久久app下载 | 国内少妇偷人精品视频免费 | 波多野结衣 黑人 | 久激情内射婷内射蜜桃人妖 | 99久久亚洲精品无码毛片 | 亚洲人成人无码网www国产 | 熟妇激情内射com | 水蜜桃色314在线观看 | 少妇无套内谢久久久久 | 婷婷丁香六月激情综合啪 | 99久久精品日本一区二区免费 | 亚洲热妇无码av在线播放 | 日韩精品成人一区二区三区 | 樱花草在线播放免费中文 | 欧美xxxxx精品 | 1000部夫妻午夜免费 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 十八禁真人啪啪免费网站 | 男女下面进入的视频免费午夜 | 成人免费视频视频在线观看 免费 | 特黄特色大片免费播放器图片 | 熟女少妇人妻中文字幕 | 高清无码午夜福利视频 | 蜜桃视频韩日免费播放 | 欧美人与禽猛交狂配 | 高中生自慰www网站 | 1000部夫妻午夜免费 | 亚洲一区av无码专区在线观看 | 亚洲国精产品一二二线 | 精品国产成人一区二区三区 | 亚洲天堂2017无码 | 免费人成在线观看网站 | 99视频精品全部免费免费观看 | 国产莉萝无码av在线播放 | 思思久久99热只有频精品66 | 国内揄拍国内精品少妇国语 | 欧美亚洲日韩国产人成在线播放 | 国产精品高潮呻吟av久久4虎 | 东京热男人av天堂 | 国产精品人人爽人人做我的可爱 | 亚洲国产成人a精品不卡在线 | 亚洲熟妇自偷自拍另类 | 亚洲熟妇色xxxxx欧美老妇y | 中文字幕av伊人av无码av | 亚洲欧美日韩成人高清在线一区 | 亚洲熟悉妇女xxx妇女av | 国产美女极度色诱视频www | 一本久道高清无码视频 | 精品无码一区二区三区爱欲 | 久久99热只有频精品8 | 人妻体内射精一区二区三四 | 好男人社区资源 | 亚洲精品国产a久久久久久 | 精品国产一区二区三区四区在线看 | 午夜嘿嘿嘿影院 | 国产熟妇另类久久久久 | 无码吃奶揉捏奶头高潮视频 | 在线观看国产午夜福利片 | 国产精品久久久午夜夜伦鲁鲁 | 玩弄人妻少妇500系列视频 | 粗大的内捧猛烈进出视频 | 国产熟妇另类久久久久 | 亚洲精品鲁一鲁一区二区三区 | 老司机亚洲精品影院无码 | 国产在线aaa片一区二区99 | 骚片av蜜桃精品一区 | 久久综合九色综合欧美狠狠 | 双乳奶水饱满少妇呻吟 | 国产亚洲精品久久久久久大师 | 亚洲 a v无 码免 费 成 人 a v | 婷婷综合久久中文字幕蜜桃三电影 | 人人爽人人爽人人片av亚洲 | 亚洲色www成人永久网址 | 亚洲成在人网站无码天堂 | 久久视频在线观看精品 | 四虎永久在线精品免费网址 | 成人影院yy111111在线观看 | 荫蒂添的好舒服视频囗交 | 色综合久久88色综合天天 | 久久久久久久久888 | 国产真人无遮挡作爱免费视频 | 国产在线无码精品电影网 | 久久精品国产大片免费观看 | 欧美日韩色另类综合 | 99精品久久毛片a片 | 狠狠色色综合网站 | 人人妻人人澡人人爽欧美一区九九 | 无码吃奶揉捏奶头高潮视频 | 奇米影视7777久久精品人人爽 | 中文字幕无码免费久久9一区9 | 人妻有码中文字幕在线 | 极品尤物被啪到呻吟喷水 | 男女作爱免费网站 | 国内精品久久久久久中文字幕 | 午夜精品久久久久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 18无码粉嫩小泬无套在线观看 | 亚洲成在人网站无码天堂 | 日本熟妇大屁股人妻 | 最近的中文字幕在线看视频 | 国产人妻精品一区二区三区 | 曰本女人与公拘交酡免费视频 | 成在人线av无码免观看麻豆 | 99麻豆久久久国产精品免费 | 又大又黄又粗又爽的免费视频 | 国产精品国产三级国产专播 | 夜精品a片一区二区三区无码白浆 | 国产精品亚洲综合色区韩国 | 无码人妻黑人中文字幕 | 在线а√天堂中文官网 | 国产亚洲精品久久久久久国模美 | 高清不卡一区二区三区 | 国产精品久久久久久久9999 | 久久精品中文字幕大胸 | 激情内射亚州一区二区三区爱妻 | 日本熟妇大屁股人妻 | 鲁一鲁av2019在线 | 亚洲码国产精品高潮在线 | 乱人伦人妻中文字幕无码久久网 | 亚洲高清偷拍一区二区三区 | 国产亚洲视频中文字幕97精品 | 少妇性荡欲午夜性开放视频剧场 | 久久伊人色av天堂九九小黄鸭 | 无码人妻久久一区二区三区不卡 | 97资源共享在线视频 | 国产人成高清在线视频99最全资源 | 无码人妻少妇伦在线电影 | 国产亚洲精品久久久久久国模美 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲色大成网站www | 亚洲国产av美女网站 | 色狠狠av一区二区三区 | 精品午夜福利在线观看 | 亚洲国产欧美国产综合一区 | 亚洲精品中文字幕乱码 | 成人综合网亚洲伊人 | 国产精品久久久久久亚洲毛片 | 久久久久人妻一区精品色欧美 | 丰满人妻精品国产99aⅴ | 午夜精品一区二区三区在线观看 | a在线观看免费网站大全 | 色一情一乱一伦 | 少妇被黑人到高潮喷出白浆 | 澳门永久av免费网站 | 无码成人精品区在线观看 | 99riav国产精品视频 | 久久亚洲国产成人精品性色 | 黑人巨大精品欧美一区二区 | 特黄特色大片免费播放器图片 | 日本高清一区免费中文视频 | 日本xxxx色视频在线观看免费 | 欧美黑人巨大xxxxx | 亚洲精品久久久久avwww潮水 | 精品国产青草久久久久福利 | 日本一区二区更新不卡 | 国产精品18久久久久久麻辣 | 伊人久久大香线蕉亚洲 | 国产激情艳情在线看视频 | 精品国产国产综合精品 | 丰满岳乱妇在线观看中字无码 | 成年美女黄网站色大免费视频 | 久久伊人色av天堂九九小黄鸭 | 又湿又紧又大又爽a视频国产 | 亚洲 另类 在线 欧美 制服 | 亚洲精品国产精品乱码视色 | 亚洲欧美国产精品久久 | 高清国产亚洲精品自在久久 | 人妻天天爽夜夜爽一区二区 | 欧美性生交xxxxx久久久 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 免费无码av一区二区 | 欧美日韩精品 | 国内综合精品午夜久久资源 | 国产午夜亚洲精品不卡 | 成人亚洲精品久久久久软件 | 人妻无码久久精品人妻 | 欧美变态另类xxxx | 伊人久久大香线焦av综合影院 | 正在播放东北夫妻内射 | 亚洲综合另类小说色区 | 永久黄网站色视频免费直播 | 婷婷五月综合激情中文字幕 | 无套内谢老熟女 | 亚洲第一无码av无码专区 | 久久国产自偷自偷免费一区调 | 亚洲精品一区国产 | 一本色道久久综合狠狠躁 | 97色伦图片97综合影院 | 免费人成在线视频无码 | 日韩成人一区二区三区在线观看 | 国产日产欧产精品精品app | 一本久道久久综合狠狠爱 | 人人澡人人透人人爽 | 黑人巨大精品欧美黑寡妇 | 色五月丁香五月综合五月 | 内射白嫩少妇超碰 | 亚洲欧美精品aaaaaa片 | 亚洲欧美日韩国产精品一区二区 | 中文字幕无线码免费人妻 | 精品成人av一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲国产精品毛片av不卡在线 | 亚洲精品一区三区三区在线观看 | 丝袜人妻一区二区三区 | 国产三级久久久精品麻豆三级 | 日韩精品无码免费一区二区三区 | 亚洲乱码中文字幕在线 | 久久久久久国产精品无码下载 | 欧美丰满少妇xxxx性 | 东京热无码av男人的天堂 | 亚洲性无码av中文字幕 | 久久精品中文字幕一区 | 狠狠噜狠狠狠狠丁香五月 | 久久精品中文闷骚内射 | 亚洲午夜久久久影院 | 澳门永久av免费网站 | 精品无码一区二区三区爱欲 | 人妻夜夜爽天天爽三区 | 无码国内精品人妻少妇 | 日本护士xxxxhd少妇 | 亚洲国产欧美在线成人 | 宝宝好涨水快流出来免费视频 | 粗大的内捧猛烈进出视频 | 东京热无码av男人的天堂 | 7777奇米四色成人眼影 | 无码播放一区二区三区 | 久久www免费人成人片 | 国产免费观看黄av片 | 色窝窝无码一区二区三区色欲 | 国产福利视频一区二区 | 老司机亚洲精品影院 | 麻豆精品国产精华精华液好用吗 | 亚洲国产成人a精品不卡在线 | 免费人成在线视频无码 | 一本无码人妻在中文字幕免费 | 免费网站看v片在线18禁无码 | 中文字幕无码免费久久9一区9 | 无人区乱码一区二区三区 | 亚洲国产欧美国产综合一区 | 亚洲 欧美 激情 小说 另类 | 在线视频网站www色 | 久久久久av无码免费网 | 亚洲色欲久久久综合网东京热 | 人人妻人人澡人人爽欧美一区九九 | 无套内谢老熟女 | 日韩亚洲欧美中文高清在线 | 99久久精品国产一区二区蜜芽 | 久久精品国产99久久6动漫 | 少妇性l交大片欧洲热妇乱xxx | 在线观看免费人成视频 | 大肉大捧一进一出视频出来呀 | 图片区 小说区 区 亚洲五月 | 亚洲精品午夜国产va久久成人 | 十八禁视频网站在线观看 | 在线天堂新版最新版在线8 | 久久精品国产大片免费观看 | 国产av无码专区亚洲awww | 日日橹狠狠爱欧美视频 | 麻豆av传媒蜜桃天美传媒 | 亚洲精品中文字幕 | 亚洲成av人影院在线观看 | 无码人妻丰满熟妇区五十路百度 | 中文字幕无码乱人伦 | 在线视频网站www色 | 国产激情综合五月久久 | 中国女人内谢69xxxxxa片 | 色婷婷综合激情综在线播放 | 色婷婷综合激情综在线播放 | 国产精品高潮呻吟av久久4虎 | 疯狂三人交性欧美 | 亚洲人成网站免费播放 | 永久免费观看美女裸体的网站 | 亚洲成色在线综合网站 | 欧美亚洲日韩国产人成在线播放 | 色欲人妻aaaaaaa无码 | 免费国产成人高清在线观看网站 | 欧洲美熟女乱又伦 | 精品亚洲成av人在线观看 | 亚洲一区二区三区四区 | 青青青爽视频在线观看 | 国产精品自产拍在线观看 | 国色天香社区在线视频 | 欧美乱妇无乱码大黄a片 | 四虎国产精品免费久久 | 97资源共享在线视频 | 国产亚洲人成a在线v网站 | 午夜精品一区二区三区的区别 | 亚洲国产精品无码久久久久高潮 | 精品国产麻豆免费人成网站 | 最近的中文字幕在线看视频 | 欧美三级不卡在线观看 | 久久视频在线观看精品 | 亚洲精品国偷拍自产在线麻豆 | 伊人色综合久久天天小片 | 人妻体内射精一区二区三四 | 精品久久久久久人妻无码中文字幕 | 亚洲精品久久久久中文第一幕 | 无码乱肉视频免费大全合集 | 中文字幕+乱码+中文字幕一区 | 无码人妻久久一区二区三区不卡 | 丰满少妇熟乱xxxxx视频 | 俺去俺来也在线www色官网 | 欧美激情一区二区三区成人 | 中文字幕无码av激情不卡 | 全球成人中文在线 | 国产高清av在线播放 | 真人与拘做受免费视频 | 樱花草在线播放免费中文 | 麻花豆传媒剧国产免费mv在线 | 国产无遮挡又黄又爽免费视频 | 日韩 欧美 动漫 国产 制服 | 日本一卡2卡3卡四卡精品网站 | 在线精品国产一区二区三区 | 国产亚洲欧美在线专区 | 国产日产欧产精品精品app | 丰满少妇高潮惨叫视频 | 久久综合激激的五月天 | 欧美激情综合亚洲一二区 | 丝袜美腿亚洲一区二区 | 亚洲精品久久久久久一区二区 | 熟女俱乐部五十路六十路av | 嫩b人妻精品一区二区三区 | 亚洲色www成人永久网址 | 人人爽人人爽人人片av亚洲 | 漂亮人妻洗澡被公强 日日躁 | 亚洲色欲久久久综合网东京热 | 国产亚洲美女精品久久久2020 | 国产一区二区三区精品视频 | 亚洲一区二区三区国产精华液 | 欧美日韩视频无码一区二区三 | 国产麻豆精品精东影业av网站 | 九九久久精品国产免费看小说 | 国产偷自视频区视频 | 夜夜躁日日躁狠狠久久av | 国产成人无码a区在线观看视频app | 国产suv精品一区二区五 | av无码不卡在线观看免费 | 亚洲日本va中文字幕 | 欧美日韩视频无码一区二区三 | 久精品国产欧美亚洲色aⅴ大片 | 国内精品九九久久久精品 | 高潮毛片无遮挡高清免费视频 | 国语精品一区二区三区 | 亚洲人亚洲人成电影网站色 | 日本饥渴人妻欲求不满 | 亚洲成a人一区二区三区 | 学生妹亚洲一区二区 | 亚洲国产成人a精品不卡在线 | 精品国偷自产在线 | 中文字幕+乱码+中文字幕一区 | 综合激情五月综合激情五月激情1 | 国产成人无码av一区二区 | 国产精品美女久久久网av | 亚洲成色www久久网站 | 丁香啪啪综合成人亚洲 | 国产成人综合在线女婷五月99播放 | 国内综合精品午夜久久资源 | 欧美兽交xxxx×视频 | 波多野结衣高清一区二区三区 | 小sao货水好多真紧h无码视频 | 亚洲阿v天堂在线 | 双乳奶水饱满少妇呻吟 | 精品国产麻豆免费人成网站 | 18精品久久久无码午夜福利 | 精品久久久久香蕉网 | 国内综合精品午夜久久资源 | 日本一卡二卡不卡视频查询 | 国产一区二区三区精品视频 | 人人爽人人澡人人高潮 | 精品无人国产偷自产在线 | 无码国产色欲xxxxx视频 | 欧美激情内射喷水高潮 | 真人与拘做受免费视频一 | 亚洲一区二区三区国产精华液 | 亚洲狠狠色丁香婷婷综合 | 牲欲强的熟妇农村老妇女 | 亚洲狠狠色丁香婷婷综合 | 狠狠噜狠狠狠狠丁香五月 | 日本丰满护士爆乳xxxx | 在线成人www免费观看视频 | 欧洲极品少妇 | 日欧一片内射va在线影院 | 少妇无码av无码专区在线观看 | 精品 日韩 国产 欧美 视频 | 欧美精品免费观看二区 | 精品人人妻人人澡人人爽人人 | 任你躁国产自任一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 男女作爱免费网站 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲中文字幕无码一久久区 | 九月婷婷人人澡人人添人人爽 | 亚洲人成网站在线播放942 | 无码一区二区三区在线 | 久久久精品456亚洲影院 | 偷窥日本少妇撒尿chinese | 色偷偷人人澡人人爽人人模 | 色一情一乱一伦一视频免费看 | 久久无码专区国产精品s | 国产福利视频一区二区 | 性色欲网站人妻丰满中文久久不卡 | 丰满妇女强制高潮18xxxx | 亚洲色www成人永久网址 | 97精品国产97久久久久久免费 | 又大又硬又黄的免费视频 | 亚洲の无码国产の无码影院 | 国产成人精品视频ⅴa片软件竹菊 | 久久国产精品_国产精品 | 国产精品久久久午夜夜伦鲁鲁 | 丰满妇女强制高潮18xxxx | 精品 日韩 国产 欧美 视频 | 国产精品爱久久久久久久 | 欧美人与禽zoz0性伦交 | 又湿又紧又大又爽a视频国产 | 欧美老人巨大xxxx做受 | 亚洲娇小与黑人巨大交 | 对白脏话肉麻粗话av | 国产激情一区二区三区 | 在线欧美精品一区二区三区 | 国产精品香蕉在线观看 | 99精品无人区乱码1区2区3区 | 在线播放免费人成毛片乱码 | 四虎国产精品一区二区 | 亚洲精品鲁一鲁一区二区三区 | 久久精品国产99精品亚洲 | 无码帝国www无码专区色综合 | 无码任你躁久久久久久久 | 国产乱人无码伦av在线a | 午夜精品久久久内射近拍高清 | 乱人伦人妻中文字幕无码 | 国产电影无码午夜在线播放 | 色情久久久av熟女人妻网站 | 天天av天天av天天透 | 久久亚洲国产成人精品性色 | 成熟妇人a片免费看网站 | 久久久久成人精品免费播放动漫 | 免费看男女做好爽好硬视频 | 国产做国产爱免费视频 | 精品人妻人人做人人爽夜夜爽 | 国产国产精品人在线视 | 亚洲天堂2017无码中文 | 蜜臀av无码人妻精品 | 欧美性黑人极品hd | 草草网站影院白丝内射 | 成人一在线视频日韩国产 | 国产免费久久久久久无码 | 日本乱人伦片中文三区 | 国产精品久久久午夜夜伦鲁鲁 | 成在人线av无码免费 | 亚洲国产午夜精品理论片 | 女人和拘做爰正片视频 | 国产熟妇另类久久久久 | 国产精品人妻一区二区三区四 | 成年美女黄网站色大免费视频 | 99国产欧美久久久精品 | 日日橹狠狠爱欧美视频 | 人人澡人人妻人人爽人人蜜桃 | 国产一精品一av一免费 | 亚洲无人区午夜福利码高清完整版 | 东京热男人av天堂 | 欧洲极品少妇 | 欧美怡红院免费全部视频 | 亚洲一区二区三区在线观看网站 | 国产亚洲精品久久久久久 | 日日鲁鲁鲁夜夜爽爽狠狠 | 激情人妻另类人妻伦 | 国产亚av手机在线观看 | 国内精品久久毛片一区二区 | 国产精品手机免费 | 国产精品国产自线拍免费软件 | 老熟妇乱子伦牲交视频 | 亚洲经典千人经典日产 | 国产精品怡红院永久免费 | 免费网站看v片在线18禁无码 | 久久综合给久久狠狠97色 | 两性色午夜视频免费播放 | 亚洲a无码综合a国产av中文 | 成人亚洲精品久久久久软件 | 又粗又大又硬毛片免费看 | 亚洲性无码av中文字幕 | 97资源共享在线视频 | 国产无套内射久久久国产 | 激情亚洲一区国产精品 | 牛和人交xxxx欧美 | 午夜福利电影 | 亚洲熟悉妇女xxx妇女av | 久久综合九色综合97网 | 国产va免费精品观看 | 精品无人国产偷自产在线 | 天干天干啦夜天干天2017 | 人人妻人人澡人人爽欧美一区九九 | 激情五月综合色婷婷一区二区 | 亚洲啪av永久无码精品放毛片 | 久久久精品欧美一区二区免费 | 成人一区二区免费视频 | 牲欲强的熟妇农村老妇女视频 | 国产精品久久久久9999小说 | 亚洲 欧美 激情 小说 另类 | 国产真实夫妇视频 | 大屁股大乳丰满人妻 | 国产成人无码午夜视频在线观看 | 国产av人人夜夜澡人人爽麻豆 | 亚洲 另类 在线 欧美 制服 | 免费乱码人妻系列无码专区 | 88国产精品欧美一区二区三区 | 亚洲一区二区三区国产精华液 | 中文字幕乱妇无码av在线 | 天天躁日日躁狠狠躁免费麻豆 | 欧洲精品码一区二区三区免费看 | 玩弄中年熟妇正在播放 | 美女扒开屁股让男人桶 | 大屁股大乳丰满人妻 | 激情亚洲一区国产精品 | 亚洲男人av香蕉爽爽爽爽 | 波多野结衣av在线观看 | 奇米影视888欧美在线观看 | 久久午夜无码鲁丝片午夜精品 | 国产精品成人av在线观看 | 人人澡人人透人人爽 | 亚洲精品中文字幕 | 亚洲中文字幕无码中字 | 无码纯肉视频在线观看 | 国产一区二区三区四区五区加勒比 | 国产免费无码一区二区视频 | 装睡被陌生人摸出水好爽 | 性欧美牲交在线视频 | 色综合久久88色综合天天 | yw尤物av无码国产在线观看 | 亚洲成av人综合在线观看 | 国产午夜手机精彩视频 | 在线看片无码永久免费视频 | 色综合久久久无码中文字幕 | 成人试看120秒体验区 | 日韩精品无码一区二区中文字幕 | 欧美精品国产综合久久 | 久久aⅴ免费观看 | 天天做天天爱天天爽综合网 | 宝宝好涨水快流出来免费视频 | 欧美黑人乱大交 | 婷婷五月综合激情中文字幕 | 天天躁日日躁狠狠躁免费麻豆 | 久久伊人色av天堂九九小黄鸭 | 中文字幕无码av波多野吉衣 | 欧美熟妇另类久久久久久多毛 | 少妇高潮喷潮久久久影院 | 三级4级全黄60分钟 | 欧美真人作爱免费视频 | 婷婷丁香六月激情综合啪 | yw尤物av无码国产在线观看 | 亚洲日韩av一区二区三区四区 | 国产人妻久久精品二区三区老狼 | 无码纯肉视频在线观看 | 狠狠噜狠狠狠狠丁香五月 | 亚洲毛片av日韩av无码 | 成人欧美一区二区三区黑人免费 | 中国女人内谢69xxxx | 久久精品成人欧美大片 | 欧美丰满熟妇xxxx性ppx人交 | 国产情侣作爱视频免费观看 | 无套内谢的新婚少妇国语播放 | 宝宝好涨水快流出来免费视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 狠狠综合久久久久综合网 | 狠狠色噜噜狠狠狠狠7777米奇 | 影音先锋中文字幕无码 | 色噜噜亚洲男人的天堂 | 免费无码午夜福利片69 | 欧美国产日产一区二区 | 久久久成人毛片无码 | 亚洲一区二区三区 | 一本色道久久综合亚洲精品不卡 | 日本熟妇乱子伦xxxx | 天天av天天av天天透 | 人人妻人人澡人人爽人人精品浪潮 | 黑人粗大猛烈进出高潮视频 | 日本大乳高潮视频在线观看 | 国产精华av午夜在线观看 | 红桃av一区二区三区在线无码av | 夜精品a片一区二区三区无码白浆 | 国产极品美女高潮无套在线观看 | 67194成是人免费无码 | 亚洲人交乣女bbw | 中国女人内谢69xxxxxa片 | 日本一卡二卡不卡视频查询 | 成人免费无码大片a毛片 | 老熟女重囗味hdxx69 | 精品欧美一区二区三区久久久 | 国产精品人人妻人人爽 | 久久久久久久女国产乱让韩 | 国产凸凹视频一区二区 | 成人毛片一区二区 | 东京无码熟妇人妻av在线网址 | 国产精品视频免费播放 | 日韩欧美中文字幕在线三区 | 亚洲精品一区三区三区在线观看 | 国产真实伦对白全集 | 日本乱人伦片中文三区 | 国产无遮挡又黄又爽又色 | 日韩人妻无码一区二区三区久久99 | 国产成人无码午夜视频在线观看 | 无码人妻黑人中文字幕 | 高清不卡一区二区三区 | 精品一区二区三区无码免费视频 | 国产香蕉尹人综合在线观看 | 久久精品国产一区二区三区肥胖 | 国内精品久久毛片一区二区 | 老熟妇仑乱视频一区二区 | 中文字幕无码视频专区 | 偷窥日本少妇撒尿chinese | 欧美自拍另类欧美综合图片区 | 免费无码午夜福利片69 | 亚洲中文字幕在线观看 | 国产无套内射久久久国产 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲色无码一区二区三区 | 久久精品中文闷骚内射 | 国产香蕉尹人视频在线 | 3d动漫精品啪啪一区二区中 | 夜夜夜高潮夜夜爽夜夜爰爰 | 精品乱子伦一区二区三区 | 人妻插b视频一区二区三区 | 丝袜人妻一区二区三区 | 性啪啪chinese东北女人 | 亚洲欧美中文字幕5发布 | 综合网日日天干夜夜久久 | 午夜无码区在线观看 | 国精品人妻无码一区二区三区蜜柚 | 国产福利视频一区二区 | 欧美精品在线观看 | 丰满妇女强制高潮18xxxx | 国产网红无码精品视频 | 日本熟妇乱子伦xxxx | 久久久国产一区二区三区 | av小次郎收藏 | 国语自产偷拍精品视频偷 | 久久久国产精品无码免费专区 | 高中生自慰www网站 | 精品亚洲韩国一区二区三区 | 久久综合九色综合97网 | 国产精品va在线观看无码 | 成人免费视频在线观看 | 中文字幕人妻无码一夲道 | 亚洲欧洲无卡二区视頻 | 精品aⅴ一区二区三区 | 久久精品无码一区二区三区 | a国产一区二区免费入口 | 人妻aⅴ无码一区二区三区 | 永久黄网站色视频免费直播 | 精品无码成人片一区二区98 | 高清国产亚洲精品自在久久 | 女人高潮内射99精品 | 高潮毛片无遮挡高清免费 | 在线观看免费人成视频 | 男女超爽视频免费播放 | 男女下面进入的视频免费午夜 | 荫蒂被男人添的好舒服爽免费视频 | 真人与拘做受免费视频 | 粗大的内捧猛烈进出视频 | 久久久久久九九精品久 | 东京热男人av天堂 | 午夜嘿嘿嘿影院 | 国产精品久久久一区二区三区 | 欧美激情内射喷水高潮 | 国产精品99爱免费视频 | 欧美亚洲国产一区二区三区 | 国产美女极度色诱视频www | 国产乱人无码伦av在线a | 在线成人www免费观看视频 | 人人妻人人澡人人爽欧美一区九九 | 久久综合色之久久综合 | 国产精品久久久久久无码 | 日韩精品一区二区av在线 | 日日干夜夜干 | 成人无码视频免费播放 | 久久国产自偷自偷免费一区调 | 四虎永久在线精品免费网址 | 综合网日日天干夜夜久久 | 免费人成在线视频无码 | 老熟妇乱子伦牲交视频 | 永久免费观看美女裸体的网站 | 少妇愉情理伦片bd | 2020最新国产自产精品 | 蜜桃视频韩日免费播放 | 领导边摸边吃奶边做爽在线观看 | 久久久久亚洲精品中文字幕 | 波多野结衣aⅴ在线 | 亚洲色无码一区二区三区 | 国产舌乚八伦偷品w中 | 色窝窝无码一区二区三区色欲 | √天堂资源地址中文在线 | 国产精品人人妻人人爽 | 亚洲国产av精品一区二区蜜芽 | 激情爆乳一区二区三区 | 亚洲精品午夜国产va久久成人 | 亚洲娇小与黑人巨大交 | 国产精品办公室沙发 | 久久久久99精品国产片 | 人人妻人人澡人人爽欧美精品 | 熟妇女人妻丰满少妇中文字幕 | 久久精品人妻少妇一区二区三区 | 无码一区二区三区在线观看 | 在线精品亚洲一区二区 | 伊人久久大香线蕉亚洲 | 国产成人无码av在线影院 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 色狠狠av一区二区三区 | 国产无套内射久久久国产 | 又大又硬又黄的免费视频 | 麻豆精品国产精华精华液好用吗 | 18无码粉嫩小泬无套在线观看 | 性色av无码免费一区二区三区 | 狂野欧美性猛xxxx乱大交 | 999久久久国产精品消防器材 | 在线 国产 欧美 亚洲 天堂 | 99麻豆久久久国产精品免费 | 国产凸凹视频一区二区 | 免费无码午夜福利片69 | 国产精品va在线播放 | 欧美放荡的少妇 | 国内精品一区二区三区不卡 | 亚洲天堂2017无码中文 | 亚洲综合在线一区二区三区 | 亚洲国产精品一区二区美利坚 | 国产午夜福利100集发布 | 久久精品国产99精品亚洲 | 乱码av麻豆丝袜熟女系列 | 两性色午夜免费视频 | 欧美35页视频在线观看 | 国产精品高潮呻吟av久久 | 免费网站看v片在线18禁无码 | 久久精品人妻少妇一区二区三区 | 国产口爆吞精在线视频 | 强奷人妻日本中文字幕 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲色欲色欲天天天www | 久久久久久av无码免费看大片 | 大胆欧美熟妇xx | 国产美女精品一区二区三区 | 乱人伦人妻中文字幕无码 | 亚洲成av人在线观看网址 | 伊人久久大香线焦av综合影院 | 亚洲区欧美区综合区自拍区 | av无码久久久久不卡免费网站 | 国内精品九九久久久精品 | 国产亚洲精品久久久久久国模美 | 波多野结衣av在线观看 | 午夜嘿嘿嘿影院 | 亚洲成av人片天堂网无码】 | 色婷婷欧美在线播放内射 | 四虎影视成人永久免费观看视频 | 久久成人a毛片免费观看网站 |