日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#中利用Socket实现网络语音通信[初级版本]

發(fā)布時(shí)間:2023/12/19 C# 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中利用Socket实现网络语音通信[初级版本] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
現(xiàn)在時(shí)下的VOIP軟件很多,比較有名的就是Skype,還有其它諸如UUcall、快門等等。它們提供的功能除了網(wǎng)絡(luò)上的語(yǔ)音通話外,還可以與固定電話、手機(jī)等通話。在本篇中主要介紹利用C#實(shí)現(xiàn)語(yǔ)音通信的基本方法。但是目前只實(shí)現(xiàn)了網(wǎng)絡(luò)上語(yǔ)音傳輸?shù)幕竟δ?#xff0c;而且比較粗糙,沒(méi)有采用什么算法來(lái)優(yōu)化,所以大家千萬(wàn)不要期望過(guò)高。我寫這篇的目的除了記錄自己的經(jīng)歷之外,更希望有高手能給出改進(jìn)的意見或算法。

???? 開發(fā)平臺(tái):.NET Framework 2.0 ,VS 2005,Windows XP,DirectX SDK(June 2008)下載頁(yè)面?。
???? 開發(fā)語(yǔ)言:C#。

???? 測(cè)試環(huán)境:Windows XP 、.net framework 2.0、普通局域網(wǎng)。
???? 測(cè)試結(jié)果:在多臺(tái)安裝了windows XP系統(tǒng)且配置不同的電腦上測(cè)試,均能正常運(yùn)行。可以進(jìn)行語(yǔ)音對(duì)話,但是有明顯的雜音,沿時(shí)低。

???? 限于篇幅,在本文中會(huì)詳細(xì)介紹本人認(rèn)為比較關(guān)健的問(wèn)題,其它部分只做大概介紹,為了便于大家理解,可以先閱讀:
???? 1.DirectX編程:[初級(jí)]C# 中利用 DirectSound 錄音
???? 2.C# Socket編程筆記

???? 在本文中打算按照以下順序介紹:
?????1.項(xiàng)目結(jié)果預(yù)覽與說(shuō)明
?????2.實(shí)現(xiàn)方法概要
???? 3.語(yǔ)言采集
???? 4.語(yǔ)音傳輸
?????5.語(yǔ)音播放

?????項(xiàng)目結(jié)果預(yù)覽與說(shuō)明

????? 界面如下:
???????????????????

????? 說(shuō)明:界面很簡(jiǎn)單,只提供了一個(gè)選擇或輸入對(duì)方IP的功能,當(dāng)選擇合適局域網(wǎng)內(nèi)IP之后,單擊確定便激活了語(yǔ)音聊天的按鈕。如果你想進(jìn)行語(yǔ)音聊天就可以開始聊天了,聊天端口采用8000。本軟件只適用于局域網(wǎng)內(nèi)用戶的聊天,另外因?yàn)闆](méi)有增加用戶認(rèn)證的功能,所以只有在雙方都啟動(dòng)了這款軟件才能進(jìn)行通信。如果只想在單機(jī)上測(cè)試,那只需要選擇本機(jī)的IP便可。由于囧于技術(shù)水平,嘗試N次之后,任不知如何才能正確地實(shí)現(xiàn)語(yǔ)音效果(如回聲消除、降噪等)來(lái)保障音質(zhì),因此在單機(jī)測(cè)試會(huì)有回聲干擾,囂叫聲比較嚴(yán)重,希望高手解囊。

??????實(shí)現(xiàn)方法概要

??????要想實(shí)現(xiàn)語(yǔ)音聊天,有幾個(gè)步驟是必須的(就是我不說(shuō),相信你應(yīng)該也能想得到一些):
????? a 語(yǔ)音采集:采集的作用就是從你的麥克風(fēng)中獲取數(shù)據(jù),我采用DirectSound類來(lái)實(shí)現(xiàn)這個(gè)技術(shù)。參考:C# 中利用 DirectSound 錄音
???(b 語(yǔ)音編碼:利用語(yǔ)音編碼算法對(duì)采集到的話音進(jìn)行壓縮編碼,進(jìn)行編碼的目的是為了減少網(wǎng)絡(luò)帶寬的壓力。)
??????c 語(yǔ)音傳輸:將采集到的聲音傳輸?shù)骄W(wǎng)絡(luò)上的其它主機(jī),我采用Socket UDP方式來(lái)實(shí)現(xiàn)。參考:C# Socket編程筆記
???(d 語(yǔ)音解碼:如果所傳輸?shù)恼Z(yǔ)音進(jìn)行過(guò)壓縮編碼,則必須對(duì)語(yǔ)音進(jìn)行解碼,否則無(wú)法得到原始語(yǔ)音數(shù)據(jù)。)
??????e 語(yǔ)音播放:當(dāng)對(duì)方通過(guò)網(wǎng)絡(luò)傳輸?shù)奖緳C(jī)時(shí)(,如果需要解碼則先執(zhí)行d),進(jìn)行實(shí)時(shí)播放。

????? 上面紅色標(biāo)記的步驟,可以省略。在本軟件中,我并未采用這兩個(gè)步驟,因?yàn)楫?dāng)我采用了這兩個(gè)步驟后,發(fā)現(xiàn)語(yǔ)音時(shí)延異常的嚴(yán)重。我采用的編解碼算法是G.729,利用的是g729.dll庫(kù)文件,壓縮效果不錯(cuò),但是時(shí)延比較嚴(yán)重,可能是自己哪里沒(méi)有設(shè)置好。如果有朋友使用過(guò)該算法,且時(shí)延低的,希望不吝賜教。

??????接下來(lái),重點(diǎn)介紹語(yǔ)音采集、語(yǔ)音傳輸、語(yǔ)音播放的實(shí)現(xiàn)。

??????語(yǔ)音采集
??????由于所實(shí)現(xiàn)的方法與錄音方法一致,因此不會(huì)著墨過(guò)多,如果你不能很好的理解,請(qǐng)先參考:C# 中利用 DirectSound 錄音

????? 與錄音不同的是,錄音我們需要建立一個(gè)WAVE文件來(lái)存儲(chǔ)這些采集到的數(shù)據(jù),而在語(yǔ)音聊天中,則不需要存儲(chǔ),當(dāng)采集到一些數(shù)據(jù)后,就立刻發(fā)送出去,因此也不需要開辟很大的空間來(lái)存放PCM數(shù)據(jù)。
????? 我們先來(lái)回顧下采集的基本步驟:
????? 1. 設(shè)置PCM格式,設(shè)置相關(guān)的參數(shù),如:采樣頻率、量化位數(shù)等。
????? 2. 建立采集用的設(shè)備對(duì)象,建立采集用的緩沖區(qū)對(duì)象。
????? 3. 設(shè)置緩沖區(qū)通知,設(shè)置通知被觸發(fā)后的事件。通知是用于當(dāng)緩沖區(qū)的讀指針達(dá)到某預(yù)設(shè)位置時(shí)觸發(fā)通知事件,提醒我們可以對(duì)某部分的數(shù)據(jù)進(jìn)行傳送了。
????? 4. 開始采集聲音。
????? 5. 當(dāng)通知被觸發(fā)后,建立一個(gè)新的線程來(lái)處理數(shù)據(jù)傳送的事件。(建立一個(gè)新的線程,就是為了防止采集過(guò)程被中斷)。

