⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtpsending.html

📁 jmf指导文件参考资料
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="109722"> </a>            try {
<a name="109723"> </a>                rtpsm1.createSendStream(ds, // first datasource 
<a name="109724"> </a>                                        0); // first sourcestream of 
<a name="109725"> </a>                                            // first datasource 
<a name="109726"> </a>            } catch (IOException e) {
<a name="109727"> </a>                e.printStackTrace();
<a name="109728"> </a>            } catch( UnsupportedFormatException e) {
<a name="109729"> </a>                e.printStackTrace();
<a name="109730"> </a>            }
<a name="109731"> </a>        }
<a name="109732"> </a>       
<a name="109733"> </a>        // Now repeat the above with the cloned data source and 
<a name="109734"> </a>        // set the encoding to dvi. i.e create a processor with 
<a name="109735"> </a>        // inputdatasource clonedDataSource
<a name="109736"> </a>        // and set encoding of one of its tracks to dvi. 
<a name="109737"> </a>        // create SessionManager giving it the output datasource of 
<a name="108691"> </a>        // this processor.  
</pre>
</font></td>
  </tr>
</table>



<br></font>


<h3>
  <a name="108673"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">Transmitting RTP Streams with RTPSocket</font>
</h3>


<p>
  <a name="106221"> </a><font face="Palatino, Times New Roman, Times, serif">You can also use <code>RTPSocket</code> to transmit RTP media streams. To use <code>RTPSocket</code> for transmission, you create an RTP <code>DataSink</code> with <code>createDataSink</code> by passing in a a <code>MediaLocator</code> with a new protocol that is a variant of RTP,  <code>"Ratibor"</code>. Manager attempts to construct a <code>DataSink</code> from: </font>
</p>

<pre>
<a name="106234"> </a>&lt;protocol package-prefix&gt;.media.datasink.rtpraw.Handler
</pre>

<p>
  <a name="106225"> </a><font face="Palatino, Times New Roman, Times, serif">The session manager prepares individual RTP packets that are ready to be transmitted across the network and sends them to the <code>RTPSocket</code> created from:</font>
</p>

<pre>
<a name="106235"> </a>&lt;protocol package-prefix&gt;.media.protocol.rtpraw.DataSource
</pre>

<p>
  <a name="106236"> </a><font face="Palatino, Times New Roman, Times, serif">The <code>RTPSocket</code> created at <code>&lt;protocol-prefix&gt;.media.protocol.rtpraw.DataSource </code>is your own implementation of <code>RTPSocket</code>. The JMF API does not define a default implementation of <code>RTPSocket</code>. The implementation of <code>RTPSocket</code> is dependent on the underlying transport protocol that you are using. Your <code>RTPSocket</code> class must be located at <code>&lt;protocol-prefix&gt;.media.protocol.rtpraw.DataSource.</code></font>
</p>


<p>
  <a name="107211"> </a><font face="Palatino, Times New Roman, Times, serif">You're responsible for transmitting the RTP packets out on the underlying network</font>
</p>


<p>
  <a name="106241"> </a><font face="Palatino, Times New Roman, Times, serif">In the following example, an <code>RTPSocket</code> is used to transmitting captured audio:</font>
</p>


<a name="106620"> </a><font  size="1" face="Palatino, Times New Roman, Times, serif">

<table border="1" bordercolorlight="#FFFFFF" bordercolordark="#000000"
       cellpadding="5" cellspacing="0">
  <caption><b><i><font face="Palatino, Times New Roman, Times, serif"><a name="108723"> </a>Example 10-5:   Transmitting RTP data with RTPSocket  (1 of 3)</font></i></b></caption>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="110163"> </a><code>        // Find a capture device that will capture linear audio 
