<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
xmlns:w="urn:schemas-microsoft-com:office:word"
|
xmlns="http://www.w3.org/TR/REC-html40">
|
|
<head>
|
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
<meta name=ProgId content=Word.Document>
|
<meta name=Generator content="Microsoft Word 9">
|
<meta name=Originator content="Microsoft Word 9">
|
<link rel=File-List href="./WinRTP_Features_and_User_Guide_files/filelist.xml">
|
<title>Features and User Guide</title>
|
<!--[if gte mso 9]><xml>
|
<o:DocumentProperties>
|
<o:Author>Cisco User</o:Author>
|
<o:LastAuthor>Arijit Mukherji</o:LastAuthor>
|
<o:Revision>150</o:Revision>
|
<o:TotalTime>2110</o:TotalTime>
|
<o:Created>2001-05-19T23:31:00Z</o:Created>
|
<o:LastSaved>2003-02-14T23:05:00Z</o:LastSaved>
|
<o:Pages>13</o:Pages>
|
<o:Words>5574</o:Words>
|
<o:Characters>31772</o:Characters>
|
<o:Company>Cisco Systems, Inc.</o:Company>
|
<o:Lines>264</o:Lines>
|
<o:Paragraphs>63</o:Paragraphs>
|
<o:CharactersWithSpaces>39018</o:CharactersWithSpaces>
|
<o:Version>9.4402</o:Version>
|
</o:DocumentProperties>
|
</xml><![endif]-->
|
<style>
|
<!--
|
/* Font Definitions */
|
@font-face
|
{font-family:Wingdings;
|
panose-1:5 0 0 0 0 0 0 0 0 0;
|
mso-font-charset:2;
|
mso-generic-font-family:auto;
|
mso-font-pitch:variable;
|
mso-font-signature:0 268435456 0 0 -2147483648 0;}
|
@font-face
|
{font-family:Tahoma;
|
panose-1:2 11 6 4 3 5 4 4 2 4;
|
mso-font-charset:0;
|
mso-generic-font-family:swiss;
|
mso-font-pitch:variable;
|
mso-font-signature:553679495 -2147483648 8 0 66047 0;}
|
@font-face
|
{font-family:Garamond;
|
panose-1:2 2 4 4 3 3 1 1 8 3;
|
mso-font-charset:0;
|
mso-generic-font-family:roman;
|
mso-font-pitch:variable;
|
mso-font-signature:647 0 0 0 159 0;}
|
/* Style Definitions */
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
{mso-style-parent:"";
|
margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
h1
|
{mso-style-next:Normal;
|
margin-top:12.0pt;
|
margin-right:0in;
|
margin-bottom:3.0pt;
|
margin-left:0in;
|
mso-pagination:widow-orphan;
|
mso-outline-level:1;
|
font-size:16.0pt;
|
font-family:Arial;
|
mso-font-kerning:16.0pt;
|
font-weight:bold;}
|
h2
|
{mso-style-next:Normal;
|
margin-top:12.0pt;
|
margin-right:0in;
|
margin-bottom:3.0pt;
|
margin-left:0in;
|
mso-pagination:widow-orphan;
|
mso-outline-level:2;
|
font-size:14.0pt;
|
font-family:Arial;
|
font-weight:bold;
|
font-style:italic;}
|
h3
|
{mso-style-next:Normal;
|
margin-top:12.0pt;
|
margin-right:0in;
|
margin-bottom:3.0pt;
|
margin-left:0in;
|
mso-pagination:widow-orphan;
|
mso-outline-level:3;
|
font-size:13.0pt;
|
font-family:Arial;
|
font-weight:bold;}
|
h4
|
{mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:.25in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
mso-outline-level:4;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
font-weight:bold;}
|
h5
|
{mso-style-next:Normal;
|
margin:0in;
|
margin-bottom:.0001pt;
|
text-align:center;
|
mso-pagination:widow-orphan;
|
mso-outline-level:5;
|
tab-stops:.5in;
|
font-size:18.0pt;
|
mso-bidi-font-size:12.0pt;
|
font-family:"Times New Roman";
|
font-weight:normal;}
|
p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:12.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex2, li.MsoIndex2, div.MsoIndex2
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:24.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:.5in;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex4, li.MsoIndex4, div.MsoIndex4
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:48.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex5, li.MsoIndex5, div.MsoIndex5
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:60.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex6, li.MsoIndex6, div.MsoIndex6
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:1.0in;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex7, li.MsoIndex7, div.MsoIndex7
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:84.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex8, li.MsoIndex8, div.MsoIndex8
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:96.0pt;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndex9, li.MsoIndex9, div.MsoIndex9
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:1.5in;
|
margin-bottom:.0001pt;
|
text-indent:-12.0pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc1, li.MsoToc1, div.MsoToc1
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc2, li.MsoToc2, div.MsoToc2
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:12.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc3, li.MsoToc3, div.MsoToc3
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:24.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc4, li.MsoToc4, div.MsoToc4
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:.5in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc5, li.MsoToc5, div.MsoToc5
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:48.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc6, li.MsoToc6, div.MsoToc6
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:60.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc7, li.MsoToc7, div.MsoToc7
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:1.0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc8, li.MsoToc8, div.MsoToc8
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:84.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoToc9, li.MsoToc9, div.MsoToc9
|
{mso-style-update:auto;
|
mso-style-next:Normal;
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:96.0pt;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
|
{mso-style-next:"Index 1";
|
margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
|
{margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";
|
font-weight:bold;}
|
a:link, span.MsoHyperlink
|
{color:blue;
|
text-decoration:underline;
|
text-underline:single;}
|
a:visited, span.MsoHyperlinkFollowed
|
{color:purple;
|
text-decoration:underline;
|
text-underline:single;}
|
p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap
|
{margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:widow-orphan;
|
background:navy;
|
font-size:12.0pt;
|
font-family:Tahoma;
|
mso-fareast-font-family:"Times New Roman";}
|
p
|
{margin-right:0in;
|
mso-margin-top-alt:auto;
|
mso-margin-bottom-alt:auto;
|
margin-left:0in;
|
mso-pagination:widow-orphan;
|
font-size:12.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.DefinitionTerm, li.DefinitionTerm, div.DefinitionTerm
|
{mso-style-name:"Definition Term";
|
mso-style-next:"Definition List";
|
margin:0in;
|
margin-bottom:.0001pt;
|
mso-pagination:none;
|
layout-grid-mode:char;
|
font-size:12.0pt;
|
mso-bidi-font-size:10.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
p.DefinitionList, li.DefinitionList, div.DefinitionList
|
{mso-style-name:"Definition List";
|
mso-style-next:"Definition Term";
|
margin-top:0in;
|
margin-right:0in;
|
margin-bottom:0in;
|
margin-left:.25in;
|
margin-bottom:.0001pt;
|
mso-pagination:none;
|
layout-grid-mode:char;
|
font-size:12.0pt;
|
mso-bidi-font-size:10.0pt;
|
font-family:"Times New Roman";
|
mso-fareast-font-family:"Times New Roman";}
|
@page Section1
|
{size:8.5in 11.0in;
|
margin:1.0in 1.25in 1.0in 1.25in;
|
mso-header-margin:.5in;
|
mso-footer-margin:.5in;
|
mso-paper-source:0;}
|
div.Section1
|
{page:Section1;}
|
/* List Definitions */
|
@list l0
|
{mso-list-id:111479506;
|
mso-list-type:hybrid;
|
mso-list-template-ids:2024538176 -131312144 1901724218 -950228560 1920611558 -1528159992 -1828803616 1049896250 -1717416544 1374743150;}
|
@list l0:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l1
|
{mso-list-id:133067113;
|
mso-list-type:hybrid;
|
mso-list-template-ids:1030534764 -416529916 583960748 -1303071544 -114657290 2089734108 -880926728 -457405726 1987371028 330189370;}
|
@list l1:level1
|
{mso-level-start-at:6;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;}
|
@list l1:level2
|
{mso-level-number-format:bullet;
|
mso-level-text:o;
|
mso-level-tab-stop:1.0in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:"Courier New";
|
mso-bidi-font-family:"Times New Roman";}
|
@list l2
|
{mso-list-id:415253360;
|
mso-list-type:hybrid;
|
mso-list-template-ids:-397494320 1296967320 225201942 2010255806 336518432 -1691048712 1698748414 -1254489888 -130772708 -2003652616;}
|
@list l2:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l3
|
{mso-list-id:564146492;
|
mso-list-type:hybrid;
|
mso-list-template-ids:594983094 -1099630766 -1344622006 1255035732 1344060978 897491052 -443759510 -1863261300 463100162 -41280236;}
|
@list l3:level1
|
{mso-level-start-at:5;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;}
|
@list l4
|
{mso-list-id:691300601;
|
mso-list-type:hybrid;
|
mso-list-template-ids:-451478540 1549194676 104778618 -1478195206 300579976 -672391940 866423562 -2059380128 -1560541112 -280484926;}
|
@list l4:level1
|
{mso-level-start-at:4;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;}
|
@list l5
|
{mso-list-id:713426800;
|
mso-list-type:hybrid;
|
mso-list-template-ids:-199702280 1963080862 -485063550 383011206 534795928 -1695369730 1109702896 -2119116944 -1505882892 1248619552;}
|
@list l5:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l5:level2
|
{mso-level-number-format:bullet;
|
mso-level-text:o;
|
mso-level-tab-stop:1.0in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:"Courier New";
|
mso-bidi-font-family:"Times New Roman";}
|
@list l6
|
{mso-list-id:741945429;
|
mso-list-type:hybrid;
|
mso-list-template-ids:-677488280 -2069080770 -1742853766 -1745312576 -345083562 2033376694 1269600380 1194124382 -2067000010 -62771756;}
|
@list l6:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l7
|
{mso-list-id:1038236733;
|
mso-list-type:hybrid;
|
mso-list-template-ids:1314008774 -789566644 1418993942 -1100467792 -1518055952 1426477450 -1402579096 -1251946382 1637528920 1863777030;}
|
@list l7:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l8
|
{mso-list-id:1051924795;
|
mso-list-type:hybrid;
|
mso-list-template-ids:514356414 158605600 157984362 -1043959040 581726442 602557152 -257516230 1301287462 -2006027698 -1229581654;}
|
@list l9
|
{mso-list-id:1371144666;
|
mso-list-type:hybrid;
|
mso-list-template-ids:1440355696 -1053368226 568392300 -870521452 -612497676 556976644 -1349324032 274227134 1924547160 -1573631658;}
|
@list l9:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l10
|
{mso-list-id:1621254975;
|
mso-list-type:hybrid;
|
mso-list-template-ids:2078857292 -1944676290 655506806 1394391504 -515836668 827103826 -836992898 -10200188 1227505702 1641081652;}
|
@list l10:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
@list l11
|
{mso-list-id:1860462196;
|
mso-list-type:hybrid;
|
mso-list-template-ids:1609484806 -518614414 -1154966758 -1572715080 -54611370 73796384 926854678 495324852 1491230770 -130541766;}
|
@list l12
|
{mso-list-id:1972398878;
|
mso-list-type:hybrid;
|
mso-list-template-ids:1654264972 -963724260 510279228 -617290504 -1928700160 186274160 -1899486384 441593828 -1310148574 2100362842;}
|
@list l12:level1
|
{mso-level-number-format:bullet;
|
mso-level-text:\F0B7;
|
mso-level-tab-stop:.5in;
|
mso-level-number-position:left;
|
text-indent:-.25in;
|
mso-ansi-font-size:10.0pt;
|
font-family:Symbol;}
|
ol
|
{margin-bottom:0in;}
|
ul
|
{margin-bottom:0in;}
|
-->
|
</style>
|
</head>
|
|
<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
|
|
<div class=Section1>
|
|
<p class=MsoIndexHeading align=center style='text-align:center;tab-stops:.5in'><a
|
name="_Toc515040013"><span style='font-size:18.0pt;mso-bidi-font-size:12.0pt'>WinRTP<o:p></o:p></span></a></p>
|
|
<span style='mso-bookmark:_Toc515040013'></span>
|
|
<p class=MsoIndexHeading align=center style='text-align:center'><span
|
style='font-size:18.0pt;mso-bidi-font-size:12.0pt'>Programmers</span> <span
|
style='font-size:18.0pt;mso-bidi-font-size:12.0pt'>Guide</span></p>
|
|
<p class=MsoNormal align=center style='text-align:center;tab-stops:.5in'><span
|
style='font-size:18.0pt;mso-bidi-font-size:12.0pt'> <o:p></o:p></span></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><!--[if supportFields]><span
|
style='mso-element:field-begin'></span><span style="mso-spacerun:
|
yes"> </span>TOC \o "1-3" \h \z <span style='mso-element:field-separator'></span><![endif]--><span
|
class=MsoHyperlink><a href="#_Toc32998468">Overview of this Document<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998468 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>1</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400360038000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998469">Introduction<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998469 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>1</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400360039000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998470">What's New<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>.. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998470 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>1</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370030000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998471">Features<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998471 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>2</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370031000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998472">Components and Installation<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998472 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>2</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370032000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998473">Source Code Distribution<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998473 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>2</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370033000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998474">Binary Distribution<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998474 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>2</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370034000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998475">Installation<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998475 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>3</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370035000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998476">Test Program<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>.. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998476 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>3</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370036000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998477"><span lang=FR style='mso-ansi-language:
|
FR'>Interface Description/Programmers Guide</span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998477 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>3</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370037000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998478">WINRTP COM Interface<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998478 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>3</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370038000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998479">Details of WINRTP Interface
|
(Interface ICCNMediaTerm)<span style='color:windowtext;display:none;mso-hide:
|
screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
|
1 dotted'> </span></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-begin'></span></span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
|
_Toc32998479 \h </span><span style='color:windowtext;display:none;mso-hide:
|
screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>4</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400370039000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998480">COM GUIDs, etc<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998480 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>9</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380030000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998481">Configurable Parameters<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998481 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380031000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998482">Static/Dynamic Jitter Buffer<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998482 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380032000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998483">Jitter Buffer Length<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998483 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380033000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998484">Level of Auto-Amplification of
|
incoming RTP audio streams<span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998484 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380034000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998485">Type of Service Value (DiffServ
|
Byte) of Outgoing RTP Packets<span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998485 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380035000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998486">Fixed Transmit Port for UDP Packets<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998486 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380036000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998487">Pre-emphasis of transmitted audio<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998487 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>11</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380037000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998488">Post-emphasis of received audio<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998488 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>12</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380038000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998489">Volume Limiting<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998489 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>12</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400380039000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998490">Sample Code<span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998490 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>12</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400390030000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
|
class=MsoHyperlink><a href="#_Toc32998491">Future Improvements<span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'><span style='mso-element:field-begin'></span></span><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'> PAGEREF _Toc32998491 \h </span><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-separator'></span></span><![endif]--><span
|
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
|
text-underline:none'>13</span><span style='color:windowtext;display:none;
|
mso-hide:screen;text-decoration:none;text-underline:none'><!--[if gte mso 9]><xml>
|
<w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300330032003900390038003400390031000000</w:data>
|
</xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
|
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
|
style='mso-element:field-end'></span></span><![endif]--></a></span><o:p></o:p></p>
|
|
<p class=MsoNormal><!--[if supportFields]><span style='mso-element:field-end'></span><![endif]--> </p>
|
|
<h2><a name="_Toc515040015"></a><a name="_Toc515040069"></a><a
|
name="_Toc32998468"><span style='mso-bookmark:_Toc515040069'><span
|
style='mso-bookmark:_Toc515040015'>Overview of this Document</span></span></a></h2>
|
|
<p class=MsoNormal>This document describes the WinRTP for the Cisco IP
|
SoftPhone from a programmers point of view. It discusses the COM interface it
|
provides, installation, and configuration of the component.</p>
|
|
<p class=MsoNormal> </p>
|
|
<h2><a name="_Toc515040016"></a><a name="_Toc515040070"></a><a
|
name="_Toc32998469"><span style='mso-bookmark:_Toc515040070'><span
|
style='mso-bookmark:_Toc515040016'>Introduction</span></span></a></h2>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal style='margin-left:57.0pt;text-indent:-.25in;tab-stops:list 57.0pt'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>It is written in C++</p>
|
|
<p class=MsoNormal style='margin-left:57.0pt;text-indent:-.25in;tab-stops:list 57.0pt'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>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.<span
|
style='font-size:7.0pt'> </span></p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal>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 Ciscos
|
AVVID), it can use this component.</p>
|
|
<p class=MsoNormal> </p>
|
|
<h2><a name="_Toc32998470">What's New</a></h2>
|
|
<p>Here are the improvements since the last version</p>
|
|
<ul type=disc>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Completely standalone package
|
Compatible with all flavors of desktop Windows starting from Windows 95.
|
Uses standard .DLL files that come with all Windows flavors</li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Simple distribution: just two
|
DLL's, no more .ax files. Also, the whole software is less than 300 Kbytes
|
</li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Support for multiple sound
|
cards </li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Dynamic jitter buffer
|
algorithm option: it is very simple, but it works most of the time </li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Audio quality enhancements:
|
including pre-emphasis and post-emphasis of audio to make it sound sharper,
|
automatic amplification of the incoming RTP audio stream</li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Others: Volume limiter
|
algorithm in case you want to use it. </li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>Comes with pre-built binaries
|
for your convenience </li>
|
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
mso-list:l2 level1 lfo1;tab-stops:list .5in'>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 </li>
|
</ul>
|
|
<h2><a name="_Toc515040017"></a><a name="_Toc515040071"></a><a
|
name="_Toc32998471"><span style='mso-bookmark:_Toc515040071'><span
|
style='mso-bookmark:_Toc515040017'>Features</span></span></a></h2>
|
|
<p class=MsoNormal>WINRTP consists of two independent parts. One part has the
|
ability to capture the users voice (using the systems 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 PCs speaker. When both
|
parts are used together, then WINRTP acts like an IP based voice endpoint. Here
|
are the features in short</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Support
|
for multiple sound devices:</b> 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) </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Number
|
of streams: </b>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 systems speaker or microphone at a
|
time. </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Codec
|
Support: </b>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 </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Support
|
for Audio Mixing:</b> WINRTP allows the mixing of other audio streams
|
(from WAV files) to be mixed with the incoming and outgoing audio streams.
|
</li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Volume
|
Control Support:</b> WINRTP supports setting the volume level for the
|
Microphone, Speaker, and each file that is being mixed in the audio
|
streams. </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Silence
|
Suppression: </b>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. </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>QoS
|
Support:</b> WINRTP supports DiffServ (IP Type of Service-TOS) packet
|
tagging for outgoing RTP packets. </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>RTP
|
Implementation:</b> Encoding and decoding of RTP packets. </li>
|
<ul style='margin-top:0in' type=circle>
|
<li class=MsoNormal style='mso-list:l5 level2 lfo2;tab-stops:list 1.0in'>WINRTP
|
does not support RTCP, but it does sink RTCP packets sent by the other
|
end to prevent ICMP messages due to discarded packets. </li>
|
</ul>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Independence
|
of transmit/receive sides: </b>The transmit and receive sides are
|
independent, and that means </li>
|
<ul style='margin-top:0in' type=circle>
|
<li class=MsoNormal style='mso-list:l5 level2 lfo2;tab-stops:list 1.0in'>Different
|
codecs may be used for transmit and receive </li>
|
<li class=MsoNormal style='mso-list:l5 level2 lfo2;tab-stops:list 1.0in'>User
|
can choose to do only one of the two operations </li>
|
</ul>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Operating
|
Systems Supported: </b>All flavors of windows Windows95 and later,
|
including Windows NT (Service Pack 3 onwards), Windows ME and Windows
|
2000/XP </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>Configurable/Dynamic
|
Jitter Buffer:</b> The depth of the jitter buffer can be specified, or a
|
dynamic jitter buffer can also be used </li>
|
<li class=MsoNormal style='mso-list:l5 level1 lfo2;tab-stops:list .5in'><b>DSP
|
algorithms:</b> 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</li>
|
</ul>
|
|
<h2><a name="_Toc515040018"></a><a name="_Toc515040072"></a><a
|
name="_Toc32998472"><span style='mso-bookmark:_Toc515040072'><span
|
style='mso-bookmark:_Toc515040018'>Components and Installation</span></span></a></h2>
|
|
<p class=MsoNormal>The distribution comes with both source code and binaries.
|
Extract the ZIP file to obtain everything. It will create a directory called WinRTP,
|
which will contain everything. </p>
|
|
<h3><a name="_Toc32998473">Source Code Distribution</a></h3>
|
|
<p class=MsoNormal>Build Order</p>
|
|
<ol style='margin-top:0in' start=1 type=1>
|
<li class=MsoNormal style='mso-list:l8 level1 lfo3;tab-stops:list .5in'>TracerServer
|
</li>
|
<li class=MsoNormal style='mso-list:l8 level1 lfo3;tab-stops:list .5in'>Tracer
|
</li>
|
<li class=MsoNormal style='mso-list:l8 level1 lfo3;tab-stops:list .5in'>CCNMediaTerm
|
</li>
|
</ol>
|
|
<p class=MsoNormal>This will create TraceServer.dll and CCNSMT.dll. Build these
|
projects either in Debug or Release mode. </p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998474">Binary Distribution</a></h3>
|
|
<p class=MsoNormal>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</p>
|
|
<h3><a name="_Toc515040020"></a><a name="_Toc515040074"></a><a
|
name="_Toc32998475"><span style='mso-bookmark:_Toc515040074'><span
|
style='mso-bookmark:_Toc515040020'>Installation</span></span></a></h3>
|
|
<h4>Third Party Dependencies</h4>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>None</p>
|
|
<h4>Location of Distributed Files</h4>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l6 level1 lfo4;tab-stops:list .5in'>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 </li>
|
<li class=MsoNormal style='mso-list:l6 level1 lfo4;tab-stops:list .5in'>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. </li>
|
</ul>
|
|
<h4>Final Install Steps</h4>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>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)</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l9 level1 lfo5;tab-stops:list .5in'>Regsvr32
|
CCNSMT.dll </li>
|
</ul>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998476">Test Program</a></h3>
|
|
<p class=MsoNormal>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</p>
|
|
<p class=MsoNormal> </p>
|
|
<h2><a name="_Toc515040021"></a><a name="_Toc515040075"></a><a
|
name="_Toc32998477"><span style='mso-bookmark:_Toc515040075'><span
|
style='mso-bookmark:_Toc515040021'><span lang=FR style='mso-ansi-language:FR'>Interface
|
Description/Programmers Guide</span></span></span></a><span lang=FR
|
style='mso-ansi-language:FR'><o:p></o:p></span></h2>
|
|
<p class=MsoNormal>The WinRTP main DLL is CCNSMT.dll which exposes a COM
|
interface that can be used to make calls to the WINRTP.</p>
|
|
<h3><a name="_Toc515040022"></a><a name="_Toc515040076"></a><a
|
name="_Toc32998478"><span style='mso-bookmark:_Toc515040076'><span
|
style='mso-bookmark:_Toc515040022'>WINRTP COM Interface</span></span></a></h3>
|
|
<p class=MsoNormal>The interface of WINRTP (ICCNMediaTerm) consists of the
|
following functions</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
Initialize() </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
UnInitialize() </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartMicrophone() - not implemented/needed in this version. </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopMicrophone() - not implemented/needed in this version. </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartAudioReceive() - not implemented/needed in this version. </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopAudioReceive() - not implemented/needed in this version. </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetAudioCodecRX(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
CompressionType,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
MillisecPacketSize, <br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
EchoCancellationValue,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
G723BitRate<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetAudioCodecTX(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
CompressionType,<br>
|
<span style="mso-spacerun: yes"> </span><span
|
style="mso-spacerun: yes"> </span>[in] long
|
MillisecPacketSize,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
PrecedenceValue,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
SilenceSuppression,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
short MaxFramesPerPacket,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
G723BitRate<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetAudioDestination(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] BSTR
|
strHostName,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
nUDPortNumber<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetAudioReceivePort(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] long
|
nUDPPortNumber<br>
|
<span style="mso-spacerun: yes"> </span><span
|
style="mso-spacerun: yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartPlayingFileTX(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] BSTR
|
Filename,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long Mode,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long StartPosition,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long StopPosition,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in, out] long
|
* Cookie<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartPlayingFileRX(<br>
|
<span style="mso-spacerun: yes"> </span><span style="mso-spacerun:
|
yes"> </span>[in] BSTR
|
Filename,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long Mode,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long StartPosition,<br>
|
<span style="mso-spacerun: yes">
|
</span><span style="mso-spacerun: yes"> </span>[in] unsigned long
|
StopPosition,<br>
|
|
[in] unsigned long waveoutDeviceID,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in, out] long
|
* Cookie<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopPlayingFileTX(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long Cookie<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopPlayingFileRX(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long Cookie<br>
|
<span style="mso-spacerun: yes"> </span><span
|
style="mso-spacerun: yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartTX(unsigned long waveinDeviceID) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopTX() </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StartRX(unsigned long waveoutDeviceID) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
StopRX() </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetSpeakerVolume(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long volume<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetMicrophoneVolume(<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in]
|
unsigned long volume<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
<li class=MsoNormal style='mso-list:l10 level1 lfo6;tab-stops:list .5in'>HRESULT
|
SetFilePlayVolume(<br>
|
<span style="mso-spacerun: yes"> </span><span style="mso-spacerun:
|
yes"> </span>[in] unsigned long
|
cookie,<br>
|
<span style="mso-spacerun:
|
yes"> </span>[in] unsigned
|
long volume<br>
|
<span style="mso-spacerun:
|
yes"> </span>) </li>
|
</ul>
|
|
<h4 style='margin-left:0in'>Events From WINRTP</h4>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal>The events interface (ICCNMediaTermEvents) is as follows</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>HRESULT EndOfFileEventRX(<br>
|
<span style="mso-spacerun: yes">
|
</span>[in] long Cookie<br>
|
<span style="mso-spacerun: yes">
|
</span>)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>HRESULT EndOfFileEventTX(<br>
|
<span style="mso-spacerun: yes">
|
</span>[in] long Cookie<br>
|
<span style="mso-spacerun: yes"> </span><span
|
style="mso-spacerun: yes"> </span>)</p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc515040023"></a><a name="_Toc515040077"></a><a
|
name="_Toc32998479"><span style='mso-bookmark:_Toc515040077'><span
|
style='mso-bookmark:_Toc515040023'>Details of WINRTP Interface (Interface
|
ICCNMediaTerm)</span></span></a></h3>
|
|
<p class=MsoNormal>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 <span style='font-family:Wingdings;mso-ascii-font-family:
|
"Times New Roman";mso-hansi-font-family:"Times New Roman";mso-char-type:symbol;
|
mso-symbol-font-family:Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family:
|
Wingdings'>L</span></span> so the recommended way to debug any function<span
|
style="mso-spacerun: yes"> </span>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</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT Initialize()</h4>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Initializes the WINRTP. Instantiates all components. Also
|
sets up default codecs using the following calls</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l12 level1 lfo7;tab-stops:list .5in'><span
|
lang=FR style='mso-ansi-language:FR'>SetAudioCodecTX(Codec = G711 Ulaw
|
64kbps, 20, 0, 0, 1, 0) <o:p></o:p></span></li>
|
<li class=MsoNormal style='mso-list:l12 level1 lfo7;tab-stops:list .5in'><span
|
lang=FR style='mso-ansi-language:FR'>SetAudioCodecRX(Codec = G711 Ulaw
|
64kbps, 20, 0, 0) <o:p></o:p></span></li>
|
</ul>
|
|
<p class=MsoNormal>This function must be called before any other calls to
|
WINRTP</p>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT UnInitialize()</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Uninitializes the WINRTP and releases all allocated
|
resources. This must be the last call made to the WINRTP</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartMicrophone()</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>No implemented/needed in this version</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopMicrophone()</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>No implemented/needed in this version</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartAudioReceive()</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>No implemented/needed in this version</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopAudioReceive()</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>No implemented/needed in this version</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetAudioCodecRX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoBodyText>[in] long CompressionType: <span style='font-weight:normal'>The
|
following values are supported<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:list .5in'><span
|
style='font-family:Symbol;font-weight:normal'>·</span><span style='font-size:
|
7.0pt;font-weight:normal'> </span><span
|
style='font-weight:normal'>2 : G.711 Alaw 64kbps<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:list .5in'><span
|
style='font-family:Symbol;font-weight:normal'>·</span><span style='font-size:
|
7.0pt;font-weight:normal'> </span><span
|
style='font-weight:normal'>4 : G.711 Ulaw 64kbps<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='tab-stops:list .5in'><br>
|
[in] long MillisecPacketSize:<span style='font-weight:normal'> Specifies the
|
length of audio in each incoming RTP audio packets<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='text-indent:.5in'><br>
|
[in] long EchoCancellationValue:<span style='font-weight:normal'> Ignored. Put
|
any value here. Echo cancellation is not supported in the WINRTP<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='text-indent:.5in'><br>
|
[in] long G723BitRate:<span style='font-weight:normal'> Ignored<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='text-indent:.5in'> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetAudioCodecTX</h4>
|
|
<h4 style='margin-left:.5in'> </h4>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Sets the audio codec for the transmit stream (outgoing
|
stream). Should be called while NOT streaming (i.e. before StartTX/after
|
StopTX)</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>[in] long CompressionType: </b>See SetAudioCodecRX</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><b>[in] long MillisecPacketSize:</b> See SetAudioCodecRX</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><b>[in] long PrecedenceValue:</b> Ignored</p>
|
|
<p class=MsoNormal><br>
|
<b>[in] long SilenceSuppression:</b> Specifies whether to do silence suppression
|
in the transmit stream</p>
|
|
<p class=MsoNormal style='text-indent:.5in'>0 : Silence suppression is turned
|
OFF</p>
|
|
<p class=MsoNormal style='text-indent:.5in'>1 : Silence suppression is turned
|
ON</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><b>[in] unsigned short MaxFramesPerPacket:</b> Ignored</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><b>[in] long G723BitRate:</b> See SetAudioCodecRX<br
|
style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]></p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetAudioDestination</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:<o:p></o:p></i></p>
|
|
<p class=MsoNormal>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).</p>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Parameters:<o:p></o:p></i></p>
|
|
<p class=MsoBodyText>[in] BSTR strHostName:<span style='font-weight:normal'> IP
|
address of the destination. E.g. 171.69.12.34</span><br>
|
[in] long nUDPortNumber:<span style='font-weight:normal'> UDP port number where
|
to send the stream</span><br style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]><i><o:p></o:p></i></p>
|
|
<h4 style='margin-left:0in'> </h4>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetAudioReceivePort</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:<o:p></o:p></i></p>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Parameters:<o:p></o:p></i></p>
|
|
<h4 style='margin-left:0in'>[in] long nUDPPortNumber:<span style='font-weight:
|
normal'> UDP port number<o:p></o:p></span></h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartPlayingFileTX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:<o:p></o:p></i></p>
|
|
<p class=MsoNormal>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
|
(users 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.</p>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Parameters:<o:p></o:p></i></p>
|
|
<p class=MsoBodyText>[in] BSTR Filename:<span style='font-weight:normal'> the
|
location (path) of the file to be played<o:p></o:p></span></p>
|
|
<p class=MsoBodyText><br>
|
[in] unsigned long Mode:<span style='font-weight:normal'> specifies whether to
|
play the file once or in a loop<o:p></o:p></span></p>
|
|
<p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:list .5in'><span
|
style='font-family:Symbol;font-weight:normal'>·</span><span style='font-size:
|
7.0pt;font-weight:normal'> </span><span
|
style='font-weight:normal'>0 : play the file continuously in a loop</span></p>
|
|
<p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:list .5in'><span
|
style='font-family:Symbol;font-weight:normal'>·</span><span style='font-size:
|
7.0pt;font-weight:normal'> </span><span
|
style='font-weight:normal'>1 : play the file once</span></p>
|
|
<p class=MsoBodyText style='margin-left:.25in'> </p>
|
|
<p class=MsoBodyText>[in] unsigned long StartPosition:<span style='font-weight:
|
normal'> unimplemented/ignored</span><br style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]></p>
|
|
<p class=MsoBodyText>[in] unsigned long StopPosition:<span style='font-weight:
|
normal'> unimplemented/ignored</span></p>
|
|
<p class=MsoBodyText>[in, out] long * Cookie: <span style='font-weight:normal'>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</span><br
|
style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]></p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartPlayingFileRX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:<o:p></o:p></i></p>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal><i> <o:p></o:p></i></p>
|
|
<p class=MsoNormal><i>Parameters:<o:p></o:p></i></p>
|
|
<p class=MsoNormal>Exactly the same as StartPlayingFileTX, but with another
|
extra parameter</p>
|
|
<p class=MsoNormal><b>[in] unsigned long waveoutDeviceID: </b>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</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartTX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Starts streaming on the transmit side. This method must be
|
called before StartPlayingFileTX is called. Calling this method starts
|
transmitting the users voice</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>unsigned long waveinDeviceID: </b>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StartRX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Sets up WINRTP to start the receive side. It also starts
|
playing the received audio to the speaker. </p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>unsigned long waveoutDeviceID: </b>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopTX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Stops transmitting audio. Stops transmitting the users
|
voice and files.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopRX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Stops receiving and playing audio. Stops playing the
|
received audio stream and the files</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal>None</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetSpeakerVolume</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Sets the speaker volume on the PC. This setting sets the
|
WAVEOUT volume of the system (not the master volume).</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoBodyText>[in] unsigned long volume:<span style='font-weight:normal'>
|
value between 0 and 100 where 0 = silence, and 100 = max volume. The scale is
|
linear, so 50 = half volume</span><br style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]></p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetMicrophoneVolume</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Sets the microphone volume. This setting changes the PCs
|
microphone volume or audio capture volume.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>[in] unsigned long volume:</b> value between 0 and 100
|
where 0 = silence, and 100 = max volume. The scale is linear, so 50 = half
|
volume</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT SetFilePlayVolume</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Sets the volume of a file being played by the WINRTP.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>[in] unsigned long cookie:</b> the cookie that pertains
|
to this instance of the file play. The cookie is obtained when
|
StartPlayingFileTX(or RX) is called</p>
|
|
<p class=MsoNormal><b><br>
|
[in] unsigned long volume: </b>Volume setting. Starts from 0 (silence) to 100
|
(max volume)<b><br style='mso-special-character:line-break'>
|
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
|
<![endif]><o:p></o:p></b></p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopPlayingFileTX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Stops a file being played in the transmit side</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:<o:p></o:p></i></p>
|
|
<p class=MsoNormal><b>[in] unsigned long Cookie:</b> Cookie that was returned
|
when the file started playing.<b><o:p></o:p></b></p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h4 style='margin-left:0in'>HRESULT StopPlayingFileRX</h4>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Description:</i></p>
|
|
<p class=MsoNormal>Stops a file being played in the receive side</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><i>Parameters:</i></p>
|
|
<p class=MsoNormal><b>[in] unsigned long Cookie:</b> Cookie that was returned
|
when the file started playing.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc515040024"></a><a name="_Toc515040078"></a><a
|
name="_Toc32998480"><span style='mso-bookmark:_Toc515040078'><span
|
style='mso-bookmark:_Toc515040024'>COM GUIDs, etc</span></span></a></h3>
|
|
<p class=MsoNormal>The important GUIDs are</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l7 level1 lfo8;tab-stops:list .5in'>WinRTP
|
COM object (CCNMediaTerm class) : 94221C4E-00F1-11D4-9D59-0060B0FC246C </li>
|
<li class=MsoNormal style='mso-list:l7 level1 lfo8;tab-stops:list .5in'>WinRTP
|
COM Inteface (ICCNMediaTerm) : 94221C4D-00F1-11D4-9D59-0060B0FC246C </li>
|
<li class=MsoNormal style='mso-list:l7 level1 lfo8;tab-stops:list .5in'>WinRTP
|
Events Interface (_ICCNMediaTermEvents) :
|
94221C4F-00F1-11D4-9D59-0060B0FC246C </li>
|
</ul>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal>The following code snippet may be useful for more
|
information</p>
|
|
<p class=MsoNormal> </p>
|
|
<h4>WINRTP Interface</h4>
|
|
<p style='margin-right:.5in;margin-left:.5in'>// CCNSMT.idl : IDL source for
|
CCNSMT.dll<br>
|
//<br>
|
<br>
|
// This file will be processed by the MIDL tool to<br>
|
// produce the type library (CCNSMT.tlb) and marshalling code.<br>
|
<br>
|
import "oaidl.idl";<br>
|
import "ocidl.idl";<br>
|
[<br>
|
object,<br>
|
uuid(94221C4D-00F1-11D4-9D59-0060B0FC246C),<br>
|
<br>
|
helpstring("ICCNMediaTerm Interface"),<br>
|
pointer_default(unique)<br>
|
]<br>
|
interface ICCNMediaTerm : IUnknown<br>
|
{<br>
|
[helpstring("method Initialize")]<br>
|
HRESULT Initialize();<br>
|
[helpstring("method UnInitialize")]<br>
|
HRESULT UnInitialize();<br>
|
[helpstring("method StartMicrophone")] <br>
|
HRESULT StartMicrophone();<br>
|
[helpstring("method StopMicrophone")] <br>
|
HRESULT StopMicrophone();<br>
|
[helpstring("method StartAudioReceive")] <br>
|
HRESULT StartAudioReceive();<br>
|
[helpstring("method StopAudioReceive")] <br>
|
HRESULT StopAudioReceive();<br>
|
[helpstring("method StopDtmfTone")] <br>
|
HRESULT StopDtmfTone();<br>
|
[helpstring("method SetAudioCodecRX")] <br>
|
HRESULT SetAudioCodecRX([in] long CompressionType, [in] long
|
MillisecPacketSize, [in] long EchoCancellationValue, [in] long G723BitRate);<br>
|
[helpstring("method SetAudioCodecTX")] <br>
|
HRESULT SetAudioCodecTX([in] long CompressionType, [in] long
|
MillisecPacketSize, [in] long PrecedenceValue, [in] long SilenceSuppression,
|
[in] unsigned short MaxFramesPerPacket, [in] long G723BitRate);<br>
|
[helpstring("method SetAudioDestination")] <br>
|
HRESULT SetAudioDestination([in] BSTR strHostName, [in] long nUDPortNumber);<br>
|
[helpstring("method SetAudioReceivePort")] <br>
|
HRESULT SetAudioReceivePort([in] long nUDPPortNumber);<br>
|
[helpstring("method StartDtmfTone")] <br>
|
HRESULT StartDtmfTone([in] long cToneAsChar, [in] long OnTime, [in] long OffTime);<br>
|
[helpstring("method StartPlayingFileTX")] <br>
|
HRESULT StartPlayingFileTX([in] BSTR Filename, [in] unsigned long Mode, [in,
|
out] long * Cookie);<br>
|
[helpstring("method StartPlayingFileRX")] <br>
|
HRESULT StartPlayingFileRX([in] BSTR Filename, [in] unsigned long Mode, [in]
|
unsigned long waveoutDeviceID, [in, out] long * Cookie);<br>
|
[helpstring("method StopPlayingFileTX")] <br>
|
HRESULT StopPlayingFileTX([in] unsigned long Cookie);<br>
|
[helpstring("method StopPlayingFileRX")] <br>
|
HRESULT StopPlayingFileRX([in] unsigned long Cookie);<br>
|
[helpstring("method StartTX")] <br>
|
HRESULT StartTX([in] unsigned long waveinDeviceID);<br>
|
[helpstring("method StopTX")] <br>
|
HRESULT StopTX();<br>
|
[helpstring("method StartRX")] <br>
|
HRESULT StartRX([in] unsigned long waveoutDeviceID);<br>
|
[helpstring("method StopRX")] <br>
|
HRESULT StopRX();<br>
|
[helpstring("method SetSpeakerVolume")] <br>
|
HRESULT SetSpeakerVolume([in] unsigned long deviceID, [in] unsigned long
|
volume);<br>
|
[helpstring("method SetMicrophoneVolume")] <br>
|
HRESULT SetMicrophoneVolume([in] unsigned long deviceID, [in] unsigned long
|
volume);<br>
|
[helpstring("method SetFilePlayVolume")] <br>
|
HRESULT SetFilePlayVolume([in] unsigned long cookie, [in] unsigned long
|
volume);<br>
|
[helpstring("method NetworkMonitor")] <br>
|
HRESULT NetworkMonitor([in] unsigned long Enable, [in] unsigned long
|
DurationMillisec);<br>
|
};<br>
|
<br>
|
<br>
|
[<br>
|
uuid(94221C4F-00F1-11D4-9D59-0060B0FC246C),<br>
|
helpstring("_ICCNMediaTermEvents Interface")<br>
|
]<br>
|
interface _ICCNMediaTermEvents : IUnknown<br>
|
{<br>
|
[helpstring("method EndOfFileEventRX")] <br>
|
HRESULT EndOfFileEventRX([in] long Cookie);<br>
|
[helpstring("method EndOfFileEventTX")] <br>
|
HRESULT EndOfFileEventTX([in] long Cookie);<br>
|
[helpstring("method NetworkMonitorEventRX")] <br>
|
HRESULT NetworkMonitorEventRX([in] double RXMean, [in] double RXVariance);<br>
|
[helpstring("method NetworkMonitorEventTX")] <br>
|
HRESULT NetworkMonitorEventTX([in] double TXMean, [in] double TXVariance);<br>
|
};<br>
|
<br>
|
<br>
|
[<br>
|
uuid(94221C40-00F1-11D4-9D59-0060B0FC246C),<br>
|
version(1.0),<br>
|
helpstring("CCNSMT 1.0 Type Library")<br>
|
]<br>
|
library CCNSMTLib<br>
|
{<br>
|
importlib("stdole32.tlb");<br>
|
importlib("stdole2.tlb");<br>
|
<br>
|
[<br>
|
uuid(94221C4E-00F1-11D4-9D59-0060B0FC246C),<br>
|
helpstring("CCNMediaTerm Class")<br>
|
]<br>
|
coclass CCNMediaTerm<br>
|
{<br>
|
[default] interface ICCNMediaTerm;<br>
|
[default, source] interface _ICCNMediaTermEvents;<br>
|
};<br>
|
};</p>
|
|
<h3><span class=MsoHyperlink> <o:p></o:p></span></h3>
|
|
<h4>Type Library</h4>
|
|
<p class=MsoNormal>[</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>uuid(94221C40-00F1-11D4-9D59-0060B0FC246C),</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>version(1.0),</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>helpstring("CCNSMT
|
1.0 Type Library")</p>
|
|
<p class=MsoNormal>]</p>
|
|
<p class=MsoNormal>library CCNSMTLib</p>
|
|
<p class=MsoNormal>{</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>importlib("stdole32.tlb");</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>importlib("stdole2.tlb");</p>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>[</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:2'> </span>uuid(94221C4E-00F1-11D4-9D59-0060B0FC246C),</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:2'> </span>helpstring("CCNMediaTerm
|
Class")</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>]</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>coclass
|
CCNMediaTerm</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>{</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:2'> </span>[default]
|
interface ICCNMediaTerm;</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:2'> </span>[default,
|
source] interface _ICCNMediaTermEvents;</p>
|
|
<p class=MsoNormal><span style='mso-tab-count:1'> </span>};</p>
|
|
<p class=MsoNormal>};</p>
|
|
<h4>Sample C++ Code</h4>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<p style='margin-right:.5in;margin-left:.5in'><span style='font-family:Garamond'>#import
|
"../CCNMediaTerm/CCNSMT/CCNSMT.tlb" no_namespace, raw_interfaces_only<br>
|
<br>
|
int main()<br>
|
{<br>
|
HRESULT hr;<br>
|
<br>
|
// Initialize COM<br>
|
hr = CoInitialize(NULL);<br>
|
<br>
|
// Get Interface ICCNMediaTerm from the WinRTP COM Object using smart pointer
|
defined by the #import command above. <br>
|
// Automatically calls IUnknown::AddRef();<br>
|
ICCNMediaTermPtr pICCNMediaTerm(__uuidof(CCNMediaTerm));<br>
|
<br>
|
// Initialize WinRTP. Must be the first call<br>
|
pICCNMediaTerm->Initialize();<br>
|
<br>
|
// Set parameters for receive side<br>
|
pICCNMediaTerm->SetAudioCodecRX(4, 20, 0, 0);<br>
|
pICCNMediaTerm->SetAudioReceivePort(8500);<br>
|
<br>
|
// Set parameters for transmit side<br>
|
pICCNMediaTerm->SetAudioCodecTX(4, 20, 0, 0, 0, 0);<br>
|
pICCNMediaTerm->SetAudioDestination(L"127.0.0.1", 8500);<br>
|
<br>
|
// Start reception side. we will use the default (-1) playback device<br>
|
pICCNMediaTerm->StartRX(-1);<br>
|
<br>
|
// Start transmit side. we will use the default (-1) recording device<br>
|
pICCNMediaTerm->StartTX(-1);<br>
|
<br>
|
// Set the speaker volume to 50%<br>
|
pICCNMediaTerm->SetSpeakerVolume(-1, 50);<br>
|
<br>
|
// Set the microphone volume to 50%<br>
|
pICCNMediaTerm->SetMicrophoneVolume(-1, 50);<br>
|
<br>
|
// Hear yourself for 5 seconds<br>
|
Sleep(5000);<br>
|
<br>
|
// Stop reception & transmission<br>
|
pICCNMediaTerm->StopRX();<br>
|
pICCNMediaTerm->StopTX();<br>
|
<br>
|
// Unitialize WinRTP. Must be the last call<br>
|
pICCNMediaTerm->UnInitialize();<br>
|
// Let go of the reference to the ICCNMediaTerm interface. Automatically calls
|
IUnknown::Release()<br>
|
pICCNMediaTerm = 0;<br>
|
<br>
|
// Uninitialize COM<br>
|
CoUninitialize();<br>
|
<br>
|
return 0;<br>
|
}</span></p>
|
|
<h2><a name="_Toc515040025"></a><a name="_Toc515040079"></a><a
|
name="_Toc32998481"><span style='mso-bookmark:_Toc515040079'><span
|
style='mso-bookmark:_Toc515040025'>Configurable Parameters</span></span></a></h2>
|
|
<p class=MsoNormal>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.</p>
|
|
<h3><a name="_Toc515040027"></a><a name="_Toc515040081"></a><a
|
name="_Toc32998482"><span style='mso-bookmark:_Toc515040081'><span
|
style='mso-bookmark:_Toc515040027'>Static/Dynamic Jitter Buffer</span></span></a><span
|
style='mso-bookmark:_Toc515040081'><span style='mso-bookmark:_Toc515040027'></span></span></h3>
|
|
<p class=MsoNormal><span style='mso-bookmark:_Toc515040081'><span
|
style='mso-bookmark:_Toc515040027'>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)</span></span></p>
|
|
<h3><span style='mso-bookmark:_Toc515040081'><span style='mso-bookmark:_Toc515040027'><a
|
name="_Toc32998483">Jitter Buffer Length</a></span></span></h3>
|
|
<p class=MsoNormal>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).</p>
|
|
<p class=MsoNormal>Try the following (Windows 2000/XP : 60ms, WinNT 4.0 :
|
120ms, Win 95/98/ME : 180ms</p>
|
|
<h3><a name="_Toc32998484">Level of Auto-Amplification of incoming RTP audio
|
streams</a></h3>
|
|
<p class=MsoNormal>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</p>
|
|
<p class=MsoNormal><br>
|
VolumeMaximizeMaxGain (floating point number >= 1.0 e.g. 8.0 )</p>
|
|
<p class=MsoNormal>VolumeMaximizePercentile (floating point number between 0.0
|
and 100.0 )</p>
|
|
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
|
|
<h3><a name="_Toc515040028"></a><a name="_Toc515040082"></a><a
|
name="_Toc32998485"><span style='mso-bookmark:_Toc515040082'><span
|
style='mso-bookmark:_Toc515040028'>Type of Service Value (DiffServ Byte) of
|
Outgoing RTP Packets</span></span></a></h3>
|
|
<p class=MsoNormal>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)</p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998486">Fixed Transmit Port for UDP Packets</a></h3>
|
|
<p class=MsoNormal>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)</p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998487">Pre-emphasis of transmitted audio</a></h3>
|
|
<p class=MsoNormal>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</p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998488">Post-emphasis of received audio</a></h3>
|
|
<p class=MsoNormal>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</p>
|
|
<p class=MsoNormal> </p>
|
|
<h3><a name="_Toc32998489">Volume Limiting</a></h3>
|
|
<p class=MsoNormal>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.</p>
|
|
<p class=MsoNormal> </p>
|
|
<h2><a name="_Toc32998490">Sample Code</a></h2>
|
|
<p class=MsoNormal>The following sections describes through an example how to
|
use the Media Term component. Here are the basic steps</p>
|
|
<ol style='margin-top:0in' start=1 type=1>
|
<li class=MsoNormal style='mso-list:l11 level1 lfo9;tab-stops:list .5in'>Initialize
|
COM (CoInitializeEx) </li>
|
<li class=MsoNormal style='mso-list:l11 level1 lfo9;tab-stops:list .5in'>Instantiate
|
the Media Term Component and get the ICCNMediaTerm COM interface (Say the
|
variable is CCNMediaTerm) using CoCreateInstance </li>
|
<li class=MsoNormal style='mso-list:l11 level1 lfo9;tab-stops:list .5in'>Initialize
|
the WINRTP </li>
|
</ol>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol;mso-bidi-font-weight:bold'>·</span><span
|
style='font-size:7.0pt;mso-bidi-font-weight:bold'>
|
</span>Initialize();<b><o:p></o:p></b></p>
|
|
<ol style='margin-top:0in' start=4 type=1>
|
<li class=MsoNormal style='mso-list:l4 level1 lfo10;tab-stops:list .5in'>Transmit
|
Side </li>
|
</ol>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>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</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioCodecTX(4,
|
30, 0, 0, 1, 0);</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioDestination(127.0.0.1,
|
21243);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Start transmission using the default audio capture device</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StartTX(-1);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Mix the file foo.wav along with the transmitted stream. Play the file
|
once.</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StartPlayingFileTX(foo.wav,
|
1, 0, 0, &sendFileCookie)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Set the volume of the foo.wav file to 50%</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetFilePlayVolume(sendFileCookie,
|
50)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Change the codec from G.711 Ulaw to G.723 at 5.3kbps and turn on silence
|
suppression</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioCodecTX(9,
|
30, 0, 1, 1, 0)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Stop Transmitting (everything, including voice and files)</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StopTX()</p>
|
|
<ol style='margin-top:0in' start=5 type=1>
|
<li class=MsoNormal style='mso-list:l3 level1 lfo11;tab-stops:list .5in'>Receive
|
Side </li>
|
</ol>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Set the startup parameters for receive: Use G.711 Ulaw Codec, 30ms
|
packet size. Receiving from local port 8000</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioCodecRX(4,
|
30, 0, 0);</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioReceivePort(8000);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Start receive side using the default audio playback device</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StartRX(-1);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>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</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StartPlayingFileRX(foo.wav,
|
0, 0, 0, -1, &receiveFileCookie1);</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StartPlayingFileRX(foobar.wav,
|
1, 0, 0. 1, &receiveFileCookie2);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Set the volume of the foobar.wav file to 25%</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetFilePlayVolume(receiveFileCookie2,
|
25)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Stop playing the foo.wav file that was playing in a loop</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StopPlayingFileRX(receiveFileCookie1);</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>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</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioCodecRX(11,
|
30, 0, 0)</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>SetAudioReceivePort(9999)</p>
|
|
<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;tab-stops:list .75in'><span
|
style='font-family:Symbol'>·</span><span style='font-size:7.0pt'>
|
</span>Stop receiving (everything, including voice and files). This method
|
releases the speaker</p>
|
|
<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;tab-stops:list 1.25in'><span
|
style='font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>o</span><span
|
style='font-size:7.0pt'> </span>StopRX()</p>
|
|
<ol style='margin-top:0in' start=6 type=1>
|
<li class=MsoNormal style='mso-list:l1 level1 lfo12;tab-stops:list .5in'>Uninitialize
|
the WINRTP and release all resources </li>
|
<ul style='margin-top:0in' type=circle>
|
<li class=MsoNormal style='mso-list:l1 level2 lfo12;tab-stops:list 1.0in'>Uninitialize()
|
</li>
|
</ul>
|
<li class=MsoNormal style='mso-list:l1 level1 lfo12;tab-stops:list .5in'>Uninitialize
|
COM if needed using CoUninitialize </li>
|
</ol>
|
|
<p class=MsoNormal> </p>
|
|
<p class=MsoNormal>I plan to release some sample C++ code to show how to use
|
this component soon</p>
|
|
<h2><a name="_Toc515040030"></a><a name="_Toc515040084"></a><a
|
name="_Toc32998491"><span style='mso-bookmark:_Toc515040084'><span
|
style='mso-bookmark:_Toc515040030'>Future Improvements</span></span></a></h2>
|
|
<p class=MsoNormal>Some of the future improvements that are being considered
|
are</p>
|
|
<ul style='margin-top:0in' type=disc>
|
<li class=MsoNormal style='mso-list:l0 level1 lfo13;tab-stops:list .5in'>Using
|
the same local UDP port to do transmit and receive</li>
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|