主要代碼
????????///?<summary>
????????
///?設(shè)置音頻格式,如采樣率等
????????
///?</summary>
????????
///?<returns>設(shè)置完成后的格式</returns>
????????private?WaveFormat?SetWaveFormat()
????????{
????????????WaveFormat?format?
=?new?WaveFormat();
????????????format.FormatTag?
=?WaveFormatTag.Pcm;//設(shè)置音頻類型
????????????format.SamplesPerSecond?=?11025;//采樣率(單位:赫茲)典型值:11025、22050、44100Hz
????????????format.BitsPerSample?=?16;//采樣位數(shù)
????????????format.Channels?=?1;//聲道
????????????format.BlockAlign?=?(short)(format.Channels?*?(format.BitsPerSample?/?8));//單位采樣點(diǎn)的字節(jié)數(shù)
????????????format.AverageBytesPerSecond?=?format.BlockAlign?*?format.SamplesPerSecond;

????????????
return?format;
????????????
//按照以上采樣規(guī)格,可知采樣1秒鐘的字節(jié)數(shù)為22050*2=44100B?約為?43K
????????}

????????
///?<summary>
????????
///?創(chuàng)建捕捉設(shè)備對(duì)象
????????
///?</summary>
????????
///?<returns>如果創(chuàng)建成功返回true</returns>
????????private?bool?CreateCaputerDevice()
????????{
????????????
//首先要玫舉可用的捕捉設(shè)備
????????????CaptureDevicesCollection?capturedev?=?new?CaptureDevicesCollection();
????????????Guid?devguid;
????????????
if?(capturedev.Count?>?0)
????????????{
????????????????devguid?
=?capturedev[0].DriverGuid;
????????????}
????????????
else
????????????{
????????????????System.Windows.Forms.MessageBox.Show(
"當(dāng)前沒(méi)有可用于音頻捕捉的設(shè)備",?"系統(tǒng)提示");
????????????????
return?false;
????????????}
????????????
//利用設(shè)備GUID來(lái)建立一個(gè)捕捉設(shè)備對(duì)象
????????????capture?=?new?Capture(devguid);
????????????
return?true;
????????}

????????
///?<summary>
????????
///?創(chuàng)建捕捉緩沖區(qū)對(duì)象
????????
///?</summary>
????????private?void?CreateCaptureBuffer()
????????{
????????????
//想要?jiǎng)?chuàng)建一個(gè)捕捉緩沖區(qū)必須要兩個(gè)參數(shù):緩沖區(qū)信息(描述這個(gè)緩沖區(qū)中的格式等),緩沖設(shè)備。
????????????WaveFormat?mWavFormat?=?SetWaveFormat();
????????????CaptureBufferDescription?bufferdescription?
=?new?CaptureBufferDescription();
????????????bufferdescription.Format?
=?mWavFormat;//設(shè)置緩沖區(qū)要捕捉的數(shù)據(jù)格式
????????????iNotifySize?=?mWavFormat.AverageBytesPerSecond?/?iNotifyNum;//1秒的數(shù)據(jù)量/設(shè)置的通知數(shù)得到的每個(gè)通知大小小于0.2s的數(shù)據(jù)量,話音延遲小于200ms為優(yōu)質(zhì)話音
????????????iBufferSize?=?iNotifyNum?*?iNotifySize;
????????????bufferdescription.BufferBytes?
=?iBufferSize;
????????????bufferdescription.ControlEffects?
=?true;
????????????bufferdescription.WaveMapped?
=?true;
????????????capturebuffer?
=?new?CaptureBuffer(bufferdescription,?capture);//建立設(shè)備緩沖區(qū)對(duì)象

????????}

????????
//設(shè)置通知
????????private?void?CreateNotification()
????????{
????????????BufferPositionNotify[]?bpn?
=?new?BufferPositionNotify[iNotifyNum];//設(shè)置緩沖區(qū)通知個(gè)數(shù)
????????????
//設(shè)置通知事件
????????????notifyEvent?=?new?AutoResetEvent(false);
????????????notifyThread?
=?new?Thread(RecoData);//通知觸發(fā)事件
????????????notifyThread.IsBackground?=?true;
????????????notifyThread.Start();
????????????
for?(int?i?=?0;?i?<?iNotifyNum;?i++)
????????????{
????????????????bpn[i].Offset?
=?iNotifySize?+?i?*?iNotifySize?-?1;//設(shè)置具體每個(gè)的位置
????????????????bpn[i].EventNotifyHandle?=?notifyEvent.Handle;
????????????}
????????????myNotify?
=?new?Notify(capturebuffer);
????????????myNotify.SetNotificationPositions(bpn);

????????}

????????
//線程中的事件
????????private?void?RecoData()
????????{
????????????
while?(true)
????????????{
????????????????
//?等待緩沖區(qū)的通知消息
????????????????notifyEvent.WaitOne(Timeout.Infinite,?true);
????????????????
//?錄制數(shù)據(jù)
????????????????RecordCapturedData(Client,epServer);
????????????}
????????}

????????
//真正轉(zhuǎn)移數(shù)據(jù)的事件,其實(shí)就是把數(shù)據(jù)傳送到網(wǎng)絡(luò)上去。
????????private?void?RecordCapturedData(Socket?Client,EndPoint?epServer?)
????????{
????????????
byte[]?capturedata?=?null;
????????????
int?readpos?=?0,?capturepos?=?0,?locksize?=?0;
????????????capturebuffer.GetCurrentPosition(
out?capturepos,?out?readpos);
????????????locksize?
=?readpos?-?iBufferOffset;//這個(gè)大小就是我們可以安全讀取的大小
????????????if?(locksize?==?0)
????????????{
????????????????
return;
????????????}
????????????
if?(locksize?<?0)
????????????{
//因?yàn)槲覀兪茄h(huán)的使用緩沖區(qū),所以有一種情況下為負(fù):當(dāng)文以載讀指針回到第一個(gè)通知點(diǎn),而Ibuffeoffset還在最后一個(gè)通知處
????????????????locksize?+=?iBufferSize;
????????????}
????????????capturedata?
=?(byte[])capturebuffer.Read(iBufferOffset,?typeof(byte),?LockFlag.FromWriteCursor,?locksize);
????????????
//capturedata?=?g729.Encode(capturedata);//語(yǔ)音編碼
????????????try
????????????{
????????????????Client.SendTo(capturedata,?epServer);
//傳送語(yǔ)音
????????????}
????????????
catch
????????????{
????????????????
throw?new?Exception();
????????????}
????????????iBufferOffset?
+=?capturedata.Length;
????????????iBufferOffset?
%=?iBufferSize;//取模是因?yàn)榫彌_區(qū)是循環(huán)的。
????????}

??????上述代碼可以很好的采集到聲音數(shù)據(jù),幾乎與原始聲音一致。如果你已經(jīng)可以實(shí)現(xiàn)錄音,那么以上對(duì)你來(lái)說(shuō)應(yīng)該并不陌生。

??????語(yǔ)音傳輸
????? 這部分并不是很難,如果你熟悉socket編程,那么就可以PASS這一部分了,與以往傳輸不同的只是現(xiàn)在傳輸?shù)氖钦Z(yǔ)音而已。如果你沒(méi)接觸過(guò)socket,那可以瞧瞧C# Socket編程筆記。

????? 感覺(jué)這部分叫“語(yǔ)音傳輸”并不是很恰當(dāng),因?yàn)槠鋵?shí)真正用于傳輸?shù)恼Z(yǔ)句只有一句。除了語(yǔ)音傳輸之外,我們還需要對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)聽,從而能捕獲對(duì)方發(fā)送給自己的語(yǔ)音信息。但是,也不知道叫什么好,就估且這么叫著吧。在這一部分,我主要講下大致流程。
????? 1. 建立socket對(duì)象,在實(shí)例化這個(gè)對(duì)象的時(shí)候有一個(gè)參數(shù)是設(shè)置使用的協(xié)議,在本軟件中,我采用的是UDP。
????? 為什么要采用UDP?建立TCP能不能傳送語(yǔ)音,答案肯定是能的。在本軟件中,我考慮的主要是語(yǔ)音延時(shí)問(wèn)題,?采用TCP在建立連接和維護(hù)連接中對(duì)時(shí)間和系統(tǒng)資源的開銷較大,因此會(huì)有明顯的時(shí)延發(fā)生,嚴(yán)重影響了實(shí)時(shí)性。另外,因?yàn)閁DP是無(wú)連接的,這使得采用UDP可以支持日后功能上的擴(kuò)展(如:組播)。
????? 2. 綁定本機(jī)的IP和端口,因?yàn)橐粋€(gè)主機(jī)可能會(huì)有不止一個(gè)IP地址,如回發(fā)地址:127.0.0.1 和局域網(wǎng)地址:192.168.#.#。為了增加可用性,我這里選擇綁定到任何本機(jī)可用的IP地址(IPAddress.Any),而端口我們約定默認(rèn)為8000。
????? 3. 啟動(dòng)監(jiān)聽線程,來(lái)監(jiān)聽網(wǎng)絡(luò)。我采用異步的方式,以便獲得更好的系統(tǒng)響應(yīng)度。

主要代碼
????????private?Thread?ListenThread;
????????
private?byte[]?bytData;

????????
///?<summary>
????????
///?監(jiān)聽方法,用于監(jiān)聽遠(yuǎn)程發(fā)送到本機(jī)的信息
????????
///?</summary>
????????public?void?Listen()
????????{www.elivn.com
????????????ListenThread?
=?new?Thread(new?ThreadStart(DoListen));
????????????ListenThread.IsBackground?
=?true;//設(shè)置為后臺(tái)線程,這樣當(dāng)主線程結(jié)束后,該線程自動(dòng)結(jié)束
????????????ListenThread.Start();
????????}

????????
private?EndPoint?epRemote;

????????
///?<summary>
????????
///?監(jiān)聽線程
????????
///?</summary>
????????private?void?DoListen()
????????{
????????????bytData?
=?new?byte[intMaxDataSize];
????????????epRemote?
=?(EndPoint)(new?IPEndPoint(IPAddress.Any,?0));

????????????
while?(true)
????????????{
????????????????
if?(LocalSocket.Poll(5000,?SelectMode.SelectRead))
????????????????{
//每5ms查詢一下網(wǎng)絡(luò),如果有可讀數(shù)據(jù)就接收
????????????????????LocalSocket.BeginReceiveFrom(bytData,?0,?bytData.Length,?SocketFlags.None,?ref?epRemote,?new?AsyncCallback(ReceiveData),?null);
????????????????}
????????????}
????????}

????????
///?<summary>
????????
///?接收數(shù)據(jù)
????????
///?</summary>
????????
///?<param?name="iar"></param>
????????private?void?ReceiveData(IAsyncResult?iar)
????????{
????????????
int?intRecv?=?0;
????????????
try
????????????{
????????????????intRecv?
=?LocalSocket.EndReceiveFrom(iar,?ref?epRemote);
????????????}
????????????
catch
????????????{
????????????????
throw?new?Exception();
????????????}
????????????
if?(intRecv?>?0)
????????????{
????????????????
byte[]?bytReceivedData?=?new?byte[intRecv];
????????????????Buffer.BlockCopy(bytData,?
0,?bytReceivedData,?0,?intRecv);
????????????????voicecapture1.GetVoiceData(intRecv,?bytReceivedData);
//調(diào)用聲音模塊中的GetVoiceData()從字節(jié)數(shù)組中獲取聲音并播放
??????????????????
//GetVoiceData()會(huì)在下一部分中提到
????????????}
????????}

????? 4. 數(shù)據(jù)的發(fā)送因?yàn)橹挥幸痪湓?#xff0c;所以我直接放在上一部分的語(yǔ)音采集中了。 Client.SendTo(capturedata,?epServer);//傳送語(yǔ)音

????? 語(yǔ)音播放
??????最麻煩的就是這部分了,而且感覺(jué)現(xiàn)在的實(shí)現(xiàn)方法仍然需要改進(jìn)才好。

????? 當(dāng)聲音傳輸?shù)奖緳C(jī)后,該怎么樣才能讓這些數(shù)據(jù)經(jīng)過(guò)音響設(shè)備放出聲音來(lái)呢?因?yàn)槁曇舨シ攀菑木彌_區(qū)中獲取聲音數(shù)據(jù)的因此我們必須先將獲取到的數(shù)據(jù)寫入緩沖區(qū),然后再調(diào)用相應(yīng)的方法來(lái)播放??雌饋?lái)似乎不復(fù)雜,可是實(shí)現(xiàn)起來(lái)遠(yuǎn)沒(méi)有這么簡(jiǎn)單。
????? 我遇到的問(wèn)題:
??????大家可以看下語(yǔ)音采集部分,我是在每次通知后進(jìn)行語(yǔ)音采集然后就將采集到的語(yǔ)音發(fā)送到網(wǎng)絡(luò)上,如果運(yùn)行正常的話,這一部分?jǐn)?shù)據(jù)實(shí)際播放長(zhǎng)度遠(yuǎn)小于1秒。也就是說(shuō)對(duì)方每次接收到的語(yǔ)音長(zhǎng)度為毫秒級(jí)。而且如果網(wǎng)絡(luò)質(zhì)量可以的話,那么連續(xù)兩次接收到數(shù)據(jù)的時(shí)間間隔也是相當(dāng)小的。這樣就產(chǎn)生問(wèn)題了,如果我在接收到第一次數(shù)據(jù)后,將它寫入緩沖區(qū),然后調(diào)用相應(yīng)的播放方法,由于語(yǔ)音長(zhǎng)度實(shí)際很短,因此幾乎聽不到什么效果,而且可能發(fā)生當(dāng)?shù)谝淮尉彌_區(qū)中的數(shù)據(jù)還沒(méi)播放完,就已經(jīng)被第二次的數(shù)據(jù)覆蓋,導(dǎo)致聲音混亂。經(jīng)測(cè)試,此種方法無(wú)法達(dá)到聲音實(shí)時(shí)效果。期間我也曾修改過(guò)數(shù)據(jù)發(fā)送部分,希望當(dāng)語(yǔ)音長(zhǎng)度達(dá)到某一長(zhǎng)度時(shí)在發(fā)送,可是問(wèn)題依舊,看樣子重要的是在接收端進(jìn)行相應(yīng)處理。
??????直接緩沖播放的方法不行,那就換~~
?????上網(wǎng)搜,可惜的是這方面的資料實(shí)在有限,C#的就更少了。參考一些文獻(xiàn),大家提到利用在緩沖區(qū)設(shè)置兩個(gè)指針,一個(gè)播放指針,一個(gè)寫指針(寫指針用于表示當(dāng)前從網(wǎng)絡(luò)上接收到的數(shù)據(jù)從寫指針?biāo)甘疚恢瞄_始往下寫,播放指針則表示當(dāng)前所播放的數(shù)據(jù)末尾)。當(dāng)播放指針達(dá)到某個(gè)位置時(shí)就播放某一部分?jǐn)?shù)據(jù),而不影響將被寫入的緩沖區(qū)部分,這樣就可以很好的解決數(shù)據(jù)覆蓋的問(wèn)題。除此之外,還要將緩沖區(qū)設(shè)置為循環(huán)緩沖區(qū),也就是頭尾相接,當(dāng)?shù)竭_(dá)尾部時(shí),自己從部開始,此時(shí)將覆蓋頭部數(shù)據(jù)。
????? 看了這些,你是不是感覺(jué)很眼熟?是不是和語(yǔ)音采集很類似?是的,我們?cè)诓蹲骄彌_區(qū)中就是這樣設(shè)置的,我們利用通知來(lái)設(shè)置觸發(fā)事件。不同的是我們接收語(yǔ)音用的緩沖區(qū)并不是捕捉緩沖區(qū),MS為捕捉單獨(dú)設(shè)置了一個(gè)捕捉緩沖區(qū)。我們利用的是另一個(gè)緩沖區(qū),輔助緩沖區(qū)(SecondaryBuffer)。后來(lái)發(fā)現(xiàn)該緩沖區(qū)也有類似的通知,這意味什么?我當(dāng)時(shí)很興奮,可是~~相當(dāng)郁悶的是,我不管怎么設(shè)置通知,編譯時(shí)都會(huì)報(bào)錯(cuò),到外詢求答案,均無(wú)果。在 MS 相關(guān)網(wǎng)站上咨詢后,有一位叫jwatte的答案,讓我又高興又失望:

