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

📄 rtpsending.html

📁 jmf指导文件参考资料
💻 HTML
📖 第 1 页 / 共 5 页
字号:
</code><a name="108188"> </a><code>       
</code><a name="108189"> </a><code>        // Go through the tracks and try to program one of them to
</code><a name="108190"> </a><code>        // output ULAW_RTP data.
</code><a name="108191"> </a><code>        for (int i = 0; i &lt; track.length; i++) { 
</code><a name="108192"> </a><code>            if (!encodingOk &amp;&amp; track[i] instanceof FormatControl) {
</code><a name="108193"> </a>
<a name="108194"> </a><code>                if (((FormatControl)track[i]).
</code><a name="108195"> </a><code>                    setFormat( new AudioFormat(AudioFormat.ULAW_RTP, 
</code><a name="108196"> </a><code>                                               8000, 
</code><a name="108197"> </a><code>                                               8, 
</code><a name="108198"> </a><code>                                               1)) == null) {
</code><a name="108199"> </a>
<a name="108200"> </a><code>                    track[i].setEnabled(false); 
</code><a name="108201"> </a><code>                }
</code><a name="108202"> </a><code>                else {
</code><a name="108203"> </a><code>                    encodingOk = true; 
</code><a name="108204"> </a><code>                }
</code><a name="108205"> </a><code>            } 
</code><a name="108206"> </a><code>            else {  
</code><a name="108207"> </a><code>                // we could not set this track to gsm, so disable it
</code><a name="108208"> </a><code>                track[i].setEnabled(false); 
</code><a name="108209"> </a><code>            } 
</code><a name="108210"> </a><code>        }
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="108990"> </a><code>        // Realize it and block until it is realized.
</code><a name="108991"> </a><code>        processor.realize();    
</code><a name="108992"> </a><code>       
</code><a name="108993"> </a><code>        // block until realized. 
</code><a name="108225"> </a><code>        // get the output datasource of the processor  and exit 
</code><a name="108226"> </a><code>        // if we fail 
</code><a name="108227"> </a><code>       
</code><a name="108228"> </a><code>        DataSource ds = null; 
</code><a name="108229"> </a><code>       
</code><a name="108230"> </a><code>        try { 
</code><a name="108231"> </a><code>            ds = processor.getDataOutput(); 
</code><a name="108232"> </a><code>        } catch (NotRealizedError e){ 
</code><a name="108233"> </a><code>            System.exit(-1); 
</code><a name="108234"> </a><code>        } 
</code><a name="108235"> </a><code>        
</code><a name="108236"> </a><code>        // Create a SessionManager and hand over the  
</code><a name="108237"> </a><code>        // datasource for SendStream creation. 
</code><a name="108238"> </a><code>       
</code><a name="108239"> </a><code>        SessionManager rtpsm = new com.sun.media.rtp.RTPSessionMgr(); 
</code><a name="108240"> </a><code>        
</code><a name="108241"> </a><code>        // The session manager then needs to be initialized and started:
</code><a name="108242"> </a><code>        // rtpsm.initSession(...); 
</code><a name="108243"> </a><code>        // rtpsm.startSession(...); 
</code><a name="108244"> </a>
<a name="108245"> </a><code>        try {
</code><a name="108246"> </a><code>            rtpsm.createSendStream(ds, 0);
</code><a name="108247"> </a><code>        } catch (IOException e)	 {
</code><a name="108248"> </a><code>            e.printStackTrace();
</code><a name="108249"> </a><code>        } catch( UnsupportedFormatException e) {
</code><a name="108250"> </a><code>            e.printStackTrace();
</code><a name="108251"> </a><code>        }
</code><a name="108117"> </a>
</pre>
</font></td>
  </tr>
</table>



<br></font>


<h4>
  <a name="104261"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">Sending Captured Audio Out in Multiple Sessions</font>
</h4>


<p>
  <a name="104262"> </a><font face="Palatino, Times New Roman, Times, serif"><a href="RTPSending.html#108263">Example 10-3</a> and <a href="RTPSending.html#108499">Example 10-4</a> both encode the captured audio and send it out in multiple RTP sessions. In <a href="RTPSending.html#108263">Example 10-3</a>, the data is encoded in gsm; in <a href="RTPSending.html#108499">Example 10-4</a>, the data is encoded in several different formats.</font>
</p>


