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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Cisco IP电话软件的WINRTP

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cisco IP电话软件的WINRTP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

縱覽Overview of this Document

介紹Introduction

更新What's New

功能Features

組件及安裝Components and Installation

源碼發布Source Code Distribution

二進制發布Binary Distribution

安裝Installation

測試程序Test Program

接口描述/程序員指南Interface Description/Programmer’s Guide

WINRTP COM?接口WINRTP COM Interface

WINRTP接口詳解(ICCNMediaDetails of WINRTP Interface (Interface ICCNMediaTerm)

COMGUID?COM GUIDs, etc

可選參數?Configurable Parameters

靜態/動態 抖動緩沖器?Static/Dynamic Jitter Buffer

抖動緩沖區大小Jitter Buffer Length

接收的RTP音頻流放大等級?Level of Auto-Amplification of incoming RTP audio streams

發送的RTP包的TOSType of Service Value (DiffServ Byte) of Outgoing RTP Packets

指定UDP傳輸端口Fixed Transmit Port for UDP Packets

發送音頻的預加重Pre-emphasis of transmitted audio

接受音頻的后加重Post-emphasis of received audio

音量限制Volume Limiting

示例代碼Sample Code

未來的改進Future Improvements

?

This document describes the?WinRTP?for the Cisco IP?SoftPhone?from a programmer’s point of view. It discusses the COM interface it provides, installation, and configuration of the component.

?此文檔以程序員的視角描述了用于Cisco IP電話軟件的WINRTP。它論述了WINRTPCOM接口、安裝以及各組件的配置。

介紹

The?WinRTP?(WINRTP) was developed as part of the Cisco IP?SoftPhone?product. Cisco IP?SoftPhone?is a PC based telephone integrated with AVVID, and works with the Cisco Call Manager. The primary focus of the WINRTP is to ensure that it works well with other products in AVVID including desktop IP Phones,?gateways,?etc.It?can also be used as an independent component.

·????????It?is written in C++

·????????It?is a COM component. (Not an ActiveX control). This makes it easy to use using any programming language like C/C++/Java (using J/Direct) etc.???

?開發WinRTP是作為Cisco IP?SoftPhone產品的一部分。Cisco IP?SoftPhone是基于個人電腦的集成AVVID的電話,它和Cisco Call Manager一起工作。WINRTP的主要目的是確保此產品同AVVID(語音、視頻和集成數據體系架構)良好的工作,包括桌面IP電話、網關等等。當然,它也可以作為單獨組件使用。

The basic job of the WINRTP is to source and sink audio streams to/from the network.?So if an application needs the ability to do audio?endpointing?for real time voice (especially one that is integrated with Cisco’s AVVID), it can use this component.

?WINRTP基礎的工作是發起和接收網絡上的音頻流。如果一個應用軟件需要實時語音的支持(特別是當它集成了CiscoAVVID),它可以使用WINRTP組件。

?更新

Here are the improvements since the last version

這里是新版本的改進:

  • Completely standalone package – Compatible with all flavors of desktop Windows starting from Windows 95. Uses standard .DLL files that come with all Windows flavors?完全獨立的包—兼容所有從windows95以來的版本,使用標準DLL適用所有windows
  • Simple distribution: just two DLL's, no more .ax files. Also, the whole software is less than 300 Kbytes?簡單的發布:只有兩個DLL,再無.ax文件,整個軟件小于300K字節
  • Support for multiple sound cards?支持多聲卡
  • Dynamic jitter buffer algorithm option: it is very simple, but it works most of the time?動態抖動緩沖設置:簡單而有效
  • Audio quality enhancements: including pre-emphasis and post-emphasis of audio to make it sound sharper, automatic amplification of the incoming RTP audio stream?聲音質量改善:添加音頻預增強和后增強,使聲音清晰?。自動增大RTP音頻流。
  • Others: Volume limiter algorithm in case you want to use it.?其它:需要時可以音量限制
  • Comes with pre-built binaries for your convenience??帶有預先編譯好的二進制文件,便于用戶使用
  • Ability to play any wav file. Previous format restrictions removed. Also, now you can play as many files at the same time as you want??取消先前格式限制支持播放任何wav?文件。并且,可以同時播放多個文件。

?功能

WINRTP consists of two independent parts. One part has the ability to capture the user’s voice (using the system’s microphone), encode it, and send the voice as an RTP (Real Time Protocol) stream to a configurable destination. The other part listens for an RTP stream from the network, extracts the audio from it, and plays it using the PC’s speaker. When both parts are used together, then WINRTP acts like an IP based voice endpoint. Here are the features in short

WINRTP?包含獨立的兩部分。其一提供捕捉用戶聲音、編碼及以RTP流形式發送語音的功能,另一部分在網絡上監聽RTP流,從中解出音頻并播放。當這兩者在一起使用的時候,可以扮演一個基于IP的語音終端,下面是簡要的功能介紹:

  • Support for multiple sound devices:?This version of?WinRTP?supports multiple sound devices. This means you can independently choose which audio device to use for transmit and receive if there are multiple audio devices in your PC (for e.g. you have a sound card as well as an USB headset)?????????????

支持多個音頻設備:?此版本WinRTP支持多音頻設備。這樣,如果你的PC上有多個音頻設備,你可以自由地選擇使用那個設備去發送和接收。

  • Number of streams:?currently, only one incoming audio stream and one outgoing audio stream are supported. This is because WINRTP uses the sound card, and only one application can use the system’s speaker or microphone at a time.

流數量:現在只支持一個輸入音頻流和一個輸出音頻流。這是因為WINRTP聲卡,同時只有一個應用程序可以使用系統揚聲器或麥克風。

  • Codec Support:?G.711 64kbps (both?ALaw?and?ULaw). The version used in Cisco IP?SoftPhone?comes with support for G.723 and G.729. However, due to licensing restrictions, that support has been removed from the open source version of?WinRTP. This explains some of the parameters (like G723BitRate) in some of the calls in the interface

Codec支持:G.711 64kbpsALawULaw)。在Cisco IP?SoftPhone中使用的版本支持G.723??G.729。然而,由于許可限制,這些支持從開源版本的Winrtp中移除了。這說明了在接口調用中存在某些像G723BitRate這樣參數的原因。

  • Support for Audio Mixing:?WINRTP allows the mixing of other audio streams (from WAV files) to be mixed with the incoming and outgoing audio streams.

混音支持:?WINRTP允許輸入或輸出音頻流混合其它來自WAV文件的音頻流。

  • Volume Control Support:?WINRTP supports setting the volume level for the Microphone, Speaker, and each file that is being mixed in the audio streams.

音量調節支持:WINRTP支持設置麥克風、揚聲器以及被混音的音頻流的音量。

  • Silence Suppression:?WINRTP supports silence suppression (Voice Activity Detection - VAD) of the outgoing streams. This means that if it detects silence (user is not speaking) then it stops sending outgoing RTP packets to conserve network bandwidth.

靜音抑制:WINRTP支持輸出流的靜音抑制(聲音活動性檢查VAD)。這就是說,如果發現靜音(用戶沒說話),它可以停止輸出RTP包,以節省網絡帶寬。

  • QoS?Support:?WINRTP supports?DiffServ?(IP Type of Service-TOS) packet tagging for outgoing RTP packets.

Qos支持:WINRTP支持在輸出RTP包中標示DiffServ?

  • RTP Implementation:?Encoding and decoding of RTP packets.
    • WINRTP does not support RTCP, but it does sink RTCP packets sent by the other end to prevent ICMP messages due to discarded packets.

RTP?實現:編碼和解碼RTP包。

????????????WINRTP不支持RTCP,但是它可以接收其它端發來的RTCP包,以免ICMP消息導致的丟包。

  • Independence?of transmit/receive sides:?The transmit and receive sides are independent, and that means
    • Different?codecs?may be used for transmit and receive
    • User can choose to do only one of the two operations

發送和接收端的獨立性:發送和接收端是獨立的,這就是說:

??????發送和接收可以使用不同的codecs(多媒體數字信號編解碼器)

??????用戶可以選擇只做其中某項操作。

  • Operating Systems Supported:?All flavors of windows Windows95 and later, including Windows NT (Service Pack 3 onwards), Windows ME and Windows 2000/XP

操作系統支持:支持Windows95以后的版本,包括WindowsNTWindowsME?及Windows2000/XP

  • Configurable/Dynamic Jitter Buffer:?The depth of the jitter buffer can be specified, or a dynamic jitter buffer can also be used

可配置動態的抖動緩沖:可以設置抖動緩沖的深度值,也可以使用動態抖動。

  • DSP algorithms:?like pre-emphasis and post-emphasis to make the audio sound sharper. Volume limiting to control the max volume, and auto-amplification of incoming RTP audio streams

DSP算法:?如預加重及后加重使聲音更清晰,音量限制控制最大音量,自動放大輸入的RTP音頻流。

?組件及安裝

The distribution comes with both source code and binaries. Extract the ZIP file to obtain everything. It will create a directory calledWinRTP, which will contain everything.

發行版同時包含了源代碼及二進制文件。解開ZIP文件,可以得到所有文件。

?源代碼發布

Build Order?編譯?順序

  • TracerServer??
  • Tracer
  • CCNMediaTerm
  • This will create TraceServer.dll and CCNSMT.dll. Build these projects either in Debug or Release mode.

    ?這將建立TraceServer.dll?CCNSMT.dll?兩個文件,請在DebugRelease兩個模式下都編譯。

    ?二進制發布

    WINRTP binary distribution consists of two DLL files under the?WinRTP?directory. The main COM DLL (CCNSMT.dll) that exposes the WINRTP interface is about 200Kbytes while the other (TraceServer.dll) DLL (used for tracing) is 28Kbytes

    WINRTP的二進制發布在WinRTP目錄下包含了兩個DLL文件。主要的COM?動態鏈接庫(CCNSMT.dll)提供給我們WINRTOP的接口,大概200K字節大小。TraceServer.dll?28K字節。

    安裝

    Third Party Dependencies?第三方依賴

    ????????????None?

    Location of Distributed Files?文件位置:

    • TraceServer.dll: Put TraceServer.dll in the SYSTEM directory of windows (i.e. /WINDOWS/SYSTEM of win95/98/ME or /WINNT/SYSTEM32 on win nt/2000??

    TraceServer.dll:?TraceServer.dll?放到windows的系統目錄(如?win95/98/ME??下的/WINDOWS/SYSTEM??winNT/200下的?/WINNT/SYSTEM32?

    • CCNSMT.dll: This is a COM component, so its location is not important as long as it is registered with the system. It is recommended that it be kept all together in a separate directory or in the directory of the application that is using the?WinRTP.

    CCNSMT.dll:?這是一個COM組件,當它被系統注冊以后它的位置已經不重要。推薦將它保存在一個單獨的目錄中或使用WINRTP的應用程序目錄。

    Final Install Steps?最后一步:

    ????????????All COM objects must be registered before WINRTP can be used. For this, use the regsvr32 program that comes with windows (it may be found in the system directory)

    ????????????所有COM對象在使用前必須進行注冊,對于WINRTP,我們可以使用windows自帶的regsvr32程序完成,命令如下:

    • Regsvr32 CCNSMT.dll

    ?

    ?測試程序

    There is also a test program (both source code and binary) that is available. It is a simple program that does not exercise all the features. It just connects your default microphone to your default speaker for 5 seconds so that you can hear yourself, and then exits. The source code is in the “WinRTP/TestWinRTP” folder and the binary is WinRTP/TestWinRTP.exe

    ?

    這里還包含一個供測試用的程序(源代碼及二進制)。它是一個簡單的程序,并沒有調用所有的功能,它只是連接你默認的麥克風到你默認的揚聲器5秒鐘時間,這期間,你可以從揚聲器中聽到你自己的聲音。源代碼在“WinRTP/TestWinRTP”目錄下,二進制文件為“TestWinRTP.exe”。

    s Guide?接口描述及程序員指南

    The?WinRTP?main DLL is CCNSMT.dll which exposes a COM interface that can be used to make calls to the WINRTP.

    WinRTP主要的DLLCCNSMT.dll,它提供了我們一個COM接口用于調用WINRTP

    ?WINRTP COM?接口

    The interface of WINRTP (ICCNMediaTerm) consists of the following functions

    WINRTP接口包含下面的函數:

    • HRESULT Initialize()
    • HRESULT?UnInitialize()
    • HRESULT?StartMicrophone() - not implemented/needed in this version.?
    • HRESULT?StopMicrophone() - not implemented/needed in this version.?
    • HRESULT?StartAudioReceive() - not implemented/needed in this version.?
    • HRESULT?StopAudioReceive() - not implemented/needed in this version.?
    • HRESULT?SetAudioCodecRX(
      ?????????????????????????????????????????????????[in] long?CompressionType,
      ?????????????????????????????????????????????????[in] long?MillisecPacketSize,?
      ?????????????????????????????????????????????????[in] long?EchoCancellationValue,
      ?????????????????????????????????????????????????[in] long G723BitRate
      ?????????????????????????????????????????????????)
    • HRESULT?SetAudioCodecTX(
      ????????????????????????????????????????????????[in] long?CompressionType,
      ????????????????????????????????????????????????[in] long?MillisecPacketSize,
      ????????????????????????????????????????????????[in] long?PrecedenceValue,
      ????????????????????????????????????????????????[in] long?SilenceSuppression,
      ????????????????????????????????????????????????[in] unsigned short?MaxFramesPerPacket,
      ????????????????????????????????????????????????[in] long G723BitRate
      ????????????????????????????????????????????????)
    • HRESULT?SetAudioDestination(
      ?????????????????????????????????????????????????[in] BSTR?strHostName,
      ?????????????????????????????????????????????????[in] long?nUDPortNumber
      ?????????????????????????????????????????????????)
    • HRESULT?SetAudioReceivePort(
      ???????????????????????????????????????????????????[in] long?nUDPPortNumber
      ???????????????????????????????????????????????????)
    • HRESULT?StartPlayingFileTX(
      ???????????????????????????????????????????????[in] BSTR Filename,
      ???????????????????????????????????????????????[in] unsigned long Mode,
      ???????????????????????????????????????????????[in] unsigned long?StartPosition,
      ???????????????????????????????????????????????[in] unsigned long?StopPosition,
      ???????????????????????????????????????????????[in, out] long * Cookie
      ???????????????????????????????????????????????)
    • HRESULT?StartPlayingFileRX(
      ???????????????????????????????????????????????[in] BSTR Filename,
      ???????????????????????????????????????????????[in] unsigned long Mode,
      ???????????????????????????????????????????????[in] unsigned long?StartPosition,
      ???????????????????????????????????????????????[in] unsigned long?StopPosition,
      ?????????????????????????????????????????????? [in] unsigned long?waveoutDeviceID,
      ???????????????????????????????????????????????[in, out] long * Cookie
      ???????????????????????????????????????????????)
    • HRESULT?StopPlayingFileTX(
      ???????????????????????????????????????????????[in] unsigned long Cookie
      ???????????????????????????????????????????????)
    • HRESULT?StopPlayingFileRX(
      ???????????????????????????????????????????????[in] unsigned long Cookie
      ???????????????????????????????????????????????)
    • HRESULT?StartTX(unsigned long?waveinDeviceID)
    • HRESULT?StopTX()
    • HRESULT?StartRX(unsigned long?waveoutDeviceID)
    • HRESULT?StopRX()
    • HRESULT?SetSpeakerVolume(
      ????????????????????????????????????????????????[in] unsigned long volume
      ????????????????????????????????????????????????)
    • HRESULT?SetMicrophoneVolume(
      ?????????????????????????????????????????????????????[in] unsigned long volume
      ?????????????????????????????????????????????????????)
    • HRESULT?SetFilePlayVolume(
      ???????????????????????????????????????????????[in] unsigned long cookie,
      ???????????????????????????????????????????????[in] unsigned long volume
      ???????????????????????????????????????????????)

    Events?From?WINRTP

    WINRTP not only exposes a COM interface, it also has the ability to fire events to the component that using WINRTP. This is done through the standard Connection Point mechanism. For information on connection points read a book on COM and ATL (Active Template Library). The basic idea is that WINRTP describes a COM interface for receiving events. If a component implements that COM interface, then it can subscribe itself as a listener of events generated by the WINRTP.

    ?WINRTP?不只提供給我們一個COM接口,它還具有發送事件給組件的功能。它從頭至尾完成了標準的連接點機制(要了解關于connection points的信息,請查看關于COMATL的書籍)。基本的想法是WINRTP?給出一個COM?接口用于接收事件。如果一個組件實現了這個接口,則它可以把自己作為WINRTP事件的監聽者。?PS:不太懂COM,瞎翻譯的

    ?

    The events interface (ICCNMediaTermEvents) is as follows

    ·????????HRESULT?EndOfFileEventRX(
    ????????????????????????????????????????????????[in] long Cookie
    ????????????????????????????????????????????????)

    ·????????HRESULT?EndOfFileEventTX(
    ????????????????????????????????????????????????[in] long Cookie
    ????????????????????????????????????????????????)

    ?

    ICCNMediaTerm)??WINRTP接口詳解

    All methods in the interface return an HRESULT value. If the method succeeds, they return 0, otherwise a negative number for failure. The return values are changing?L?so the recommended way to debug any?function??failures?is to use the trace mechanism (i.e. turn on tracing for the WINRTP, and look at the trace file which includes a description of the error that caused the negative return value. If problems persist, contact the developer of WINRTP for details/help.In?some cases, some of the important return values may be discussed for a function, but not for all functions

    ?所有的方法都返回一個HRESULT值。如果方法成功,返回0,否則,返回一個負數表示失敗。返回值是變化的,所以推薦的調試函數返回失敗的方法是使用trace機制。(如,打開WINRTPtracting,查看包含負值返回的錯誤描述的trace文件。如果問題無法解決請聯系WINRTP開發者得到詳細資料或幫助。有些情況下,函數的一些重要返回值可能需要討論,但不是所有都這樣)

    ?

    HRESULT?Initialize()

    ?

    Description:

    Initializes the WINRTP.?Instantiates all components.?Also sets up default?codecs?using the following calls

    初始化WINRTP,初始化所有組件,并且使用下面調用設置默認codecs

    • SetAudioCodecTX(Codec = G711 Ulaw 64kbps, 20, 0, 0, 1, 0)
    • SetAudioCodecRX(Codec = G711 Ulaw 64kbps, 20, 0, 0)

    This function must be called before any other calls to WINRTP

    調用所有其它WINRTP函數前必須調用該函數。

    ?

    Parameters:

    None?無參數

    ?

    ?

    HRESULT?UnInitialize()

    ?

    Description:

    Uninitializes?the WINRTP and releases all allocated resources. This must be the last call made to the WINRTP

    銷毀WINRTP,釋放所有分配的資源。這必須是WINRTP的最后一個調用。

    ?

    Parameters:

    None?無參數

    ?

    ?

    HRESULT?StartMicrophone()

    ?

    Description:

    No implemented/needed in this version

    沒有在此版本中實現

    ?

    Parameters:

    None

    ?

    ?

    ?

    HRESULT?StopMicrophone()

    ?

    Description:

    No implemented/needed in this version

    沒有在此版本中實現

    ?

    Parameters:

    None

    ?

    ?

    HRESULT?StartAudioReceive()

    ?

    Description:

    No implemented/needed in this version

    沒有在此版本中實現

    ?

    Parameters:

    None

    ?

    HRESULT?StopAudioReceive()

    ?

    Description:

    No implemented/needed in this version

    沒有在此版本中實現

    ?

    Parameters:

    None

    ?

    ?

    HRESULT?SetAudioCodecRX

    ?

    Description:

    Call this function to inform WINRTP of the audio codec used to encode the incoming RTP stream. This function may be called before?StartRX?is called. (so?you may need to call?StopRX?before making this call). If called before?StartRX?is called, it sets the codec for the next invocation of?StartRX. If it is called while receiving audio (i.e. after?StartRX) it may return an error.

    調用這個函數通知WINRTP對輸入RTP流使用那個編碼。此函數可能在StartRX之前調用(所以,你可能需要此函數前調用StopRX)。如果StartRX已經調用了,它將設置下一個StartRX,如果調用時正在接收數據,它返回一個錯誤。

    ?

    Parameters:

    [in] long?CompressionType:?The following values are supported

    ·????????2 :?G.711?Alaw?64kbps

    ·????????4 :?G.711?Ulaw?64kbps


    [in] long?MillisecPacketSize:
    ?Specifies the length of audio in each incoming RTP audio packets


    [in] long?EchoCancellationValue:
    ?Ignored. Put any value here. Echo cancellation is not supported in the WINRTP


    [in] long G723BitRate:
    ?Ignored

    ?

    ?

    HRESULT?SetAudioCodecTX

    ?

    Description:

    Sets the audio codec for the transmit stream (outgoing stream). Should be called while NOT streaming (i.e. before?StartTX/after?StopTX)

    設置輸出流的codecs,需要在沒有流傳輸時調用(如,StartTX之前,StopTX之后)

    ?

    Parameters:

    [in] long?CompressionType:?See?SetAudioCodecRX

    ?

    [in] long?MillisecPacketSize:?See?SetAudioCodecRX

    ?

    [in] long?PrecedenceValue:?Ignored


    [in] long?SilenceSuppression:?Specifies whether to do silence suppression in the transmit stream

    0 :?Silence suppression is turned OFF

    1 :?Silence suppression is turned ON

    ?

    [in] unsigned short?MaxFramesPerPacket:?Ignored

    ?

    [in] long G723BitRate:?See?SetAudioCodecRX

    ?

    HRESULT?SetAudioDestination

    ?

    Description:

    Sets the destination [IP Address,?UDP?Port] where the send side audio stream should be transmitted.?Must be called while not streaming (i.e. Before?StartTX/after?StopTX).

    設置發送端傳輸音頻流的目的地[IP地址,UDP端口]?。必須在無流傳輸時調用(如,StartTX之前,StopTX之后)

    ?

    Parameters:

    [in] BSTR?strHostName:?IP address of the destination. E.g. “171.69.12.34
    [in] long?nUDPortNumber:
    ?UDP port number where to send the stream

    ?

    ?

    HRESULT?SetAudioReceivePort

    ?

    Description:

    Informs the WINRTP of the UDP port number where it should listen for the incoming RTP audio stream. Note:?StartAudioReceive?must be called before any audio from the incoming stream is played to the speaker.

    告知WINRTP用于監聽輸入RTP音頻流的UDP地址。注:StartAudioReceive必須在輸入流已經播放之前。

    ?

    Parameters:

    [in] long?nUDPPortNumber:?UDP port number

    ?

    ?

    HRESULT?StartPlayingFileTX

    ?

    Description:

    This method should be used when a WAV file needs to be transmitted. The audio from the file is mixed in with the outgoing audio stream (user’s voice). The WINRTP fires an event to let the caller know when the file has finished playing, so that another file may be played. If the file finished playing, the WINRTP automatically calls?StopPlayingFileTX?so the caller need not call it. Only one file may be playing at a time. If this function is called while another file is playing already, an error is returned and the original file keeps playing. The function returns?an?unique identifier (cookie) that may be used in later calls related to this file play (to set the volume, or stop it from playing any more). This method can also play the file in a loop continuously without stopping. By default, files start playing at 25% volume.

    此方法用于WAV文件需要傳輸時。文件的音頻將同輸出流混音WINRTP發送一個事件讓調用者知道文件已經播放完畢,這時其它文件可以播放。當文件播放完畢,WINRTP自動調用StopPlayingFileTX?,調用者不必再調用。同一時刻只能播放一個文件。如果此函數調用時已經有文件在播放,此調用將返回一個錯誤,原來的文件將繼續播放。函數返回一個唯一標示,可以被用于之后的函數調用(設置音量、停止播放等)。此方法也可以無間斷地重復播放一個文件。默認情況下,文件以25%的音量大小播放。

    ?

    Parameters:

    [in] BSTR Filename:?the location (path) of the file to be played??待播放文件的位置(路徑)


    [in] unsigned long Mode:
    ?specifies whether to play the file once or in a loop?制定播放一次或循環

    ·????????0 :?play the file continuously in a loop

    ·????????1 :?play the file once

    ?

    [in] unsigned long?StartPosition:?unimplemented/ignored

    [in] unsigned long?StopPosition:?unimplemented/ignored

    [in, out] long * Cookie:?WINRTP returns a unique ID for this instance of the file being played. This cookie should be used in later calls pertaining to the instance of the file playing

    ?

    HRESULT?StartPlayingFileRX

    ?

    Description:

    This function starts mixing audio from the specified file to the received audio stream, so that the user hears audio from both the incoming audio stream and the file. The only difference is that we can have two files playing simultaneously in the receive side instead of one. By default, files start playing at 25% volume.

    此函數開始對接收音頻流和制定的文件進行混音。用戶將同時聽到輸入音頻流和文件音頻,唯一的不同點是我們可以在接收端同時播放兩個文件。默認音量為25%

    ?

    Parameters:

    Exactly the same as?StartPlayingFileTX, but with another extra parameter

    [in] unsigned long?waveoutDeviceID:?specifies which speaker device to play the file to.?WinRTP?now allows you to play the file using the wave/speaker device opened for audio (with?StartRX) or to another wave/speaker device. sometimes it may be useful to play a file locally to another audio device (for e.g. if you are using a USB headset for speech, you may want to play ring tones for incoming calls through? the speakers connected to the sound card so that it is heard loudly). See?StartRX?for a discussion on?waveoutDeviceID

    ?

    ?

    HRESULT?StartTX

    ?

    Description:

    Starts streaming on the transmit side. This method must be called before?StartPlayingFileTX?is called. Calling this method starts transmitting the user’s voice

    在傳輸端開始流。此函數必須在StartPlayingFileTX函數調用前。調用此方法開發傳輸用戶語音。

    ?

    Parameters:

    unsigned?long?waveinDeviceID:?specifies which audio device to use for audio capture/recording.?device?ID's are numbered 0...(#of recording audio devices-1), and -1 means use default audio device for windows. Check out?waveInOpen() and?waveInGetDevCaps() in the windows API. If you are confused, -1 actually means (unsigned long) –1.

    ?

    ?

    HRESULT?StartRX

    ?

    Description:

    Sets up WINRTP to start the receive side. It also starts playing the received audio to the speaker.

    設置接收端開始WINRTP,它也開始播放接收到的音頻。

    ?

    Parameters:

    unsigned?long?waveoutDeviceID:?specifies which audio device to use for playback/speaker. These device ID's are numbered 0 ... (# of playback devices - 1), and -1 means use the default playback device. Check out?waveOutOpen() and?waveOutGetDevCaps() functions in the windows API.. If you are confused, -1 actually means (unsigned long) –1.

    ?

    ?

    HRESULT?StopTX

    ?

    Description:

    Stops transmitting audio.?Stops transmitting the user’s voice and files.

    停止傳輸語音。停止傳輸用戶語音及文件。

    ?

    Parameters:

    None

    ?

    ?

    HRESULT?StopRX

    ?

    Description:

    Stops receiving and playing audio.?Stops playing the received audio stream and the files

    停止接收和播放音頻。停止播放接收的音頻流及文件。

    ?

    Parameters:

    None

    ?

    ?

    HRESULT?SetSpeakerVolume

    ?

    Description:

    Sets the speaker volume on the PC.?This setting sets the WAVEOUT volume of the system (not the master volume).

    設置PC揚聲器音量。此調用設置系統的WAVEOUT音量(不是主音量)。

    ?

    Parameters:

    [in] unsigned long volume:?value between 0 and 100 where 0 = silence, and 100 = max volume. The scale is linear, so 50 = half volume

    ?

    HRESULT?SetMicrophoneVolume

    ?

    Description:

    Sets the microphone volume.?This setting changes the PC’s microphone volume or audio capture volume.

    設置麥克風音量。此調用改變麥克風音量或音頻捕捉音量。

    ?

    Parameters:

    [in] unsigned long volume:?value between 0 and 100 where 0 = silence, and 100 = max volume. The scale is linear, so 50 = half volume

    ?

    ?

    ?

    ?

    HRESULT?SetFilePlayVolume

    ?

    Description:

    Sets the volume of a file being played by the WINRTP.

    設置WINRTP正在播放的文件的音量

    ?

    Parameters:

    [in] unsigned long cookie:?the cookie that pertains to this instance of the file play. The cookie is obtained when?StartPlayingFileTX(or RX) is called


    [in] unsigned long volume:?
    Volume setting. Starts from 0 (silence) to 100 (max volume)

    ?

    HRESULT?StopPlayingFileTX

    ?

    Description:

    Stops a file being played in the transmit side

    在傳輸端停止當前文件播放

    ?

    Parameters:

    [in] unsigned long Cookie:?Cookie that was returned when the file started playing.

    ?

    ?

    HRESULT?StopPlayingFileRX

    ?

    Description:

    Stops a file being played in the receive side

    在接收端停止當前文件播放。

    ?

    Parameters:

    [in] unsigned long Cookie:?Cookie that was returned when the file started playing.

    ?

    ?

    GUIDs, etc

    The important?GUIDs?are??最主要的GUID為:

    • WinRTP?COM object (CCNMediaTerm?class) :?94221C4E-00F1-11D4-9D59-0060B0FC246C
    • WinRTP?COM?Inteface?(ICCNMediaTerm) :?94221C4D-00F1-11D4-9D59-0060B0FC246C
    • WinRTP?Events Interface (_ICCNMediaTermEvents) :?94221C4F-00F1-11D4-9D59-0060B0FC246C

    ?

    The following code snippet may be useful for more information?下面的小代碼斷可能會提供更多信息:

    ?

    WINRTP Interface

    //?CCNSMT.idl?:?IDL source for CCNSMT.dll
    //

    // This file will be processed by the MIDL tool to
    // produce the type library (CCNSMT.tlb) and marshalling code.

    import "oaidl.idl";
    import "ocidl.idl";
    [
    object,
    uuid(94221C4D-00F1-11D4-9D59-0060B0FC246C),

    helpstring("ICCNMediaTerm?Interface"),
    pointer_default(unique)
    ]
    interface?ICCNMediaTerm?:?IUnknown
    {
    [helpstring("method Initialize")]
    HRESULT Initialize();
    [helpstring("method?UnInitialize")]
    HRESULT?UnInitialize();
    [helpstring("method?StartMicrophone")]?
    HRESULT?StartMicrophone();
    [helpstring("method?StopMicrophone")]?
    HRESULT?StopMicrophone();
    [helpstring("method?StartAudioReceive")]?
    HRESULT?StartAudioReceive();
    [helpstring("method?StopAudioReceive")]?
    HRESULT?StopAudioReceive();
    [helpstring("method?StopDtmfTone")]?
    HRESULT?StopDtmfTone();
    [helpstring("method?SetAudioCodecRX")]?
    HRESULT?SetAudioCodecRX([in] long?CompressionType, [in] long?MillisecPacketSize, [in] long?EchoCancellationValue, [in] long G723BitRate);
    [helpstring("method?SetAudioCodecTX")]?
    HRESULT?SetAudioCodecTX([in] long?CompressionType, [in] long?MillisecPacketSize, [in] long?PrecedenceValue, [in] long?SilenceSuppression, [in] unsigned short?MaxFramesPerPacket, [in] long G723BitRate);
    [helpstring("method?SetAudioDestination")]?
    HRESULT?SetAudioDestination([in] BSTR?strHostName, [in] long?nUDPortNumber);
    [helpstring("method?SetAudioReceivePort")]?
    HRESULT?SetAudioReceivePort([in] long?nUDPPortNumber);
    [helpstring("method?StartDtmfTone")]?
    HRESULT?StartDtmfTone([in] long?cToneAsChar, [in] long?OnTime, [in] long?OffTime);
    [helpstring("method?StartPlayingFileTX")]?
    HRESULT?StartPlayingFileTX([in] BSTR Filename, [in] unsigned long Mode, [in, out] long * Cookie);
    [helpstring("method?StartPlayingFileRX")]?
    HRESULT?StartPlayingFileRX([in] BSTR Filename, [in] unsigned long Mode, [in] unsigned long?waveoutDeviceID, [in, out] long * Cookie);
    [helpstring("method?StopPlayingFileTX")]?
    HRESULT?StopPlayingFileTX([in] unsigned long Cookie);
    [helpstring("method?StopPlayingFileRX")]?
    HRESULT?StopPlayingFileRX([in] unsigned long Cookie);
    [helpstring("method?StartTX")]?
    HRESULT?StartTX([in] unsigned long?waveinDeviceID);
    [helpstring("method?StopTX")]?
    HRESULT?StopTX();
    [helpstring("method?StartRX")]?
    HRESULT?StartRX([in] unsigned long?waveoutDeviceID);
    [helpstring("method?StopRX")]?
    HRESULT?StopRX();
    [helpstring("method?SetSpeakerVolume")]?
    HRESULT?SetSpeakerVolume([in] unsigned long?deviceID, [in] unsigned long volume);
    [helpstring("method?SetMicrophoneVolume")]?
    HRESULT?SetMicrophoneVolume([in] unsigned long?deviceID, [in] unsigned long volume);
    [helpstring("method?SetFilePlayVolume")]?
    HRESULT?SetFilePlayVolume([in] unsigned long cookie, [in] unsigned long volume);
    [helpstring("method?NetworkMonitor")]?
    HRESULT?NetworkMonitor([in] unsigned long Enable, [in] unsigned long?DurationMillisec);
    };


    [
    uuid(94221C4F-00F1-11D4-9D59-0060B0FC246C),
    helpstring("_ICCNMediaTermEvents?Interface")
    ]
    interface _ICCNMediaTermEvents?:?IUnknown
    {
    [helpstring("method?EndOfFileEventRX")]?
    HRESULT?EndOfFileEventRX([in] long Cookie);
    [helpstring("method?EndOfFileEventTX")]?
    HRESULT?EndOfFileEventTX([in] long Cookie);
    [helpstring("method?NetworkMonitorEventRX")]?
    HRESULT?NetworkMonitorEventRX([in] double?RXMean, [in] double?RXVariance);
    [helpstring("method?NetworkMonitorEventTX")]?
    HRESULT?NetworkMonitorEventTX([in] double?TXMean, [in] double?TXVariance);
    };


    [
    uuid(94221C40-00F1-11D4-9D59-0060B0FC246C),
    version(1.0),
    helpstring("CCNSMT 1.0 Type Library")
    ]
    library?CCNSMTLib
    {
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    [
    uuid(94221C4E-00F1-11D4-9D59-0060B0FC246C),
    helpstring("CCNMediaTerm?Class")
    ]
    coclass?CCNMediaTerm
    {
    [default] interface?ICCNMediaTerm;
    [default, source] interface _ICCNMediaTermEvents;
    };
    };

    ?

    Type Library

    [

    ????????????uuid(94221C40-00F1-11D4-9D59-0060B0FC246C),

    ????????????version(1.0),

    ????????????helpstring("CCNSMT 1.0 Type Library")

    ]

    library?CCNSMTLib

    {

    ????????????importlib("stdole32.tlb");

    ????????????importlib("stdole2.tlb");

    ?

    ????????????[

    ????????????????????????uuid(94221C4E-00F1-11D4-9D59-0060B0FC246C),

    ????????????????????????helpstring("CCNMediaTerm?Class")

    ????????????]

    ????????????coclass?CCNMediaTerm

    ????????????{

    ????????????????????????[default] interface?ICCNMediaTerm;

    ????????????????????????[default, source] interface _ICCNMediaTermEvents;

    ????????????};

    };

    Sample C++ Code?示例C++代碼:

    Using the type library generated while compiling?WinRTP?(CCNSMT.tlb) one can easily?use?WinRTP?in code. Visual C++ 6.0 allows importing a type library in the #import command, as the following sample code shows. Note that you cannot import?WinRTP?as a COM object into your project because it is NOT and ActiveX control nor does it support?IDispatch.

    使用編譯WINRTP時得到的類型庫文件,可以在編碼時很容易的使用WinRTP。就像下面代碼顯示的那樣,VC 6.0?允許使用#import?命令導入一個類型庫。注意,你不可以把WINRTP當作一個COM?對象導入你的工程,因為它不是。而且ActiveX?控件也不支持IDispatch

    ?

    #import "../CCNMediaTerm/CCNSMT/CCNSMT.tlb"?no_namespace,?raw_interfaces_only

    int?main()
    {
    HRESULT hr;

    // Initialize COM
    hr =?CoInitialize(NULL);

    // Get Interface?ICCNMediaTerm?from the?WinRTP?COM Object using smart pointer defined by the #import command above.?
    // Automatically calls?IUnknown::AddRef();
    ICCNMediaTermPtr?pICCNMediaTerm(__uuidof(CCNMediaTerm));

    // Initialize?WinRTP. Must be the first call
    pICCNMediaTerm->Initialize();

    // Set parameters for receive side
    pICCNMediaTerm->SetAudioCodecRX(4, 20, 0, 0);
    pICCNMediaTerm->SetAudioReceivePort(8500);

    // Set parameters for transmit side
    pICCNMediaTerm->SetAudioCodecTX(4, 20, 0, 0, 0, 0);
    pICCNMediaTerm->SetAudioDestination(L"127.0.0.1", 8500);

    // Start reception side.?we?will use the default (-1) playback device
    pICCNMediaTerm->StartRX(-1);

    // Start transmit side. we will use the default (-1) recording device
    pICCNMediaTerm->StartTX(-1);

    // Set the speaker volume to 50%
    pICCNMediaTerm->SetSpeakerVolume(-1, 50);

    // Set the microphone volume to 50%
    pICCNMediaTerm->SetMicrophoneVolume(-1, 50);

    // Hear yourself for 5 seconds
    Sleep(5000);

    // Stop reception & transmission
    pICCNMediaTerm->StopRX();
    pICCNMediaTerm->StopTX();

    //?Unitialize?WinRTP. Must be the last call
    pICCNMediaTerm->UnInitialize();
    // Let go of the reference to the?ICCNMediaTerm?interface. Automatically calls?IUnknown::Release()
    pICCNMediaTerm?= 0;

    //?Uninitialize?COM
    CoUninitialize();

    return 0;
    }

    ?可選參數

    The configurable parameters of WINRTP are mostly set using the registry. The registry key for these settings is HKEY_CURRENT_USER/Software/Cisco Systems/CCNMediaTerm/1.0. If these entries do not exist in the registry, then the WINRTP creates them automatically with the default values the first time it needs to use them.

    大部分WINRTP的可選參數使用注冊表。這些設置的鍵值為HKEY_CURRENT_USER/Software/Cisco Systems/CCNMediaTerm/1.0?。如果這個鍵值不存在,WINRTP將在第一次需要使用它們時建立它。

    ?靜態/動態?抖動緩沖

    Set the?UseDynamicJitterBuffer?registry entry to “true” to use dynamic jitter buffer algorithm for audio reception. Set it to “false” to use static jitter buffer (like the old version of?winrtp)

    設置?UseDynamicJitterBuffer?條目為?“true”?則在音頻接收時使用動態抖動緩沖算法。設置為“false”?則使用靜態抖動緩沖(就像上的版本一樣)

    ?抖動緩沖長度

    This value is relevant only if static jitter buffer is being used. The length of the jitter buffer can be specified using the?JitterBufferTime?registry setting. This setting is in milliseconds. The default value is 180, but lower values work on most computers. At the beginning of each talk spurt, the WINRTP fills x milliseconds of audio in the jitter buffer (where x is the value of the?JitterBufferTime?registry setting) before it starts playing it to the speaker. Higher jitter buffer length provides smoother audio and immunity to network problems, but increases the latency in a two-way conversation. But lowering this value too much can lead to bad quality audio (stuttering or jittery audio) in which case the user should try to increase this setting. The optimal value is very dependent on the configuration of the PC (sound card and drivers, operating system, etc.), so it should be set on a per-computer basis. The default value of 180 works on majority of computers (lower values may work too).

    此值只有在使用靜態抖動緩沖時才有效。使用JitterBufferTime?鍵值來設置抖動緩沖的長度。此設置單位為毫秒。默認值為180,但是大多數計算機使用更低的值。話音突發(talk spurt)開始時,WINRTP在播放之前填充?x?毫秒到抖動緩沖(x?JitterBufferTime?鍵值)。更高的抖動緩沖長度提供了更平滑的音頻及更好的網絡故障免疫性,但是增加了雙向交談的反應時間。降低太多此值,會帶來劣質的語音(間斷的,抖動的聲音),這時就需要增加這個值。最佳的值依賴于PC的配置(聲卡、驅動及操作系統等),所以它對于每個電腦是不同的。默認的180,可以適用于大部分電腦。

    Try the following (Windows 2000/XP :?60ms, WinNT 4.0 : 120ms, Win 95/98/ME : 180ms

    按照操作系統不同,可嘗試下面的設置:Windows 2000/XP :?60ms, WinNT 4.0 : 120ms, Win 95/98/ME : 180ms

    ?接收的RTP音頻流自動放大等級

    WinRTP?can automatically amplify the volume of the incoming audio streams. It is needed because frequently the volume level in the incoming packets is pretty low, so they sound much faint compared to other sounds on the PC. We could increase the volume sliders on the PC, but that would make every other sound extremely loud so it is not a satisfactory solution. The real fix is to amplify the incoming audio to a level that is comparable to other system sounds.?WinRTP?2.1 onwards has that ability. Note that increasing the level of the incoming signal can cause distortion (due to clipping) so?WinRTP?employs a novel technique that gives the user complete control. It has amplification that is governed by two parameters, a max-gain (the maximum gain that will be applied if possible), and a distortion-free-percentile (percentage of audio samples that should not be distorted due to this amplification). It is best explained with an example. Say max gain is 5, and distortion-free-percentile is 95%. Then given an RTP packet with audio samples,?WinRTP?will calculate how much gain it can apply so the samples so that 95% of the samples will NOT be distorted. If this value (say x) is less than max-gain, then the packet will be amplified x times. If x is more that max-gain, then the packet will be amplified max-gain times. To ensure that no distortion occurs, set the percentile to 100% and max-gain to a high value. That way,?WinRTP?will always amplify the packet without distorting any sample. However, during quiet periods, x might be large which will increase the loudness of the background noise. This is where setting max-gain to?a?optimal value helps, because it is the max amplification that will ever be applied. I have seen that?max-gain values between 5-10 and percentile of 95% produces?a good balance. To turn off this feature altogether, set max-gain to 1, so that no amplification will be done. The following registry keys control this feature

    WINRTP可以自動放大輸入的音頻流音量。這是很必要的,因為輸入包的音量常常都很小,于PC的其它聲音比起來很微弱。我們可以去增加PC的音量調節,但是它也將其它聲音放的很大,這不是令人滿意的解決辦法。真正的解決辦法是放大輸入音頻的等級和系統的其它聲音相當。WINRTP2.1首先具有這個功能。注意,增大輸入信號的等級可能會導致失真(由于clipping)?,所以WINRTP給用戶完全的控制權。我們通過兩個參數來進行設置,一個max-gain(可能的最大限度的增大)和一個distortion-free-percentile(最小保真率)。最好的闡述是通過一個例子:說,max gain設置為5?distortion-free-percentile設置為95%?。這時,給出一個RTP包,WINRTP將計算多大的增加可以保證原始包中95%的語音沒有失真。如果這個值(x)小于?max-gain5)?,這個包將放大x。如果這個值大于?max-gain5),它將放大max-gain。要保證沒有失真出現,設置百分點為100%,?max-gain為一個很大值,這樣,WINRTP將在不失真的情況下放大音頻包。當靜音階段,x?可能會很大,這將導致環境雜音被放大。這就是為什么要設置max-gain為一個最佳值,因為這將是可以接收的最大放大倍數。我認為max-gain?510之間,distortion-free-percentile95%?,可以達到一個比較好的平衡。關閉此功能,設置max-gain?1?,這樣不會有任何放大。下面的鍵值控制此功能:


    VolumeMaximizeMaxGain?(floating point number >= 1.0 e.g.?8.0 )

    VolumeMaximizePercentile?(floating point number between 0.0 and?100.0 )

    ?

    DiffServ?Byte) of Outgoing RTP Packets?輸出RTP包的TOS

    The WINRTP can stamp outgoing RTP packets with an IP TOS (type of service) value in the IP header. This is important for?QoS?purposes where packets of a certain TOS may be given priority in the network to reduce delay. To do this, you need to change the value in the?RtpOut?filter project (RtpOut.cpp)

    ?WINRTP可以為輸出RTP包在IP頭標示IP TOS?值,對于Qos來說這很重要,不同的TOS將給與不同的優先級來減少延遲。你需要修改這個值在RtpOut?filter?項目中(RtpOut.cpp

    ?指定UDP?傳輸端口

    If you want to use a particular local UDP port to transmit RTP streams, set the?UseFixedTransmitPort?to “true” and set the?TransmitPort?registry entry to the port number you want to use. Otherwise, set?UseFixedTransmitPort?to “false”. Note?the receive?and transmit port cannot be the same. Make sure transmit?port != receive port, and transmit port != (receive port + 1)

    ?如果你想使用一個確定的本地UDP端口在傳輸RTP流,可以設置?UseFixedTransmitPort?鍵值為?“true”?并?設置?TransmitPort?鍵值為你想使用的端口。否則,設置UseFixedTransmitPort?為?“false”?。注意:接收和發送端口不能為一個,請確保transmit port != receive port,?并且?transmit port != (receive port + 1)

    ?發送音頻的預加重

    To do pre-emphasis of transmitted audio to make it sound sharper, set the?MicrophonePreprocess?registry entry to “true” (“false” otherwise) and then set the?TxFIRFilter?registry entry to either “1”?or “2”. This chooses between a set of parameters to set up an FIR filter to do pre-emphasis of the audio. Experiment to see which setting sounds best

    預加重使聲音?sharper。設置?MicrophonePreprocess?鍵值為“true”?,并設置?TxFIRFilter?鍵值為??“1”??“2”?。這些參數被FIR過濾器用來進行預加重(pre-emphasis),你可以自己實驗得到最好的效果。

    ?

    ?接收音頻的后加重

    To do post-emphasis of received audio to make it sound sharper, set the?SpeakerPostprocess?registry entry to “true” (“false” otherwise) and then set the?RxFIRFilter?registry entry to either “1”?or “2”. This chooses between a set of parameters to set up an FIR filter to do post-emphasis of the audio. Experiment to see which setting sounds best

    ?后加重使接收到的聲音sharper。設置?SpeakerPostprocess?鍵值為“true”?,并設置?鍵值?RxFIRFilter?“1”??“2”?。這些參數將傳給FIR過濾器用來后加重(post-emphasis),你可以自己實驗得到最好的效果。

    ?音量限制

    Sometimes the received audio may be too loud and you may want to do volume limiting to reduce the max volume. In that case, set the?LimitVolume?registry entry to “true” (“false” otherwise). This will turn on the volume limiting feature. To control the behavior of the limiter, there are three registry settings:?LimiterThreshold?(default –8.0),?LimiterLossIncrement?(default 0.075),?LimiterLossDecrement?(default –0.00075). Setting the threshold lower (for e.g. to –25.0 instead of –8.0) will limit audio to a lower volume. I recommend against playing around with the other parameters.

    ?某些接收到的音頻可能聲音太大,你想限制音量的最大值。這時候,設置?LimitVolume?鍵值為??“true”?。這將打開音量限制功能,控制限制器的行為,有三個鍵值:LimiterThreshold?(默認-8.0),LimiterLossIncrement?(默認0.075),?LimiterLossDecrement?(默認–0.00075)。降低threshold?的值將會限制聲音,另外的鍵值我建議大家不要修改。

    ?示例代碼

    The following?sections describes?through an example how to use the Media Term component. Here are the basic steps

    下面的段落敘述了一個使用Media Term組件的例子。下面是步驟:

  • Initialize COM (CoInitializeEx)??初始化COM,使用(CoInitializeEx
  • Instantiate the Media Term Component and get the?ICCNMediaTerm?COM interface (Say the variable is?CCNMediaTerm) using?CoCreateInstance
  • 初始化Media Term?組件,使用CoCreateInstance得到ICCNMediaTerm接口 (CCNMediaTerm

  • Initialize the WINRTP???初始化WINRTP
  • ·????????Initialize();

  • Transmit Side??發送端:
  • ·????????Set?the startup parameters for transmit: Use G.711?Ulaw?Codec, 30ms packet size, No silence suppression. Transmit to?localhost?(127.0.0.1) to port 21243??設置傳輸的參數:

    o???????SetAudioCodecTX(4, 30, 0, 0, 1, 0);

    o???????SetAudioDestination(“127.0.0.1”, 21243);

    ·????????Start transmission using the default audio capture device?開始發送音頻流

    o???????StartTX(-1);

    ·????????Mix the file “foo.wav” along with the transmitted stream. Play the file once.?音文件foo.wav及傳輸流?,并播放。

    o???????StartPlayingFileTX(“foo.wav”, 1, 0, 0, &sendFileCookie)

    ·????????Set the volume of the “foo.wav” file to 50%??設置音量為50%

    o???????SetFilePlayVolume(sendFileCookie, 50)

    ·????????Change the codec from G.711?Ulaw?to G.723 at 5.3kbps and turn on silence suppression?改變codecs,打開靜音抑制

    o???????SetAudioCodecTX(9, 30, 0, 1, 1, 0)

    ·????????Stop Transmitting (everything, including voice and files)?停止傳輸

    o???????StopTX()

  • Receive Side??接收端
  • ·????????Set?the startup parameters for receive: Use G.711?Ulaw?Codec, 30ms packet size. Receiving from local port 8000?設置接收參數

    o???????SetAudioCodecRX(4, 30, 0, 0);

    o???????SetAudioReceivePort(8000);

    ·????????Start receive side using the default audio playback device?使用默認的回放設備開始接收

    o???????StartRX(-1);

    ·????????Mix the file “foo.wav” along with the received stream. Play the file continuously in a loop. Also play another file “foobar.wav” just once. Mix both files along with the received audio?音文件foo.wav及接收流 ,循環播放文件,播放另一個文件foobar.wav一次。混音所有輸出。

    o???????StartPlayingFileRX(“foo.wav”, 0, 0, 0, -1, &receiveFileCookie1);

    o???????StartPlayingFileRX(“foobar.wav”, 1, 0, 0. –1, &receiveFileCookie2);

    ·????????Set the volume of the “foobar.wav” file to 25%??設置音量25%

    o???????SetFilePlayVolume(receiveFileCookie2, 25)

    ·????????Stop playing the “foo.wav” file that was playing in a loop?停止foo.wav播放

    o???????StopPlayingFileRX(receiveFileCookie1);

    ·????????Change the codec from G.711?Ulaw?to G.729 (30ms packet size), and also change the port to receive audio from 8000 to 9999?改變codecs和端口

    o???????SetAudioCodecRX(11, 30, 0, 0)

    o???????SetAudioReceivePort(9999)

    ·????????Stop receiving (everything, including voice and files). This method releases the speaker停止接收

    o???????StopRX()

  • Uninitialize?the WINRTP and release all resources??銷毀WINRTP?,釋放所有資源
    • Uninitialize()
  • Uninitialize?COM if needed using?CoUninitialize??銷毀COM
  • ?

    I plan to release some sample C++ code to show how to use this component soon

    我計劃不久后發布一些C++代碼來展示如何使用這些組件。

    ?未來的改進

    Some of the future improvements that are being considered are?一些未來需要做的改進:

    • Using the same local UDP port to do transmit and receive??使用相同的端口完成接受和傳輸

    總結

    以上是生活随笔為你收集整理的Cisco IP电话软件的WINRTP的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    欧美日韩高清在线一区 | 国内精品在线观看视频 | av在线精品 | 亚洲国产剧情av | 中文字幕国产在线 | 91av视频观看 | 99在线看| 久热免费在线 | 97视频在线观看免费 | 麻豆观看| 日韩精品欧美一区 | 免费一级片久久 | 国产成人精品不卡 | 欧美精选一区二区三区 | 九九免费精品 | 狠狠狠狠狠狠狠狠干 | 国产精品美女久久久免费 | 99精品视频免费看 | 国产香蕉av | av中文字幕在线免费观看 | 中文字幕在线观看完整版 | 国产小视频网站 | 国产精品网红直播 | 国产成人av在线影院 | 视频一区在线播放 | 久久精品国产精品亚洲精品 | 欧美精品三级 | 久热色超碰 | 国产精品久久久久久一区二区 | 日韩影视在线观看 | 在线观看日韩精品 | 欧美另类成人 | 五月婷香蕉久色在线看 | 超碰在线人人 | 日本高清免费中文字幕 | 成人av电影免费在线观看 | 美女视频久久 | 婷婷六月综合亚洲 | 中文字幕有码在线观看 | 欧美日韩不卡在线观看 | 亚洲免费视频观看 | 伊人五月天综合 | 国产高清成人av | 午夜视频在线观看一区 | 91成人在线观看高潮 | 91亚洲国产| 久久国产精品免费 | 亚洲综合视频网 | av+在线播放在线播放 | 色婷婷色| 1000部18岁以下禁看视频 | 亚洲国产美女久久久久 | 夜夜操天天 | 五月婷婷在线视频观看 | 精品高清美女精品国产区 | 69视频网站 | 免费在线观看不卡av | 91tv国产成人福利 | 九九热在线精品 | 香蕉影视 | 韩国av免费观看 | 欧美一区中文字幕 | 亚洲美女免费精品视频在线观看 | 日本99久久 | 日韩视频一区二区三区在线播放免费观看 | 五月开心婷婷网 | 综合色站 | 日本女人的性生活视频 | 四虎成人精品 | 国产日产av | 日韩黄色在线电影 | 久草在线资源观看 | 2024国产精品视频 | av免费在线观 | 色综合婷婷久久 | 欧美日韩视频免费看 | 中国一级特黄毛片大片久久 | 国产精品久久久久aaaa | 成人免费xxxxxx视频 | 丁香九月婷婷综合 | 成人黄色影片在线 | 免费日韩高清 | 九九久久婷婷 | 日韩在线一区二区免费 | www.久久精品视频 | 黄色亚洲大片免费在线观看 | 免费高清国产 | 色视频成人在线观看免 | 中文资源在线播放 | 欧美成人黄色 | 成人午夜剧场在线观看 | 91av视频观看 | 一 级 黄 色 片免费看的 | 三上悠亚一区二区在线观看 | 国产精品久久久久久久久久久久午夜 | 午夜国产一区二区三区四区 | 天天色天天上天天操 | 日韩免费电影网站 | 免费三及片 | 人人草天天草 | 粉嫩av一区二区三区四区在线观看 | 免费在线观看污 | 97色婷婷成人综合在线观看 | 2023天天干| 国产精品久久久久9999 | 深爱激情亚洲 | 一区二区中文字幕在线播放 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产精品69av | 狠狠gao| 亚洲综合色丁香婷婷六月图片 | 国产三级国产精品国产专区50 | 日韩在线第一区 | 欧美日韩高清不卡 | 一级片免费观看视频 | 在线蜜桃视频 | 精产嫩模国品一二三区 | 欧美日韩性生活 | 日本三级香港三级人妇99 | 国产精品一区二区无线 | 97操操| 日韩在线免费视频观看 | 久久中文字幕在线视频 | 有没有在线观看av | 免费网站在线观看人 | 国产婷婷一区二区 | 亚洲国产精品99久久久久久久久 | 免费在线观看av网址 | 国产黄色美女 | www.com久久 | 午夜精品久久久99热福利 | 特级毛片在线 | 97高清视频 | 日本久久免费视频 | 97超碰人人 | av黄色在线 | 欧美成人精品欧美一级乱黄 | 又爽又黄在线观看 | 日韩 在线a | 欧美成年人在线观看 | 国语黄色片 | 日韩久久激情 | 色婷婷丁香| 久热久草在线 | 成人免费观看电影 | 91亚洲国产成人久久精品网站 | 精品国产一区二区三区日日嗨 | 色噜噜在线观看视频 | 91久色蝌蚪 | 91在线porny国产在线看 | 亚洲永久精品视频 | 午夜视频不卡 | 在线精品视频免费播放 | wwwwww黄| 在线观看完整版免费 | 免费情缘| 日韩91av| 成人一区二区三区在线观看 | 色婷婷狠狠 | 99精品欧美一区二区三区黑人哦 | 日本三级在线观看中文字 | 在线亚洲精品 | 奇米网777 | 99热在线国产 | 久久人人97超碰国产公开结果 | 深夜免费福利网站 | 日本久久免费电影 | 成年人免费看的视频 | 日韩午夜一级片 | 国产不卡在线观看视频 | 在线观看日韩国产 | 精品在线视频播放 | 日韩久久精品一区二区三区下载 | 国产精品一区二区三区在线免费观看 | 欧美精品久久久久久久久久 | 国产精品美女视频网站 | 精品视频99 | 99视频在线看 | 亚洲日日日 | 高清在线一区 | 久久九九精品久久 | 9999精品| 午夜精品区| 91精品国产欧美一区二区 | 在线观看国产区 | 欧美成亚洲| 九九九热精品免费视频观看网站 | 成 人 黄 色 免费播放 | 欧美一区二区三区特黄 | 国产一区二区日本 | 999免费视频 | 国产精品涩涩屋www在线观看 | 日韩高清毛片 | 最新中文字幕在线观看视频 | 久久一级电影 | 超级碰碰碰免费视频 | 国产三级精品在线 | 亚洲精品欧洲精品 | 九色自拍视频 | www.久草.com| 婷婷精品国产一区二区三区日韩 | 欧美a级在线播放 | 操操操天天操 | 久久欧美综合 | 91成人精品在线 | 伊人久久在线观看 | 欧美日韩免费看 | 国产精品一区一区三区 | 日韩在线观看av | av在线一级 | 91麻豆精品国产 | 69久久夜色精品国产69 | 成人久久18免费网站图片 | 国产精品18久久久久久久久久久久 | 国产97av| 一级黄色免费网站 | 久草在线视频看看 | 欧美一级电影 | 久久久网站 | 大荫蒂欧美视频另类xxxx | 国产精品每日更新 | 精品亚洲欧美无人区乱码 | 黄色中文字幕在线 | 久久久久久久久久免费 | 99精品免费网 | 日产中文字幕 | 伊人久久五月天 | 久久er99热精品一区二区 | 在线看福利av| 欧美精品久久久久a | 天天操天天干天天干 | 丰满少妇在线观看资源站 | 久久精品99国产国产精 | 国产精品午夜久久 | 国产精品视频99 | av在线播放亚洲 | 看国产黄色大片 | 欧美日韩高清一区 | 国产精品对白一区二区三区 | 亚洲深夜影院 | 视频在线99re | 亚洲精品国产成人av在线 | 国产精品9999久久久久仙踪林 | 久久久九色精品国产一区二区三区 | 亚洲国产婷婷 | 免费成人在线观看视频 | 麻豆手机在线 | 99这里只有精品视频 | 亚洲理论视频 | 亚洲欧洲成人精品av97 | 亚洲天堂精品视频 | 欧洲高潮三级做爰 | 午夜国产福利视频 | 91最新视频 | 五月婷婷av | 日韩一二区在线观看 | 亚洲精品在线观看的 | 一级黄色电影网站 | 久久99久久99久久 | 欧美极度另类 | 中文字幕超清在线免费 | 亚洲欧美国产日韩在线观看 | 亚洲黄色影院 | 色久av| www.国产毛片 | 日本在线观看中文字幕无线观看 | 亚洲精品av中文字幕在线在线 | 日韩欧美一区二区三区在线观看 | 手机在线看a | 亚洲,国产成人av | 午夜婷婷在线观看 | av黄色在线 | 色偷偷人人澡久久超碰69 | 国产黑丝一区二区 | 日本精品视频一区二区 | 国产黄a三级三级三级三级三级 | av在线网站大全 | 色婷婷综合久色 | 国产精品久久久久久久午夜 | 天天人人 | 亚洲激色 | 欧美激情一区不卡 | 黄色三级免费观看 | 国产伦精品一区二区三区… | 久久久黄色 | 婷婷六月网 | 欧美福利片在线观看 | 成人毛片在线视频 | 91视频在线免费观看 | 99视频网站| 国产精品久久久久久久久婷婷 | 免费看v片网站 | 国产色婷婷精品综合在线手机播放 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 最近免费中文字幕大全高清10 | 午夜精品电影一区二区在线 | 91视频 - v11av| 国产亚洲高清视频 | 国产精品视频久久 | 97在线精品 | 伊人网综合在线观看 | 亚洲成人免费在线 | av在线网站免费观看 | 麻豆网站免费观看 | 欧美另类高潮 | 亚洲一级免费观看 | 精品国产色 | 亚洲午夜精品在线观看 | 久99精品 | 中文字幕一区二区三区久久 | 欧美巨大 | 久久综合五月天婷婷伊人 | 国产精品久久久久久久毛片 | 亚洲最新av在线 | 色婷婷精品大在线视频 | 免费观看完整版无人区 | 亚洲成av人影院 | 免费成人在线视频网站 | 99热这里精品 | 日韩在线视频观看免费 | 成人免费在线视频观看 | 国产午夜小视频 | 亚洲午夜精品福利 | 国产成人一区二区三区在线观看 | 中文字幕网址 | 九九久久久久久久久激情 | 91丨九色丨91啦蝌蚪老版 | 五月婷婷黄色网 | 午夜国产一区 | 亚洲色综合 | 亚洲激情精品 | 国产精品久久久久久久久久久免费 | 麻豆视频国产 | 综合久久久 | bayu135国产精品视频 | 超碰97人人干 | 国产精品久久久久久久久久免费看 | 国产精品色| 精品国产乱码久久久久久久 | 在线免费黄网站 | 精品国产一区二区三区免费 | 日日激情| 欧美日韩一区二区三区在线观看视频 | 9在线观看免费高清完整 | 日韩精品亚洲专区在线观看 | 99福利影院| 国产精品成人一区二区 | 国产又黄又猛又粗 | 在线日韩亚洲 | 啪啪凸凸 | 日韩av女优视频 | 99精彩视频在线观看免费 | 天天爱综合 | 亚洲日日夜夜 | 日韩精品视频免费看 | 欧美日韩一区二区三区视频 | 国产成人精品午夜在线播放 | 天天曰天天爽 | 国产成年免费视频 | 久久免费视频8 | 丁香色综合 | 国产精品欧美日韩在线观看 | 成人免费网视频 | 免费裸体视频网 | 欧美一区二区视频97 | 波多野结衣久久精品 | 国产一区二区三区高清播放 | 国产区精品视频 | 国产午夜精品一区二区三区嫩草 | 国产免费黄色 | 四虎成人精品 | 99人久久精品视频最新地址 | 人人澡超碰碰97碰碰碰软件 | 成人av免费在线观看 | 九九热免费在线视频 | 在线欧美最极品的av | 免费日韩av电影 | 久久精品亚洲一区二区三区观看模式 | 国产第一页精品 | 国产精品永久在线观看 | 国内精品久久久久久久久久 | 国产精品美女久久久久久久 | 91久久人澡人人添人人爽欧美 | 奇米影视在线99精品 | 国产我不卡 | 亚洲激情在线观看 | 久久视频国产精品免费视频在线 | 日韩一级片大全 | 免费黄色在线 | 成人avav| 国产少妇在线观看 | 久久精品久久精品 | 国产午夜在线 | 国产成人一区二区三区影院在线 | 国产白浆在线观看 | 天天爽夜夜爽人人爽一区二区 | 亚洲精品在线网站 | 国内视频一区二区 | 国产精品一区二区三区四区在线观看 | 精品爱爱 | 欧美a视频在线观看 | 国产在线观看你懂的 | 成人激情开心网 | 免费观看一级 | 亚洲精品高清一区二区三区四区 | 日韩高清一区二区 | 看片网站黄色 | 成人免费视频a | www天天操| 91av免费观看| 天天操夜夜曰 | 日韩在线观看影院 | 探花国产在线 | 日韩高清免费观看 | 99精品电影 | 国产一区在线视频 | 免费大片av | 狠狠综合久久 | 91丨九色丨高潮丰满 | 日本深夜福利视频 | 五月婷婷六月丁香在线观看 | 中文字幕一区2区3区 | 亚洲jizzjizz日本少妇 | 97国产 | 色婷婷a | 国产精品免费看久久久8精臀av | 亚洲精品国产日韩 | 欧美日韩免费观看一区=区三区 | 天天激情天天干 | 97电影在线看视频 | 亚洲日本va午夜在线电影 | 日韩av手机在线观看 | 久久a视频| 欧美性脚交 | 五月天天天操 | 一级α片| 亚洲成av人片在线观看无 | 人成午夜视频 | 国产黑丝袜在线 | 国产午夜精品免费一区二区三区视频 | 国产精品一区二区免费在线观看 | 91亚洲精品久久久久图片蜜桃 | 久久久伊人网 | 久久国产成人午夜av影院潦草 | 久久视频在线免费观看 | av免费福利| 亚洲精品白浆高清久久久久久 | 美女免费av| 婷婷开心久久网 | 精品久久久久久国产91 | 国产日韩一区在线 | 久久综合成人网 | 久久精品精品电影网 | 中文字幕xxxx | 五月综合激情网 | 美女黄濒 | 大胆欧美gogo免费视频一二区 | 国产成人av电影在线 | 狠狠亚洲 | 99视频在线观看免费 | 国产又粗又硬又长又爽的视频 | 一级片视频在线 | 日韩欧美一区二区三区免费观看 | 国产精品久久久久久爽爽爽 | 天天干天天拍天天操天天拍 | 久久久免费电影 | 深夜福利视频在线观看 | 伊人狠狠操 | 国产精品久久久久久99 | 国产精品色在线 | 国产精品精品国产色婷婷 | 国产真实在线 | 国产成人精品在线播放 | 69av网| 久久天堂精品视频 | 久久色在线播放 | 免费在线国产视频 | 在线看小早川怜子av | 亚洲一级免费电影 | 成人国产精品入口 | 在线观看日本高清mv视频 | 夜夜躁日日躁狠狠躁 | 99久久精品免费看国产一区二区三区 | 欧美日本中文字幕 | 日韩在线观看视频在线 | 西西44人体做爰大胆视频 | 91视频网址入口 | 欧美激情视频免费看 | 九九久久精品视频 | 国产一卡二卡在线 | 精品亚洲免费视频 | 国产精品毛片久久久 | 国产一级在线观看 | 97视频在线播放 | 欧美日韩亚洲在线观看 | 中文字幕2021 | 久久久国产精品视频 | 9久久精品| 在线影院 国内精品 | 人人澡人人爽欧一区 | 亚洲精品在线一区二区三区 | 正在播放一区 | 天天插视频 | 欧美五月婷婷 | 欧美日韩一区二区在线 | 国产一级片毛片 | 伊人伊成久久人综合网小说 | 色婷婷狠狠五月综合天色拍 | 国产精选在线观看 | 国产精品一区在线播放 | 成人永久在线 | 探花在线观看 | 国产99久久久精品 | 午夜av不卡 | 天天射天天射天天 | 视频高清 | 夜夜躁狠狠躁 | 国产精品毛片久久蜜 | 国产在线观看,日本 | av在观看| 中文字幕一区二区三区乱码不卡 | 麻豆小视频在线观看 | 欧美怡红院 | 色婷av| 国产免码va在线观看免费 | 亚洲精品视频在线看 | 99超碰在线观看 | 精品久久1 | 亚洲精品一区中文字幕乱码 | 久久99精品久久久久久清纯直播 | 国产亚洲在线观看 | 91九色在线观看视频 | 久久久久久草 | 成人av网页| 久久免费视频在线 | 日韩精品在线看 | 久久久久国产一区二区三区 | 最新国产精品视频 | 碰超人人 | 九草在线观看 | 天天色宗合| 色综合激情网 | 日韩肉感妇bbwbbwbbw | 日韩视频在线观看视频 | 日韩在线一区二区免费 | 久久久久久久久久电影 | 亚洲激情校园春色 | 在线 国产 亚洲 欧美 | 色综合天天色综合 | 97中文字幕 | 国产在线观看中文字幕 | 精品久久久久久国产91 | 在线日韩一区 | 中文字幕丰满人伦在线 | 一区在线播放 | 99久久婷婷国产综合亚洲 | 亚洲日本欧美在线 | 色wwww| 99麻豆视频 | 精品久久久一区二区 | 国产成人高清av | 久久国产美女 | 国产一区二区三区高清播放 | 中文字幕色站 | 久久中文欧美 | 美女视频国产 | 一本—道久久a久久精品蜜桃 | 69国产在线观看 | 久久久精品小视频 | 国产高清永久免费 | 国产精品一区二区美女视频免费看 | 亚洲欧洲国产日韩精品 | 在线观看岛国片 | 九九在线精品视频 | 欧美小视频在线观看 | 人人爽人人澡人人添人人人人 | av中文字幕在线观看网站 | 国产美女被啪进深处喷白浆视频 | 亚洲成人午夜av | 一级片视频在线 | 精品日韩在线 | 玖玖玖在线 | 亚洲一区视频在线播放 | 国产精品观看 | 99re在线视频观看 | 人人搞人人搞 | 国产精品久久久一区二区 | 欧美另类xxxx| 中文 一区二区 | 国产精品视频大全 | 色国产视频 | 国产精品九九视频 | 免费高清影视 | 日韩免费高清在线 | 99热官网 | 91九色蝌蚪视频 | av在线com| 亚洲成人精品久久 | 婷婷激情在线观看 | 国产手机av| 涩涩网站在线 | 黄色毛片在线 | 在线观看成人小视频 | 久久伦理电影 | 亚洲欧美日韩精品一区二区 | 日本一区二区不卡高清 | 黄色毛片在线观看 | 成人精品视频久久久久 | 国产高清专区 | 精品一区二区三区电影 | 97免费在线观看视频 | 国产又粗又猛又黄又爽的视频 | 欧美大片www| 国产成人一区二区三区电影 | 国产精品尤物视频 | 久久久久在线观看 | 午夜在线免费观看 | 国产一级免费播放 | 中文字幕一区三区 | 国产超碰在线观看 | 免费 在线 中文 日本 | 99精品国产免费久久 | 亚洲精品永久免费视频 | 中文在线√天堂 | 国产不卡一二三区 | 亚洲精品久久久蜜臀下载官网 | 99久久婷婷国产精品综合 | 欧美一区二区精美视频 | 欧美日韩电影在线播放 | 在线观看香蕉视频 | 一区二区三区在线观看 | 热久久国产 | 在线视频 亚洲 | 国产视频一区在线免费观看 | 欧美在线观看视频免费 | 国产一级久久 | 国产999视频在线观看 | 久久av福利 | 日韩理论在线观看 | 婷婷激情五月 | 丁香婷婷久久久综合精品国产 | 日韩欧美国产视频 | 久久久久久久久久久久久久av | 999精品在线 | 欧美天堂视频在线 | 亚洲综合色丁香婷婷六月图片 | www.亚洲精品视频 | 亚洲国产午夜精品 | 九色porny真实丨国产18 | 黄色a在线观看 | 97人人模人人爽人人喊网 | 欧美aa一级 | 久久久久区 | 亚洲成av人片在线观看www | 国产精品久久久久久久久久久久久久 | 中文av资源站 | 成人播放器 | 国内偷拍精品视频 | 最新日韩中文字幕 | 麻豆精品传媒视频 | 日女人免费视频 | 波多野结依在线观看 | 免费观看国产精品视频 | 欧美激情h | 成人久久影院 | 日韩精品一区二区三区丰满 | 国产精品入口麻豆 | 精品一区二区三区久久 | 黄色片亚洲 | 欧美性色黄大片在线观看 | 天天综合入口 | 久久久精品久久日韩一区综合 | 国产精品一区二区三区在线播放 | 免费av的网站 | 99久久精品久久亚洲精品 | 国产麻豆精品久久 | 久久五月婷婷丁香社区 | 日韩高清在线观看 | 久久伊人精品一区二区三区 | 色吊丝在线永久观看最新版本 | 亚洲一级免费电影 | 热热热热热色 | 国产中文字幕在线观看 | 四川bbb搡bbb爽爽视频 | av在线免费播放网站 | 色综合咪咪久久网 | 97国产在线 | 综合色综合色 | 精品久久久久久电影 | 99视频久久 | 日韩专区中文字幕 | 99热在线观看| 日韩欧美在线中文字幕 | 日韩精品一区二区三区丰满 | 欧美老女人xx| 日日爱影视 | 精品久久一区二区 | 久久午夜国产精品 | 久av在线 | 亚洲激情在线 | 又爽又黄又无遮挡网站动态图 | 日本性xxx| 91成人免费视频 | 97视频资源| 欧美日韩大片在线观看 | 国产精品99久久久精品免费观看 | 久久久资源 | av字幕在线 | 美女网站视频免费黄 | 草久久久久久 | 亚洲欧美日韩国产一区二区 | 免费99视频 | a色视频| 国产精品9区 | 开心丁香婷婷深爱五月 | 国产精品资源在线 | 在线a视频免费观看 | 在线观看视频你懂得 | 国产在线v| 天天色天天操综合网 | 91精品久久久久久久久久入口 | 99精品观看 | 久久免费99 | 国产一级淫片免费看 | 精品中文字幕在线播放 | 97视频精品 | 久久婷婷国产色一区二区三区 | 国产精品视频最多的网站 | 成人在线黄色电影 | 日本中文字幕在线电影 | av日韩精品 | 久久视频免费观看 | 久久视频这里只有精品 | 99热在线精品观看 | 国产美女精品视频 | 91麻豆国产福利在线观看 | 欧美最猛性xxx | 亚洲精选在线观看 | 国产一区国产二区在线观看 | 色妞色视频一区二区三区四区 | 成年人电影免费看 | 日韩欧美视频免费观看 | 天天天天综合 | 日韩在线观看视频在线 | 99精品免费网| 久久久久久久久久久免费 | 亚洲国产激情 | 99精品在线视频播放 | 国产亚洲欧美精品久久久久久 | 精品久久久久久久久久久久久久久久久久 | 国产成a人亚洲精v品在线观看 | 制服丝袜一区二区 | 国产高清久久久久 | 欧美日性视频 | 99热官网 | 日韩a免费 | 精品少妇一区二区三区在线 | 精品久久亚洲 | 三级黄免费看 | 久久天天躁狠狠躁夜夜不卡公司 | 久福利| 看黄色91| 精品国产欧美一区二区 | 久草久草视频 | 亚洲精品视频在线免费播放 | 一区二区三区精品在线 | 免费视频久久 | 国产成人一区二 | 国产视频亚洲视频 | 麻豆精品在线 | 久久精品视频在线观看免费 | 日本一区二区三区免费观看 | 天天综合久久 | 亚洲国产高清在线观看视频 | 国产精品久久久久久久久久久久久久 | 天天操天天综合网 | 91九色老| 午夜在线观看影院 | 亚洲视频精选 | 在线日韩视频 | 欧美乱熟臀69xxxxxx | 国产破处在线播放 | 国产91电影在线观看 | 成人久久久久久久久久 | 国产永久免费高清在线观看视频 | 欧美 日韩 国产 成人 在线 | 黄色av免费电影 | 日韩精品电影在线播放 | 久久伦理电影网 | www.夜夜草| 国产成人精品亚洲日本在线观看 | 探花视频在线版播放免费观看 | 国产精品99久久久久久有的能看 | 在线a亚洲视频播放在线观看 | 精品国产成人av | 中文字幕乱码在线播放 | 九色精品在线 | 欧美成年黄网站色视频 | 996久久国产精品线观看 | 欧美日韩另类在线观看 | 国产麻豆成人传媒免费观看 | 欧日韩在线视频 | 免费国产一区二区视频 | 国产高清日韩欧美 | 午夜91视频 | 国色综合| av最新资源| 精品乱码一区二区三四区 | www.久久色 | 免费看污网站 | 中文字幕在线免费观看视频 | 久久国产精品精品国产色婷婷 | 综合久久婷婷 | 成人毛片100免费观看 | 激情五月婷婷 | 天天干,天天射,天天操,天天摸 | 欧美日韩免费视频 | av网站大全免费 | 久久免费美女视频 | 国产精品久久久久久久久久久久 | www.久久久.cum | 久久免费播放视频 | 欧美激情操 | 日韩免费看片 | 最近最新mv字幕免费观看 | 日日干美女 | 在线欧美中文字幕 | 最近日本韩国中文字幕 | 久久综合九色九九 | 麻豆影视网 | 亚洲精品成人 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产精品乱码在线 | 国产高清视频在线免费观看 | 欧美国产在线看 | 精品视频免费看 | 天天干,夜夜操 | 国产精品视频免费 | 亚洲精品免费观看 | 国产精品一区在线观看你懂的 | 成年人在线免费看视频 | 色狠狠一区二区 | 国产亚洲精品久久久久久久久久久久 | 亚洲一级理论片 | 国产一区二区电影在线观看 | 91亚洲精品久久久 | 欧美亚洲国产日韩 | 亚洲在线视频网站 | 久久久久久久综合色一本 | 免费在线黄网 | 高清久久久| 黄色一级在线视频 | 中文十次啦 | 激情婷婷综合 | 在线免费观看视频一区 | 成av在线 | 亚洲成人影音 | 狠狠网| 日韩一区二区三区免费视频 | 成人在线观看你懂的 | 操久久免费视频 | 视频91 | www.五月天婷婷 | www视频在线播放 | 国产综合精品久久 | 国产一区黄色 | av一级片 | 99久久婷婷国产精品综合 | 黄色三级网站在线观看 | 免费特级黄毛片 | 中文一区在线 | 中文在线a在线 | 992tv又爽又黄的免费视频 | 免费一级毛毛片 | 99免在线观看免费视频高清 | 国产精品色婷婷视频 | 欧美久久99| 久久观看免费视频 | 色偷偷男人的天堂av | 婷婷丁香久久五月婷婷 | 免费亚洲精品视频 | 夜夜高潮夜夜爽国产伦精品 | av黄免费看 | 午夜精品久久久久久久99热影院 | 91av国产视频 | 欧美日韩18 | 国产午夜亚洲精品 | 91视视频在线直接观看在线看网页在线看 | 国产视频不卡 | 天天摸夜夜操 | 国产美女免费观看 | 欧美怡红院 | 最近乱久中文字幕 | 久精品视频在线观看 | 久草视频网 | 五月婷婷久久综合 | 91免费版在线 | 久久6精品 | 又紧又大又爽精品一区二区 | 五月婷婷开心 | 天天爱天天 | 中文字幕在线免费 | 国产福利不卡视频 | 91看片麻豆 | 久久久久久久影视 | 日韩av不卡在线观看 | 伊人夜夜 | 国产黄色片久久久 | 日日夜操 | 国产成人高清 | 国产成人精品av在线 | 免费在线观看日韩视频 | 国产精品原创av片国产免费 | 国产成a人亚洲精v品在线观看 | 黄色的网站在线 | 午夜国产福利在线观看 | 亚洲经典在线 | 美女网色 | 中文字幕一二三区 | 精品视频一区在线观看 | 韩国av一区二区三区在线观看 | 黄色小网站在线 | 一区二区三区免费看 | 97碰在线视频| 免费国产亚洲视频 | 人人澡人人爽欧一区 | 成人性生交大片免费看中文网站 | 亚洲国产黄色 | 午夜精品久久久久久久久久久久 | 在线免费观看视频你懂的 | 五月开心六月婷婷 | 国产 日韩 在线 亚洲 字幕 中文 | 在线免费av电影 | 久久久精品在线观看 | 欧美精品小视频 | 国产美腿白丝袜足在线av | 91精品视频观看 | 最近2019中文免费高清视频观看www99 | 人人草天天草 | 丁香婷婷激情网 | 又色又爽又激情的59视频 | 亚洲五月综合 | 国外成人在线视频网站 | 天天综合网~永久入口 | 亚洲专区在线播放 | 深爱婷婷激情 | 韩国av免费观看 | 99亚洲精品 | 国产一区二区在线观看视频 | 九九热只有精品 | 久草在线最新免费 | 在线中文字幕一区二区 | 视频在线日韩 | 国产亚洲字幕 | 欧美一区二区精品在线 | 亚洲精品欧洲精品 | 久久久亚洲网站 | 日本久久中文 | 欧美国产日韩一区二区 | 99r在线视频 | 夜夜爽88888免费视频4848 | 久久午夜网 | 天天综合网天天综合色 | 国产精品久久久久久av | 亚洲最大av在线播放 | 福利电影久久 | 免费看三级黄色片 | 丁香色天天| 在线观看蜜桃视频 | 久久精品黄色 | 99视| 国产大陆亚洲精品国产 | 四虎影视成人精品国库在线观看 | 大型av综合网站 | 99久久久久久 | www.色综合.com | 九色91福利| 国产视频亚洲精品 | 色综合久久中文综合久久牛 | 国产精品a久久久久 | 人人草在线视频 | 国产网红在线观看 | 日韩中文字幕在线观看 | 亚洲视频网站在线观看 | 久草免费新视频 | 免费色黄| 久草资源在线观看 | 国产精品一码二码三码在线 | 午夜在线观看影院 | 欧美大jb | www色com| 国产在线观看91 | 亚洲在线成人精品 | 免费下载高清毛片 | 麻豆91在线播放 | 欧美性免费| www国产亚洲精品久久网站 | 黄色网中文字幕 |