????? 原話如下:

????? Notify is broken in DirectSound, has been for a long time, and probably will never be fixed.

????? The only way to know when you need to play the next piece of data is to check the play pointer each time through your main loop, and then lock the buffer and fill in whatever part has been played out.

????? Also, DirectSound is now in "maintenance" mode, and won't be further developed by Microsoft. Instead, for game applications, they recommend you use XAudio2 to play sound.

????? 簡(jiǎn)單意思就是:Notify出問(wèn)題已經(jīng)很長(zhǎng)時(shí)間了,而且MS可能永遠(yuǎn)都不會(huì)去修復(fù)這個(gè)問(wèn)題。而且他也為播放聲音提供了些建議,這些建議與上面所講的基本一致。
??????至于這個(gè)答案是否正確,因?yàn)闊o(wú)從考證,就不再討論了。如果哪位高手曾經(jīng)實(shí)現(xiàn)過(guò),希望賜教。
??????既然目前無(wú)法正常使用,就只能來(lái)手動(dòng)寫了。這個(gè)方法名就是:GetVoiceData()。

??????思路如下:
????? ·利用MemoryStream來(lái)代表這個(gè)接收緩沖區(qū)。
????? ·設(shè)置兩個(gè)表示指針位置的字段:
????? ?? private int intPosWrite = 0;//內(nèi)存流中寫指針位移
????? ?? private int intPosPlay = 0;//內(nèi)存流中播放指針位移

??????·當(dāng)接收到數(shù)據(jù)后,則移動(dòng)寫指針,移動(dòng)的長(zhǎng)度為接收到的數(shù)據(jù)長(zhǎng)度。
????? ·利用一個(gè)字段表示通知大小:private int intNotifySize = 5000;
??????·當(dāng)寫指針的位置達(dá)到通知大小,則執(zhí)行播放操作,然后移動(dòng)播放指針到剛才的通知的位置。
????? ·如果當(dāng)前寫指針的位移與將要寫入到緩沖區(qū)的數(shù)據(jù)大小相加后超過(guò)緩沖容量的,則進(jìn)行摩爾運(yùn)算,實(shí)現(xiàn)循環(huán)的效果。
??????
?????? 這樣,基本上就可以實(shí)現(xiàn)語(yǔ)音聊天了??墒沁@樣的效果還只能是初步的,而且由于回聲的原因,相當(dāng)影響音質(zhì),還可能產(chǎn)生囂叫,為了解決這個(gè)問(wèn)題,我本打算采用MS提供的AEC算法,可是由于不知道如何實(shí)現(xiàn),一直無(wú)法得到效果,因此這也是比較遺憾的地方。
??????
??????可執(zhí)行文件(注:要在安裝了 .net framework 2.0 的平臺(tái)上運(yùn)行):MatureVoiceEXE.rar
????? 源文件:MatureVoice.rar
??

GetVoiceData()
????????private?int?intPosWrite?=?0;//內(nèi)存流中寫指針位移
????????private?int?intPosPlay?=?0;//內(nèi)存流中播放指針位移
????????private?int?intNotifySize?=?5000;//設(shè)置通知大小

????????
///?<summary>
????????
///?從字節(jié)數(shù)組中獲取音頻數(shù)據(jù),并進(jìn)行播放
????????
///?</summary>
????????
///?<param?name="intRecv">字節(jié)數(shù)組長(zhǎng)度</param>
????????
///?<param?name="bytRecv">包含音頻數(shù)據(jù)的字節(jié)數(shù)組</param>
????????public?void?GetVoiceData(int?intRecv,?byte[]?bytRecv)
????????{
????????????
//intPosWrite指示最新的數(shù)據(jù)寫好后的末尾。intPosPlay指示本次播放開始的位置。
????????????if?(intPosWrite?+?intRecv?<=?memstream.Capacity)
????????????{
//如果當(dāng)前寫指針?biāo)诘奈灰?#43;將要寫入到緩沖區(qū)的長(zhǎng)度小于緩沖區(qū)總大小
????????????????if?((intPosWrite?-?intPosPlay?>=?0?&&?intPosWrite?-?intPosPlay?<?intNotifySize)?||?(intPosWrite?-?intPosPlay?<?0?&&?intPosWrite?-?intPosPlay?+?memstream.Capacity?<?intNotifySize))
????????????????{
????????????????????memstream.Write(bytRecv,?
0,?intRecv);
????????????????????intPosWrite?
+=?intRecv;

????????????????}
????????????????
else?if?(intPosWrite?-?intPosPlay?>=?0)
????????????????{
//先存儲(chǔ)一定量的數(shù)據(jù),當(dāng)達(dá)到一定數(shù)據(jù)量時(shí)就播放聲音。
????????????????????buffDiscript.BufferBytes?=?intPosWrite?-?intPosPlay;//緩沖區(qū)大小為播放指針到寫指針之間的距離。
????????????????????SecondaryBuffer?sec?=?new?SecondaryBuffer(buffDiscript,?PlayDev);//建立一個(gè)合適的緩沖區(qū)用于播放這段數(shù)據(jù)。
????????????????????memstream.Position?=?intPosPlay;//先將memstream的指針定位到這一次播放開始的位置
????????????????????sec.Write(0,?memstream,?intPosWrite?-?intPosPlay,?LockFlag.FromWriteCursor);
????????????????????sec.Play(
0,?BufferPlayFlags.Default);
????????????????????memstream.Position?
=?intPosWrite;//寫完后重新將memstream的指針定位到將要寫下去的位置。
????????????????????intPosPlay?=?intPosWrite;
????????????????}
????????????????
else?if?(intPosWrite?-?intPosPlay?<?0)
????????????????{
????????????????????buffDiscript.BufferBytes?
=?intPosWrite?-?intPosPlay?+?memstream.Capacity;//緩沖區(qū)大小為播放指針到寫指針之間的距離。
????????????????????SecondaryBuffer?sec?=?new?SecondaryBuffer(buffDiscript,?PlayDev);//建立一個(gè)合適的緩沖區(qū)用于播放這段數(shù)據(jù)。
????????????????????memstream.Position?=?intPosPlay;
????????????????????sec.Write(
0,?memstream,?memstream.Capacity?-?intPosPlay,?LockFlag.FromWriteCursor);
????????????????????memstream.Position?
=?0;
????????????????????sec.Write(memstream.Capacity?
-?intPosPlay,?memstream,?intPosWrite,?LockFlag.FromWriteCursor);
????????????????????sec.Play(
0,?BufferPlayFlags.Default);
????????????????????memstream.Position?
=?intPosWrite;
????????????????????intPosPlay?
=?intPosWrite;
????????????????}
????????????}
????????????
else
????????????{
//當(dāng)數(shù)據(jù)將要大于memstream可容納的大小時(shí)
????????????????int?irest?=?memstream.Capacity?-?intPosWrite;//memstream中剩下的可容納的字節(jié)數(shù)。
????????????????memstream.Write(bytRecv,?0,?irest);//先寫完這個(gè)內(nèi)存流。
????????????????memstream.Position?=?0;//然后讓新的數(shù)據(jù)從memstream的0位置開始記錄
????????????????memstream.Write(bytRecv,?irest,?intRecv?-?irest);//覆蓋舊的數(shù)據(jù)
????????????????intPosWrite?=?intRecv?-?irest;//更新寫指針位置。寫指針指示下一個(gè)開始寫入的位置而不是上一次結(jié)束的位置,因此不用減一
????????????}
????????}

轉(zhuǎn)載于:https://www.cnblogs.com/seoxs/archive/2011/04/20/2021839.html

總結(jié)

以上是生活随笔為你收集整理的C#中利用Socket实现网络语音通信[初级版本]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

日韩中文在线视频 | 日韩在线字幕 | 能在线看的av | 日韩视频一区二区在线观看 | 91av国产视频 | 伊人六月| 91大神精品视频在线观看 | 国产精品黄 | aaa黄色毛片 | 欧美日韩一区二区免费在线观看 | 四虎影视成人永久免费观看视频 | 欧美激情综合网 | 992tv在线 | www.五月婷婷.com | 九九热免费观看 | 特级西西444www大精品视频免费看 | 日韩一级成人av | 成人观看视频 | 狠狠躁日日躁夜夜躁av | 曰韩在线| 国产成人精品一区二区在线 | 视频三区 | h视频日本 | 国产不卡免费视频 | 96av视频| 欧美日韩中 | 久久久久久久国产精品 | 国产精品资源在线观看 | 在线免费高清 | 久久久久久久影视 | 国产在线高清精品 | 国产又粗又猛又黄 | 久久久精品 一区二区三区 国产99视频在线观看 | 97超碰成人在线 | 国产成人1区 | 欧美在线视频精品 | 91一区二区三区在线观看 | 免费看一级特黄a大片 | 国产精品资源在线观看 | 久久国产精品网站 | 亚洲精品欧洲精品 | 欧美坐爱视频 | 国内精品免费久久影院 | 91亚洲精品视频 | 国产精品久99 | 激情欧美xxxx| 欧美91精品久久久久国产性生爱 | 成人三级视频 | 五月婷婷丁香综合 | av中文字幕在线播放 | 手机成人av在线 | 久久九九影视 | 欧美极品裸体 | 久久99久国产精品黄毛片入口 | 久久综合九色九九 | 粉嫩av一区二区三区四区五区 | 欧美国产在线看 | 丁香九月激情 | 久久精彩免费视频 | 亚洲成av人片在线观看无 | 热久久国产 | 色吊丝av中文字幕 | 欧美色图视频一区 | 天天综合导航 | 免费91麻豆精品国产自产在线观看 | 色停停五月天 | 国产日产欧美在线观看 | 亚洲视频一 | 日韩草比 | 久久久久久久久影视 | 黄色av电影在线 | 人人狠狠综合久久亚洲 | 国产视| 国内成人精品视频 | 高清久久久 | 1000部国产精品成人观看 | 日韩在线观看一区 | 国产一区二区高清不卡 | 波多野结衣小视频 | 激情网站| 一级黄色电影网站 | 国产精品theporn | 国产香蕉av| 精品国产一区二 | 欧美日韩中| 欧美精品一区二区在线播放 | 国产一区 在线播放 | 免费午夜在线视频 | 三级毛片视频 | 国产黄网站在线观看 | avhd高清在线谜片 | 六月激情 | 久草在线视频网站 | 五月天综合激情网 | 欧美色图视频一区 | 99在线观看免费视频精品观看 | 国产精品一区二区久久 | 免费视频区| 国产国产人免费人成免费视频 | 国产麻豆精品免费视频 | 久久国产成人午夜av影院潦草 | 亚洲国产日韩欧美 | 尤物97国产精品久久精品国产 | 欧美精品被| 日韩最新av在线 | 国产尤物视频在线 | 99av国产精品欲麻豆 | 国产高清福利在线 | 开心色婷婷 | 99久久精品无免国产免费 | 嫩草av在线| 成人综合婷婷国产精品久久免费 | 九九热在线观看 | 懂色av一区二区在线播放 | 久久综合中文色婷婷 | 中文字幕在线观看你懂的 | 亚洲精品国产精品国自产在线 | 探花视频在线观看+在线播放 | 六月色婷婷 | 久久免费观看少妇a级毛片 久久久久成人免费 | 最近最新中文字幕视频 | 国产精品久久久久久久久久久杏吧 | 99热只有精品在线观看 | 国产美女主播精品一区二区三区 | 500部大龄熟乱视频使用方法 | 日本久久99 | 日韩色综合 | 久草在线免费资源站 | 中文字幕一区二区三区在线观看 | 欧美日韩一区二区在线观看 | 亚洲视频久久 | 热久久视久久精品18亚洲精品 | 免费观看91 | 97免费视频在线播放 | 狠狠色噜噜狠狠 | 成人久久免费 | 国产精品免费不卡 | 国产91精品久久久久久 | 国产成人综合在线观看 | 亚洲最新视频在线播放 | 国产精品观看 | 久草视频视频在线播放 | 国产精品久久久久久69 | 成人免费观看在线视频 | 久久再线视频 | 最新一区二区三区 | 午夜av激情 | 欧美日韩亚洲一 | 久久成| 最近中文字幕视频完整版 | 97色婷婷人人爽人人 | 婷婷精品进入 | 中文字幕在线观看一区二区 | 国产精品99免费看 | 久久久久综合 | 国产一性一爱一乱一交 | 天天操天天摸天天射 | 欧美日韩视频免费看 | 亚洲人在线 | 天天激情 | 五月在线 | 久久一久久 | 精品国产乱码久久 | 黄色片网站 | 欧美日韩中文国产 | 久草视频免费观 | 成人av高清在线观看 | 国产视频资源在线观看 | 精品在线观看国产 | 欧美五月婷婷 | 伊人激情网 | 色伊人网| 国产精品久久久久久久久久直播 | 在线观看黄色国产 | 国产精品第一页在线观看 | 特级西西444www高清大视频 | 麻豆视频在线免费 | 婷婷日| 最新免费av在线 | 国产五月 | 四虎在线观看视频 | 亚洲午夜久久久久久久久久久 | 黄色在线视频网址 | 日韩欧美精品在线视频 | 丁香婷婷综合激情五月色 | 最近中文字幕大全中文字幕免费 | 青青草国产成人99久久 | 国产又粗又长的视频 | 天天做日日爱夜夜爽 | 久久综合久久久久88 | 九九九热精品 | 99精品国产一区二区三区不卡 | 超碰在线97免费 | 中文字幕在线观 | 国产精品videoxxxx | 日韩三级免费 | 久久夜av | 久草视频手机在线 | 深夜激情影院 | 丝袜网站在线观看 | 九九在线高清精品视频 | 精品a级片 | 极品国产91在线网站 | 在线综合 亚洲 欧美在线视频 | 九九热视频在线免费观看 | 日黄网站| 成人黄色av免费在线观看 | 91在线精品播放 | 精品国产一区在线观看 | 成人91在线 | 欧美黄污视频 | 中文字幕视频一区 | 国产精品69av| 不卡精品视频 | www.天天干 | 国产精品专区在线观看 | 97av影院| 99精品在线视频播放 | 天天干天天干天天干 | 天天操天天爱天天爽 | 精品久久久一区二区 | 亚洲一级黄色片 | 亚洲精品久久久久58 | 欧美日韩中文在线视频 | 婷婷在线免费观看 | 日本一区二区不卡高清 | 日韩美女免费线视频 | 精品在线看 | 免费欧美 | 久久无码av一区二区三区电影网 | 亚洲国产日韩一区 | 岛国精品一区二区 | 探花视频免费观看 | 欧美日韩高清一区二区 | 亚洲国产精品成人女人久久 | 日本在线视频一区二区三区 | 91日韩精品 | 日韩午夜三级 | 91人网站 | 国产精品高清一区二区三区 | 日韩视频一区二区三区在线播放免费观看 | 手机av资源 | 亚洲精品在线资源 | 一区在线观看 | a黄色一级 | 久久亚洲欧美日韩精品专区 | 麻豆成人精品 | 久久国产视频网站 | 又爽又黄又刺激的视频 | 日本爱爱免费 | 欧美在线观看小视频 | 正在播放国产一区二区 | 日韩欧美国产视频 | 狠狠的操| www.久久成人 | 国产成人一区二区三区 | 天堂在线视频中文网 | 国产亚洲精品成人av久久影院 | 久99视频| 日本在线观看中文字幕无线观看 | 中文字幕黄色 | 中文字幕免费高清av | 日本电影久久 | 欧美在线观看小视频 | 中文字幕在线观看不卡 | 在线黄色国产电影 | 免费黄在线观看 | 日本爽妇网 | 免费在线观看视频a | 麻豆精品91| 黄色91免费观看 | 欧美久草视频 | 天天干天天拍天天操天天拍 | 最新色站| 国产精品成人一区二区三区 | 深爱五月激情网 | 99精品福利 | 欧美一级视频免费 | 中文字幕在线高清 | 久久免费视频5 | 婷婷社区五月天 | 国产精品色婷婷视频 | 色在线免费观看 | 丁香资源影视免费观看 | 婷婷色在线资源 | 亚洲精品乱码久久 | 天天狠狠干 | 国产精品久久久久久吹潮天美传媒 | 最新免费av在线 | 97国产大学生情侣白嫩酒店 | 狠狠躁日日躁狂躁夜夜躁 | www.xxxx欧美 | 婷婷色伊人 | 人人爽人人爽av | 午夜91在线| 婷久久 | 91麻豆传媒 | 色综合夜色一区 | 国产色视频网站 | 国产不卡免费视频 | 一区二区三区影院 | 日韩成人不卡 | 国产专区日韩专区 | 欧洲亚洲激情 | 日日弄天天弄美女bbbb | 久久久久免费精品 | 日韩视频一区二区在线观看 | 一区二区视频在线免费观看 | 99国产一区二区三精品乱码 | 久久人人爽人人爽人人片av软件 | 午夜 久久 tv | 91久久丝袜国产露脸动漫 | 日韩草比| 亚洲另类久久 | 青青河边草观看完整版高清 | 久久综合久久综合这里只有精品 | 国产精品久久久久国产精品日日 | 一本一本久久a久久精品综合妖精 | 五月天久久久久 | 天天摸日日摸人人看 | 最近高清中文字幕 | 狠狠天天| a黄色片在线观看 | 亚洲国产高清在线 | 国产精品久久久久久久久久三级 | 久久久久福利视频 | 国产精久久久久久妇女av | 成人av一级片 | 中文字幕在线专区 | 99热最新在线 | 国产精品女人久久久 | 一级α片免费看 | 狠狠网 | 天天视频亚洲 | 免费网站v| 在线观看的av | 亚州国产精品久久久 | 黄色成年 | 中文 一区二区 | 丁香花在线观看免费完整版视频 | 久久美女精品 | 97精品在线 | 97久久久免费福利网址 | 丁香婷婷深情五月亚洲 | www.91成人 | 美女网站视频色 | 色之综合网 | 最新国产视频 | 久久一区二区三区国产精品 | 欧美韩日精品 | 91成人在线观看喷潮 | 国产亚洲在线视频 | 日日夜夜骑 | 六月丁香在线观看 | 不卡的av片 | 成年人免费观看国产 | 九九九九热精品免费视频点播观看 | 99精品视频在线播放观看 | 国产精品女同一区二区三区久久夜 | 欧美日本啪啪无遮挡网站 | 爱爱一区 | 国产专区一 | 一级a性色生活片久久毛片波多野 | 精品专区| 激情电影影院 | 97在线观看视频免费 | 久久综合日 | 欧美在线视频精品 | 97人人模人人爽人人少妇 | 韩国精品在线 | 久久精品一级片 | 久久精品国产一区二区三 | 99精品在线直播 | 亚洲国产成人在线观看 | 在线 视频 亚洲 | 久久久黄视频 | 欧美成a人片在线观看久 | 午夜精品久久久久久久99水蜜桃 | 精品国偷自产在线 | 黄色av播放 | 久久久久亚洲精品 | 国产 欧美 日产久久 | 丁香伊人网 | 国产1级毛片 | 狂野欧美激情性xxxx欧美 | 97看片| av线上看 | 国产高清在线免费 | 天天se天天cao天天干 | 久久久久国产a免费观看rela | 日韩精品久久中文字幕 | 99热这里| 欧美小视频在线 | 亚洲综合小说电影qvod | 欧美激情片在线观看 | 午夜精品视频一区二区三区在线看 | 色婷婷亚洲 | 久久久久久久久久亚洲精品 | 欧美日韩一区二区三区免费视频 | 日韩中文字幕免费电影 | 色搞搞 | 视频精品一区二区三区 | 97在线观看免费观看高清 | 久久九九九九 | 97日日碰人人模人人澡分享吧 | av永久网址| 九九热精品视频在线播放 | 日韩免费福利 | 黄色中文字幕在线 | 国产成人一区二区三区影院在线 | 91亚瑟视频 | 亚洲一二三区精品 | 亚洲精品乱码白浆高清久久久久久 | 99精品国产99久久久久久97 | 国产一区二区在线播放 | 欧美日在线 | 亚洲经典视频在线观看 | 91精品免费看 | 久久综合婷婷国产二区高清 | 久久久久久久免费看 | 国产精品久久久久久久久毛片 | 久久精品久久精品久久39 | 成人午夜在线电影 | 日韩精品高清视频 | 精品国产1区2区3区 国产欧美精品在线观看 | 国产日韩视频在线 | 午夜视频在线观看一区二区三区 | 欧美综合色在线图区 | 国产美女视频免费观看的网站 | 超碰国产在线播放 | 爱射综合 | 999成人 | 色婷婷狠狠干 | 久久成年人网站 | 在线免费日韩 | 国产免费叼嘿网站免费 | 欧美 激情 国产 91 在线 | 天天操天天色天天 | 久久久麻豆 | 成人资源在线播放 | 色欧美视频 | 丝袜av一区 | 久久久久久久久久久影院 | 精品福利在线 | 在线观看完整版 | 开心激情久久 | 午夜 久久 tv| 中文字幕亚洲综合久久五月天色无吗'' | 日韩一级黄色大片 | 久久精品这里都是精品 | 国产成人精品一区二区在线观看 | 久久成人18免费网站 | 久99久精品 | 国产在线观看一 | 国产成人精品久 | 国产v在线播放 | 五月婷丁香 | 97超在线视频 | 精品在线视频一区 | a级片韩国 | 成人黄在线 | 日产乱码一二三区别免费 | 网站在线观看你们懂的 | 国内精品久久久久久久久久久 | 97视频在线观看免费 | av.com在线| 久久综合九色综合欧美就去吻 | 激情视频在线观看网址 | 欧美高清视频不卡网 | 啪啪凸凸 | 欧美视频在线二区 | 99爱国产精品 | www欧美色 | www.91av在线| 女人18片 | 黄色一区三区 | 国产在线观看,日本 | 中文字幕一区二区三区久久 | 欧美福利精品 | 尤物97国产精品久久精品国产 | 96国产精品视频 | 国产精品久久一区二区三区, | 成人欧美亚洲 | 婷婷六月综合网 | 亚洲激情校园春色 | 国产黄色播放 | 亚洲精品综合一二三区在线观看 | av成人在线电影 | 在线观看黄网站 | 成人黄色在线电影 | 超碰国产在线观看 | 欧美影片 | 免费网站黄色 | 国产精品伦一区二区三区视频 | 久久香蕉电影网 | av手机版 | 96精品高清视频在线观看软件特色 | 日韩大片在线免费观看 | 久久久国产精品一区二区三区 | 国产成人精品久久久 | av在线电影网站 | 欧美日韩在线免费观看视频 | 久久er99热精品一区二区三区 | 亚洲国产精品500在线观看 | 五月婷婷导航 | 国产h在线观看 | 国产在线观看免费 | 97精产国品一二三产区在线 | 久久99久久99免费视频 | 国产精品高潮久久av | 成人影片在线免费观看 | 一区二区三区高清 | 黄色av成人在线观看 | 欧美精品一区二区免费 | 日本中文字幕久久 | 成人a视频片观看免费 | 精品99在线 | 精品久久久久一区二区国产 | 国产伦精品一区二区三区四区视频 | 午夜在线免费观看视频 | 国产精品日韩欧美一区二区 | 成人a在线观看高清电影 | 91在线看| www.色婷婷.com| 国产精品18久久久久久vr | 91成人在线网站 | 在线免费观看黄色大片 | 丁香婷婷激情网 | 色资源网在线观看 | 久久夜色精品国产欧美乱极品 | 日韩av黄 | 欧美一级久久 | 精品国产乱码久久 | 人人爱在线视频 | 亚洲高清激情 | 国产成本人视频在线观看 | 欧美亚洲精品在线观看 | 国产视频一区二区在线播放 | 欧美激情精品久久久久久变态 | 国产黄色av网站 | 天堂av免费观看 | 激情综合网五月婷婷 | 91福利国产在线观看 | 国产福利a | 看v片| 久99久视频 | 国产精品久久久久永久免费观看 | 精品欧美一区二区三区久久久 | 天天伊人狠狠 | 久久久96 | 人人干人人做 | 欧美电影黄色 | 亚洲 精品在线视频 | www黄色com| 在线午夜电影神马影院 | 又黄又爽又色无遮挡免费 | 日韩在线观看一区二区三区 | 4438全国亚洲精品观看视频 | 色多多视频在线观看 | 国内精品美女在线观看 | 在线国产福利 | 在线国产精品一区 | 久久久久久久久艹 | 在线国产欧美 | 亚洲精品国产麻豆 | 视频在线观看国产 | 日韩在线一区二区免费 | 黄a在线 | 五月天婷亚洲天综合网鲁鲁鲁 | 亚洲首页 | 婷婷在线色 | 在线观看国产高清视频 | 欧美日韩不卡在线视频 | 伊人狠狠色 | 日韩av手机在线看 | 999精品| 日日夜夜中文字幕 | 欧美成人影音 | 中文字幕888 | 337p日本欧洲亚洲大胆裸体艺术 | 91精品久久香蕉国产线看观看 | 日韩综合在线观看 | 日韩久久久久久久久 | 四川妇女搡bbbb搡bbbb搡 | 99电影456麻豆 | 四虎在线视频免费观看 | 久久在线视频精品 | 91免费看片黄 | 日韩在线视频线视频免费网站 | 成人网444ppp | 日韩久久精品 | 蜜臀av.com | 国产黄a三级 | 99精品国产成人一区二区 | 国内三级在线 | av在线播放免费 | 波多野结衣一区三区 | av成年人电影 | 亚洲狠狠操 | 国内精品视频久久 | 九九免费在线看完整版 | 天天爽夜夜爽精品视频婷婷 | 色多多在线观看 | 国产精品黑丝在线观看 | 一区在线观看视频 | 欧美激情视频久久 | 久久福利国产 | 一区二区三区福利 | 国产一区免费观看 | 亚洲久在线 | .国产精品成人自产拍在线观看6 | 视频成人 | 色婷婷综合久色 | 丁香婷婷网| 嫩嫩影院理论片 | 免费色视频网站 | 欧美一区二区三区特黄 | 色大片免费看 | 麻豆91精品91久久久 | 91精品久久久久久久久久入口 | 亚洲精品久久激情国产片 | 天堂入口网站 | 亚洲丁香久久久 | 少妇自拍av | 色婷婷丁香 | 在线免费观看麻豆视频 | 麻豆一区二区三区视频 | 国产a精品 | 欧美性护士 | 99热这里| 成人av电影免费观看 | 在线观看亚洲精品 | 99久久99热这里只有精品 | 久久国产二区 | 一区二区三区在线观看免费视频 | 久草热久草视频 | 91亚洲国产成人久久精品网站 | 欧美色888 | 国产99在线 | 欧美性护士 | 一区二区中文字幕在线观看 | 91传媒免费观看 | 91九色在线播放 | 91精品国产91久久久久久三级 | 97精品在线视频 | 免费观看的黄色 | 欧美日韩高清一区二区 国产亚洲免费看 | 久久久亚洲国产精品麻豆综合天堂 | 久久成人18免费网站 | 日韩av电影国产 | 久久精品欧美 | 精品婷婷 | 国产精品久久久99 | 日韩高清不卡一区二区三区 | 中文字幕一区在线 | 日韩网站一区 | 国产亚洲精品久 | 日韩av网页| 特级西西444www大精品视频免费看 | 91中文字幕视频 | 精品久久亚洲 | 美女黄视频免费看 | 一本色道久久综合亚洲二区三区 | 96精品视频 | 婷婷丁香综合 | 久草视频在线资源站 | 99视| 精品久久久久久久久久岛国gif | 天天草综合 | 黄视频网站大全 | av综合网址| 久久综合狠狠综合久久综合88 | 91视视频在线直接观看在线看网页在线看 | 天天看天天干天天操 | 国产99久久久精品 | 国产精品丝袜 | 国语精品视频 | 国产亚洲无 | av一级一片 | 91av免费在线观看 | 天堂av在线网站 | 亚洲黄网站 | 五月天激情婷婷 | 91香蕉视频色版 | 一区二区三区污 | 国产免费看 | 日韩精品免费一区二区三区 | 午夜精品视频福利 | 亚洲精选视频在线 | 久久国语露脸国产精品电影 | 国产一区二区三区免费在线观看 | 天堂av免费观看 | 久热超碰 | 就要干b | 日韩中文字幕a | www.xxxx变态.com | 亚洲欧美精品一区 | www.亚洲黄 | 综合中文字幕 | 久久久久成| 午夜在线观看影院 | 亚洲伊人网在线观看 | 久久精品99国产精品日本 | 一区二区观看 | 久久精品在线视频 | 视频国产在线观看18 | 欧美一级黄大片 | 亚洲人成人在线 | 91精品视频免费在线观看 | 欧美性生交大片免网 | 久久国产手机看片 | 国产视频日本 | 91在线国内视频 | 国产美女免费观看 | 激情综合五月天 | 国产欧美综合在线观看 | 美女视频黄免费 | 免费看黄色毛片 | 天天操狠狠操 | av免费在线播放 | 久久久久久国产精品 | 国产成人一区二区啪在线观看 | 国产黄色片久久 | 玖玖玖国产精品 | 精品国产视频在线观看 | 久人人 | 国产不卡网站 | 性色xxxxhd| 午夜丰满寂寞少妇精品 | 久久黄色网 | www.夜色.com | 激情文学丁香 | 久草精品视频在线播放 | av黄色免费看 | 丰满少妇在线观看 | 成人在线视频你懂的 | 久久这里有精品 | 99久久综合国产精品二区 | 免费观看国产精品视频 | 天天做天天爱天天爽综合网 | 欧美日韩在线播放 | 色婷婷成人网 | 国产成人在线综合 | 九九热在线视频 | 国产不卡在线播放 | 99精品视频在线看 | 999久久久| 久久官网 | 国产在线黄 | 综合久色 | 亚洲国产欧美在线人成大黄瓜 | 青青久草在线 | 国产女教师精品久久av | 一级黄色免费网站 | 97色在线观看免费视频 | 中文字幕在线视频国产 | 久久久国产精品久久久 | 婷婷色六月天 | 亚洲精品视频在线观看免费视频 | 97国产小视频 | 国产精品麻豆果冻传媒在线播放 | 69av视频在线观看 | 亚洲欧洲国产视频 | 国产一级免费观看视频 | av一区二区三区在线 | 日韩国产欧美在线播放 | 免费亚洲成人 | 97超视频免费观看 | 米奇狠狠狠888 | 欧美一二三专区 | 天天色天天操综合网 | 97人人澡人人爽人人模亚洲 | 日日骑| 亚洲激情视频 | 国产清纯在线 | 欧洲精品在线视频 | 麻豆视频在线免费观看 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 99热99re6国产在线播放 | 成人久久精品视频 | 日韩av快播电影网 | 人人玩人人添人人澡超碰 | 免费进去里的视频 | 开心色婷婷 | 亚洲精品乱码白浆高清久久久久久 | 日韩综合一区二区三区 | 免费中文字幕视频 | 中文视频在线 | 黄色一级大片在线观看 | 久久av不卡 | av永久网址| 五月天激情综合 | 91av手机在线 | 久久久久久美女 | 五月天婷婷在线播放 | 亚洲黄色免费电影 | 99久久精品国产免费看不卡 | 激情自拍av| 亚洲丝袜中文 | 国产免费高清 | 国产乱老熟视频网88av | 久久久国产精品成人免费 | 最近中文字幕高清字幕免费mv | 国产一二三区av | 色综合中文字幕 | 中文字幕在线播放视频 | 99精品视频在线观看 | 五月激情姐姐 | 一区二区三区动漫 | 亚洲国产三级在线 | 伊人永久在线 | 国产一区二区电影在线观看 | 曰韩精品| 一区二区av| 成人av在线直播 | 久久超级碰视频 | 日韩在线观看你懂的 | 91久久一区二区 | 黄色三级在线观看 | 久草在线免费看视频 | 激情 一区二区 | 免费高清在线观看电视网站 | 黄网站色欧美视频 | 国产黑丝袜在线 | 精品国产1区 | 亚洲精品乱码久久久久久9色 | 美女中文字幕 | 欧美日韩视频一区二区 | 免费看v片网站 | 国产精品第一视频 | 日日夜夜天天综合 | 久久不卡免费视频 | 精品久久免费 | 欧美日韩国产一二 | 国产91在线观 | 色婷婷狠狠干 | 高清国产在线一区 | 国产亚洲精品xxoo | 激情丁香综合五月 | 日韩成人免费电影 | 国产在线不卡视频 | 日韩精品一区二区三区免费视频观看 | 国产一二三四在线观看视频 | 在线99| 999久久久久 | 久久精品在线视频 | 欧美黄在线 | 国产成人一区二区精品非洲 | 国产在线精品观看 | 国产不卡视频在线播放 | 在线播放 一区 | 久久伊人色综合 | 日日日操| 色av色av色av | 在线观看 国产 | 狠狠操天天干 | 中文字幕在线视频一区 | 三日本三级少妇三级99 | 色偷偷888欧美精品久久久 | 中文字幕在线观看2018 | 久久成人高清 | a v在线观看| 久久综合国产伦精品免费 | 在线看国产视频 | 日韩在线免费视频 | 亚洲精选99 | 91你懂的 | 久久久精品国产免费观看同学 | 欧美视频在线二区 | 一区二区丝袜 | 激情婷婷亚洲 | 日本韩国精品一区二区在线观看 | 亚洲精品麻豆 | 日韩黄色在线电影 | 国产一区二区高清 | 福利视频网站 | 欧美一级视频免费 | 久久国产精品99久久久久久进口 | 午夜10000 | 欧美日韩精品二区第二页 | 日韩二区三区在线 | 中文字幕日本特黄aa毛片 | 成人一级片免费看 | 亚洲 综合 国产 精品 | 国产免费观看久久 | 91免费日韩 | 久久神马影院 | 在线99热| 天天综合成人网 | 波多野结衣电影一区 | 欧美日韩视频免费 | 黄色在线看网站 | 福利视频一区二区 | 久久视频这里有久久精品视频11 | 国产中文 | 在线岛国av | 精品一区二区在线观看 | 亚洲成人av片在线观看 | 免费观看完整版无人区 | 国产精彩视频一区 | 三级黄色片在线观看 | 久久最新 | 国产成人免费网站 | 欧美一区二区三区激情视频 | 中文字幕文字幕一区二区 | 超碰97网站 | 蜜桃视频在线观看一区 | 91av视频在线免费观看 | 久久精品最新 | 日韩a欧美 | 一级黄色片在线播放 | 日韩理论片在线观看 | 欧洲av不卡 | 久久久精品网 | 久久香蕉影视 | 天天色天天色天天色 | 中文字幕在线看片 | 91人人在线| 亚洲国产中文在线观看 | 亚洲欧美经典 | 在线av资源 | 在线免费观看黄色 | 亚洲 欧美 变态 国产 另类 | 四虎永久精品在线 | 91精品国产一区二区在线观看 | 日韩精品一区电影 | 特及黄色片 | 色婷婷啪啪免费在线电影观看 | 成人一级影视 | 亚洲精品玖玖玖av在线看 | 91av社区| 成人av网站在线播放 | 黄网站色视频免费观看 | 国产精品成人自产拍在线观看 | 国产精品精品 | 美女在线观看网站 | 一区二区亚洲精品 | 亚洲国产av精品毛片鲁大师 | 国产精品一区二区久久久久 | 亚洲激情p | 四虎国产精品成人免费影视 | 999精品视频 | 国产96在线视频 | 亚洲天天在线 | 久久99网 | 伊人久操 | 911精品美国片911久久久 | 97视频在线观看播放 | 亚洲一级电影在线观看 | 亚洲黄在线观看 | 久久国产精品99国产 | 天天操夜夜叫 | 麻豆成人网 | 国产福利中文字幕 | 在线不卡a | 91黄色免费看 | 最新婷婷色 | 激情网五月天 | 久久激情五月激情 | 亚洲女在线 | 国产精品久久久久一区二区三区 | 欧美久久久久久 | 久久久久免费精品国产小说色大师 | 国产午夜精品一区二区三区四区 | 91精品国产乱码久久桃 | 久艹在线观看视频 | 亚洲久草在线 | 香蕉免费在线 | 国产黄色片久久 | 在线看毛片网站 | 精品国产一区二区三区久久影院 | 国产日本在线观看 | 欧美一区日韩一区 | 99久久99久久免费精品蜜臀 | 97久久久免费福利网址 | 久久久一本精品99久久精品66 | 亚洲天堂色婷婷 | 国产麻豆精品传媒av国产下载 | 亚洲闷骚少妇在线观看网站 | 国产一区网址 | 天天综合五月天 | 制服丝袜天堂 | 五月天亚洲激情 | 午夜视频在线观看一区二区 | 欧美综合在线视频 | 激情视频国产 | 久久久久久久久综合 | 国产精品黄色影片导航在线观看 | 日韩在线精品视频 | 天堂中文在线视频 | 日韩成人在线一区二区 | 国产精品美女www爽爽爽视频 | 成 人 黄 色 片 在线播放 | 一区二区中文字幕在线 | 欧美亚洲一区二区在线 | 国产免码va在线观看免费 | 久久久久一区 | 久久精品视频在线免费观看 |