<a name="104392"> </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="108263"> </a>Example 10-3:   Sending RTP data out in multiple sessions  (1 of 4)</font></i></b></caption>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="109006"> </a><code>        // First find a capture device that will capture linear audio
</code><a name="109007"> </a><code>        // data at 8bit 8Khz 
</code><a name="109008"> </a><code>       
</code><a name="109009"> </a><code>        AudioFormat format= new AudioFormat(AudioFormat.LINEAR, 
</code><a name="109010"> </a><code>                                            8000, 
</code><a name="109011"> </a><code>                                            8, 
</code><a name="109012"> </a><code>                                            1); 
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="109746"> </a><code>        Vector devices= CaptureDeviceManager.getDeviceList( format);
</code><a name="109747"> </a>
<a name="109748"> </a><code>        CaptureDeviceInfo di= null;
</code><a name="109749"> </a>
<a name="109750"> </a><code>        if (devices.size() &gt; 0) {
</code><a name="109751"> </a><code>             di = (CaptureDeviceInfo) devices.elementAt( 0);
</code><a name="109752"> </a><code>        }
</code><a name="109753"> </a><code>        else {
</code><a name="109754"> </a><code>            // exit if we could not find the relevant capturedevice. 
</code><a name="109755"> </a><code>            System.exit(-1); 
</code><a name="109756"> </a><code>        }
</code><a name="109757"> </a><code>        
</code><a name="109758"> </a><code>        // Now create a processor for this capturedevice &amp; exit if we 
</code><a name="109759"> </a><code>        // cannot create it 
</code><a name="109760"> </a><code>        try { 
</code><a name="109761"> </a><code>            Processor p = Manager.createProcessor(di.getLocator()); 
</code><a name="109762"> </a><code>        } catch (IOException e) { 
</code><a name="109763"> </a><code>            System.exit(-1); 
</code><a name="109764"> </a><code>        } catch (NoProcessorException e) { 
</code><a name="109765"> </a><code>            System.exit(-1); 
</code><a name="109766"> </a><code>        } 
</code><a name="109767"> </a><code>       
</code><a name="109768"> </a><code>        // configure the processor 
</code><a name="109769"> </a><code>        processor.configure(); 
</code><a name="109770"> </a><code>       
</code><a name="109771"> </a><code>        // block until it has been configured 
</code><a name="109772"> </a><code>       
</code><a name="109773"> </a><code>        processor.setContentDescriptor( 
</code><a name="109774"> </a><code>            new ContentDescriptor( ContentDescriptor.RAW));
</code><a name="109775"> </a><code>       
</code><a name="109776"> </a><code>        TrackControl track[] = processor.getTrackControls(); 
</code><a name="109777"> </a><code>       
</code><a name="109778"> </a><code>        boolean encodingOk = false; 
</code><a name="109779"> </a><code>       
</code><a name="109780"> </a><code>        // Go through the tracks and try to program one of them to 
</code><a name="109781"> </a><code>        // output gsm data. 
</code><a name="109782"> </a><code>       
</code><a name="109783"> </a><code>        for (int i = 0; i &lt; track.length; i++) { 
</code><a name="109784"> </a><code>            if (!encodingOk &amp;&amp; track[i] instanceof FormatControl) { 
</code><a name="110308"> </a>
<a name="110309"> </a><code>                if (((FormatControl)track[i]).
</code><a name="110319"> </a><code>                    setFormat( new AudioFormat(AudioFormat.GSM_RTP, 
</code><a name="110320"> </a><code>                                               8000, 
</code><a name="110321"> </a><code>                                               8, 
</code><a name="110322"> </a><code>                                               1)) == null) {
</code><a name="110314"> </a>
<a name="110315"> </a><code>                    track[i].setEnabled(false); 
</code><a name="109793"> </a><code>                }
</code><a name="109794"> </a><code>                else {
</code><a name="109795"> </a><code>                    encodingOk = true; 
</code><a name="109796"> </a><code>                }
</code><a name="109047"> </a><code>            }  
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="109807"> </a><code>            else { 
</code><a name="109808"> </a><code>                // we could not set this track to gsm, so disable it 
</code><a name="109809"> </a><code>                track[i].setEnabled(false); 
</code><a name="109810"> </a><code>            } 
</code><a name="109811"> </a><code>        }
</code><a name="109812"> </a><code>       
</code><a name="109813"> </a><code>        // At this point, we have determined where we can send out 
</code><a name="109814"> </a><code>        // gsm data or not. 
</code><a name="109815"> </a><code>        // realize the processor 
</code><a name="109816"> </a><code>       
</code><a name="109817"> </a><code>        if (encodingOk) { 
</code><a name="109818"> </a><code>            processor.realize(); 
</code><a name="109819"> </a><code>       
</code><a name="109820"> </a><code>            // block until realized. 
</code><a name="109821"> </a><code>       
</code><a name="109822"> </a><code>            // get the output datasource of the processor  and exit 
</code><a name="109823"> </a><code>            // if we fail 
</code><a name="109824"> </a><code>       
</code><a name="109825"> </a><code>            DataSource origDataSource = null; 
</code><a name="109826"> </a><code>       
</code><a name="109827"> </a><code>            try { 
</code><a name="109828"> </a><code>                origDataSource = processor.getDataOutput(); 
</code><a name="109829"> </a><code>            } catch (NotRealizedError e) { 
</code><a name="109830"> </a><code>                System.exit(-1); 
</code><a name="109831"> </a><code>            } 
</code><a name="109832"> </a><code>       
</code><a name="109833"> </a><code>            // We want to send the stream of this datasource over two 
</code><a name="109834"> </a><code>            // RTP sessions. 
</code><a name="109835"> </a><code>       
</code><a name="109836"> </a><code>            // So we need to clone the output datasource of the  
</code><a name="109837"> </a><code>            // processor and hand the clone over to the second 
</code><a name="109838"> </a><code>            // SessionManager 
</code><a name="109839"> </a><code>       
</code><a name="109840"> </a><code>            DataSource cloneableDataSource = null; 
</code><a name="109841"> </a><code>            DataSource clonedDataSource = null; 
</code><a name="109842"> </a><code>       
</code><a name="109843"> </a><code>            cloneableDataSource 
</code><a name="109844"> </a><code>              = Manager.createCloneableDataSource(origDataSource); 
</code><a name="109845"> </a>
<a name="109846"> </a><code>            clonedDataSource 
</code><a name="109847"> </a><code>              = ((SourceCloneable)cloneableDataSource).createClone(); 
</code><a name="109848"> </a><code>       
</code><a name="109849"> </a><code>            // Now create the first SessionManager and hand over the
</code><a name="109850"> </a><code>            // first datasource for SendStream creation. 
</code><a name="109851"> </a><code>       
</code><a name="109852"> </a><code>            SessionManager rtpsm1 

⌨️ 快捷键说明

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