</code><a name="110164"> </a><code>        // data at 8bit 8Khz 
</code><a name="110165"> </a><code>        
</code><a name="110166"> </a><code>        AudioFormat format = new AudioFormat(AudioFormat.LINEAR, 
</code><a name="110167"> </a><code>                                             8000, 
</code><a name="110168"> </a><code>                                             8, 
</code><a name="110169"> </a><code>                                             1); 
</code><a name="110170"> </a><code> 
</code><a name="110171"> </a><code>        Vector devices= CaptureDeviceManager.getDeviceList( format);
</code><a name="110172"> </a>
<a name="110173"> </a><code>        CaptureDeviceInfo di= null;
</code><a name="110174"> </a><code>        if (devices.size() &gt; 0) {
</code><a name="110175"> </a><code>             di = (CaptureDeviceInfo) devices.elementAt( 0);
</code><a name="110176"> </a><code>        }
</code><a name="110177"> </a><code>        else {
</code><a name="110178"> </a><code>            // exit if we could not find the relevant capture device.
</code><a name="110179"> </a><code>            System.exit(-1); 
</code><a name="110180"> </a><code>        }
</code><a name="110181"> </a>
<a name="110182"> </a><code>        // Create a processor for this capturedevice &amp; exit if we 
</code><a name="110183"> </a><code>        // cannot create it 
</code><a name="110184"> </a><code>        
</code><a name="110185"> </a><code>        try { 
</code><a name="110186"> </a><code>            processor = Manager.createProcessor(di.getLocator()); 
</code><a name="110187"> </a><code>        } catch (IOException e) { 
</code><a name="110188"> </a><code>            System.exit(-1); 
</code><a name="110189"> </a><code>        } catch (NoProcessorException e) { 
</code><a name="110190"> </a><code>            System.exit(-1); 
</code><a name="108764"> </a><code>        }  
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="110201"> </a><code>        // configure the processor  
</code><a name="110202"> </a><code>        processor.configure(); 
</code><a name="110203"> </a><code>       
</code><a name="110204"> </a><code>        // block until it has been configured 
</code><a name="110205"> </a><code>       
</code><a name="110206"> </a><code>        processor.setContentDescriptor( 
</code><a name="110207"> </a><code>            new ContentDescriptor( ContentDescriptor.RAW));
</code><a name="110208"> </a><code>       
</code><a name="110209"> </a><code>        TrackControl track[] = processor.getTrackControls(); 
</code><a name="110210"> </a><code>        boolean encodingOk = false;
</code><a name="110211"> </a><code>       
</code><a name="110212"> </a><code>        // Go through the tracks and try to program one of them to
</code><a name="110213"> </a><code>        // output gsm data. 
</code><a name="110214"> </a><code>        for (int i = 0; i &lt; track.length; i++) { 
</code><a name="110215"> </a><code>            if (!encodingOk &amp;&amp; track[i] instanceof FormatControl) { 
</code><a name="110216"> </a>
<a name="110217"> </a><code>                if (((FormatControl)track[i]).
</code><a name="110335"> </a><code>                    setFormat( new AudioFormat(AudioFormat.GSM_RTP, 
</code><a name="110336"> </a><code>                                               8000, 
</code><a name="110337"> </a><code>                                               8, 
</code><a name="110338"> </a><code>                                               1)) == null) {
</code><a name="110222"> </a>
<a name="110223"> </a><code>                    track[i].setEnabled(false); 
</code><a name="110224"> </a><code>                }
</code><a name="110225"> </a><code>                else {
</code><a name="110226"> </a><code>                    encodingOk = true; 
</code><a name="110227"> </a><code>                }
</code><a name="110228"> </a><code>            } 
</code><a name="110229"> </a><code>            else { 
</code><a name="110230"> </a><code>                // we could not set this track to gsm, so disable it 
</code><a name="110231"> </a><code>                track[i].setEnabled(false); 
</code><a name="110232"> </a><code>            } 
</code><a name="110233"> </a><code>        } 
</code><a name="110234"> </a><code>        
</code><a name="110235"> </a><code>        // At this point, we have determined where we can send out 
</code><a name="110236"> </a><code>        // gsm data or not. 
</code><a name="110237"> </a><code>        // realize the processor 
</code><a name="110238"> </a><code>        if (encodingOk) { 
</code><a name="110239"> </a><code>            processor.realize(); 
</code><a name="110240"> </a><code>            // block until realized. 
</code><a name="110241"> </a><code>            // get the output datasource of the processor and exit 
</code><a name="110242"> </a><code>            // if we fail 
</code><a name="110243"> </a><code>            DataSource ds = null;
</code><a name="110244"> </a><code>            try { 
</code><a name="110245"> </a><code>                ds = processor.getDataOutput(); 
</code><a name="110246"> </a><code>            } catch (NotRealizedError e) { 
</code><a name="110247"> </a><code>                System.exit(-1);
</code><a name="110248"> </a><code>            } 
</code><a name="110249"> </a>
<a name="110250"> </a><code>            // hand this datasource to manager for creating an RTP 
</code><a name="110251"> </a><code>            // datasink
</code><a name="110252"> </a><code>            // our RTP datasimnk will multicast the audio 
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="110266"> </a><code>            try {
</code><a name="110267"> </a><code>                MediaLocator m = new MediaLocator("rtpraw://");
</code><a name="110268"> </a><code>                // here, manager will look for a datasink in 
</code><a name="110269"> </a><code>                // &lt;protocol.prefix&gt;.media.protocol.rtpraw.DataSink 
</code><a name="110270"> </a><code>                // the datasink will create an RTPSocket at
</code><a name="110271"> </a><code>                // &lt;protocol.prefix&gt;.media.protocol.rtpraw.DataSource 
</code><a name="110272"> </a><code>                // and sink all RTP data to this socket.
</code><a name="110273"> </a><code>               
</code><a name="110274"> </a><code>                DataSink d = Manager.createDataSink(ds, m);
</code><a name="110275"> </a><code>       
</code><a name="110276"> </a><code>                d.open();
</code><a name="110277"> </a><code>                d.start(); 
</code><a name="110278"> </a><code>            } catch (Exception e) {
</code><a name="110279"> </a><code>                System.exit(-1);
</code><a name="110280"> </a><code>            }   
</code><a name="108911"> </a><code>        }    
</code></pre>
</font></td>
  </tr>
</table>



<br></font>
</blockquote>
<br clear="all">
<hr>
<a href="JMFTOC.html">CONTENTS</a> | 
<a href="RTPPresenting.html">PREV </a> |
<a href="RTPExporting.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<br>
<hr>
<em>
<a href="copyright.html">Copyright</a> &copy;
1998-1999 Sun Microsystems, Inc. All Rights Reserved.
</em>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -