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

📄 rtppresenting.html

📁 奉献给多媒体java编程者们。JMF2.1.1最新版本的用户指南。JMF是java用于基于实时多媒体的开发工具
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="113167"> </a>    
<a name="113168"> </a>    // method used by inner class UDPHandler to open a datagram or
<a name="113169"> </a>    // multicast socket as the case maybe
<a name="113170"> </a>    
<a name="113171"> </a>    private DatagramSocket InitSocket(String sockaddress, 
<a name="113172"> </a>                                     int     sockport) 
<a name="113173"> </a>    {
<a name="113174"> </a>        InetAddress addr = null;
<a name="113175"> </a>        DatagramSocket sock = null;
<a name="113176"> </a>
<a name="113177"> </a>        try {
<a name="113178"> </a>            addr = InetAddress.getByName(sockaddress);
<a name="113179"> </a>            
<a name="113180"> </a>            if (addr.isMulticastAddress()) {
<a name="113181"> </a>                MulticastSocket msock;
<a name="113182"> </a>                
<a name="113183"> </a>                msock = new MulticastSocket(sockport);
<a name="113184"> </a>
<a name="113185"> </a>                msock.joinGroup(addr);
<a name="113186"> </a>
<a name="113187"> </a>                sock = (DatagramSocket)msock;           
<a name="113188"> </a>            } 
<a name="113189"> </a>            else {              
<a name="113190"> </a>                sock = new DatagramSocket(sockport,addr);
<a name="113191"> </a>            }
<a name="113192"> </a>            
<a name="113193"> </a>            return sock;
<a name="113194"> </a>        }
<a name="113195"> </a>        catch (SocketException e) {
<a name="113196"> </a>            e.printStackTrace();
<a name="113197"> </a>            return null;
<a name="113198"> </a>        }
<a name="113199"> </a>        catch (UnknownHostException e) {
<a name="113200"> </a>            e.printStackTrace();
<a name="113201"> </a>            return null;
<a name="113202"> </a>        }
<a name="113203"> </a>        catch (IOException e) {
<a name="113204"> </a>            e.printStackTrace();
<a name="113205"> </a>            return null;
<a name="113206"> </a>        }
<a name="113207"> </a>    }
<a name="111302"> </a>
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="113214"> </a>    // INNER CLASS UDP Handler which will receive UDP RTP Packets and
<a name="113215"> </a>    // stream them to the handler of the sources stream. IN case of
<a name="113216"> </a>    // RTCP, it will also accept RTCP packets and send them on the
<a name="113217"> </a>    // underlying network.
<a name="113218"> </a>
<a name="113219"> </a>    public class UDPHandler extends Thread implements PushSourceStream, 
<a name="113220"> </a>                                                      OutputDataStream
<a name="113221"> </a>    {
<a name="113222"> </a>        DatagramSocket        mysock;
<a name="113223"> </a>        DatagramPacket        dp;
<a name="113224"> </a>        SourceTransferHandler outputHandler;
<a name="113225"> </a>        String                myAddress;
<a name="113226"> </a>        int                   myport;
<a name="113227"> </a>        boolean               closed = false;
<a name="113228"> </a>
<a name="113229"> </a>
<a name="113230"> </a>        // in the constructor we open the socket and create the main
<a name="113231"> </a>        // UDPHandler thread.
<a name="113232"> </a>        
<a name="113233"> </a>        public UDPHandler(String haddress, int hport) {
<a name="113234"> </a>            myAddress = haddress;
<a name="113235"> </a>            myport = hport;
<a name="113236"> </a>            mysock = InitSocket(myAddress,myport);                  
<a name="113237"> </a>            setDaemon(true);
<a name="113238"> </a>            start();
<a name="113239"> </a>        }
<a name="113240"> </a>
<a name="113241"> </a>        // the main thread receives RTP data packets from the
<a name="113242"> </a>        // network and transfer's this data to the output handler of
<a name="113243"> </a>        // this stream.
<a name="113244"> </a>        
<a name="113245"> </a>        public void run() {
<a name="113246"> </a>            int len;
<a name="113247"> </a>
<a name="113248"> </a>            while(true) {
<a name="113249"> </a>                if (closed) {
<a name="113250"> </a>                    cleanup();
<a name="113251"> </a>                    return;
<a name="113252"> </a>                }
<a name="113253"> </a>                try {
<a name="113254"> </a>                    do {
<a name="113255"> </a>                        dp = new DatagramPacket( new byte[maxsize],
<a name="113256"> </a>                                                 maxsize);
<a name="113257"> </a>                        
<a name="113258"> </a>                        mysock.receive(dp);
<a name="113259"> </a>
<a name="113260"> </a>                        if (closed){
<a name="113261"> </a>                            cleanup();
<a name="113262"> </a>                            return;
<a name="113263"> </a>                        }
<a name="113264"> </a>                        
<a name="113265"> </a>                        len = dp.getLength();
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="113274"> </a>                        if (len &gt; (maxsize &gt;&gt; 1)) maxsize = len &lt;&lt; 1;
<a name="113275"> </a>                    }
<a name="113276"> </a>                    while (len &gt;= dp.getData().length);
<a name="113277"> </a>                }catch (Exception e){
<a name="113278"> </a>                    cleanup();
<a name="113279"> </a>                    return;
<a name="113280"> </a>                }
<a name="113281"> </a>                
<a name="113282"> </a>                if (outputHandler != null) {
<a name="113283"> </a>                    outputHandler.transferData(this);
<a name="113284"> </a>                }
<a name="113285"> </a>            }
<a name="113286"> </a>        }
<a name="113287"> </a>
<a name="113288"> </a>        public void close() {
<a name="113289"> </a>            closed = true;
<a name="113290"> </a>        }
<a name="113291"> </a>
<a name="113292"> </a>        private void cleanup() {
<a name="113293"> </a>            mysock.close();
<a name="113294"> </a>            stop();
<a name="113295"> </a>        }
<a name="113296"> </a>        
<a name="113297"> </a>        // methods of PushSourceStream
<a name="113298"> </a>        public Object[] getControls() {
<a name="113299"> </a>            return new Object[0];
<a name="113300"> </a>        }
<a name="113301"> </a>        
<a name="113302"> </a>        public Object getControl(String controlName) {
<a name="113303"> </a>            return null;
<a name="113304"> </a>        }
<a name="113305"> </a>
<a name="113306"> </a>        public ContentDescriptor getContentDescriptor() {
<a name="113307"> </a>            return null;
<a name="113308"> </a>        }
<a name="113309"> </a>
<a name="113310"> </a>        public long getContentLength() {
<a name="113311"> </a>            return SourceStream.LENGTH_UNKNOWN;
<a name="113312"> </a>        }
<a name="113313"> </a>
<a name="113314"> </a>        public boolean endOfStream() {
<a name="113315"> </a>            return false;
<a name="113316"> </a>        }
<a name="113317"> </a>
<a name="113318"> </a>        // method by which data is transferred from the underlying
<a name="113319"> </a>        // network to the session manager.
<a name="113320"> </a>        
<a name="113321"> </a>        public int read(byte buffer[],
<a name="113322"> </a>                        int offset,
<a name="113323"> </a>                        int length) 
<a name="113324"> </a>        {
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="113333"> </a>            System.arraycopy(dp.getData(),
<a name="113334"> </a>                             0,
<a name="113335"> </a>                             buffer,
<a name="113336"> </a>                             offset,
<a name="113337"> </a>                             dp.getLength());
<a name="113338"> </a>            
<a name="113339"> </a>            return dp.getData().length;
<a name="113340"> </a>        }                
<a name="113341"> </a>        
<a name="113342"> </a>        public int getMinimumTransferSize(){
<a name="113343"> </a>            return dp.getLength();
<a name="113344"> </a>        }
<a name="113345"> </a>        
<a name="113346"> </a>        public void setTransferHandler(SourceTransferHandler
<a name="113347"> </a>                                       transferHandler)
<a name="113348"> </a>        {
<a name="113349"> </a>            this.outputHandler = transferHandler;
<a name="113350"> </a>        }
<a name="113351"> </a>        
<a name="113352"> </a>        // methods of OutputDataStream used by the session manager to 
<a name="113353"> </a>        // transfer data to the underlying network.
<a name="113354"> </a>        
<a name="113355"> </a>        public int write(byte[] buffer,
<a name="113356"> </a>                         int offset,
<a name="113357"> </a>                         int length)
<a name="113358"> </a>        {
<a name="113359"> </a>            InetAddress addr = null;
<a name="113360"> </a>        
<a name="113361"> </a>            try {
<a name="113362"> </a>                addr = InetAddress.getByName(myAddress);
<a name="113363"> </a>            } catch (UnknownHostException e) {
<a name="113364"> </a>                e.printStackTrace();
<a name="113365"> </a>            }
<a name="113366"> </a>
<a name="113367"> </a>            DatagramPacket dp = new DatagramPacket( buffer, 
<a name="113368"> </a>                                                    length,
<a name="113369"> </a>                                                    addr,
<a name="113370"> </a>                                                    myport);
<a name="113371"> </a>            try {
<a name="113372"> </a>                mysock.send(dp);
<a name="113373"> </a>            } catch (IOException e){
<a name="113374"> </a>                e.printStackTrace();
<a name="113375"> </a>            }
<a name="113376"> </a>            
<a name="113377"> </a>            return dp.getLength();
<a name="113378"> </a>        }
<a name="113379"> </a>    }
<a name="113380"> </a>
<a name="113381"> </a>    public static void main(String[] args) {
<a name="113382"> </a>        new RTPSocketPlayer();
<a name="113383"> </a>    }
<a name="111614"> </a>}
</pre>
</font></td>
  </tr>
</table>



<br></font>
</blockquote>
<br clear="all">
<hr>
<a href="JMFTOC.html">CONTENTS</a> | 
<a href="RTPArchitecture.html">PREV </a> |
<a href="RTPSending.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 + -