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

📄 jmfapp-datasource.html

📁 jmf指导文件参考资料
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Quadralay WebWorks Publisher 5.0.2">
<meta name="TEMPLATEBASE" content="Portable HTML">
<meta name="LASTUPDATED" content="11/23/99 11:48:15">
<title>Sample Data Source Implementation  </title>
</head>

<body link="#3366CC" vlink="#9999CC" text="#000000" alink="#0000CC" bgcolor="#FFFFFF"
background="images/backgrnd.gif">


<table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">
  <tr>
    <td><a href="JMFTOC.html">CONTENTS</a> | 
    <a href="JMFApp-Demux.html">PREV </a> |
    <a href="JMFApp-Controller.html">NEXT</a> |
    <a href="JMFIX.html">INDEX</a></td>
    <td align="right"><em>JMF 2.0 API Guide</em>
  </tr>
</table>

<p><br clear="all">
</p>

<hr align="left">

<blockquote>
<div align="right">
<a name="46909"> </a><font  size="3" face="Palatino, Times New Roman, Times, serif">D <br></font>
</div>
<div align="right">
<h2>
  <a name="86181"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">Sample Data Source Implementation</font>
</h2>
</div>

<p>
  <a name="81450"> </a><font face="Palatino, Times New Roman, Times, serif">This sample demonstrates how to implement a new <code>DataSource</code> to support an additional protocol, the FTP protocol. There are two classes: </font>
</p>

<ul>
  <li><a name="82889"> </a><font face="Palatino, Times New Roman, Times, serif"><code>DataSource</code> extends <code>PullDataSource</code> and implements <code>intel.media.protocol.PullProtocolHandler.</code> </font>
  <li><a name="82890"> </a><font face="Palatino, Times New Roman, Times, serif"><code>FTPSourceStream</code> implements <code>PullSourceStream</code>.</font>
</ul>

<a name="86404"> </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="86410"> </a>Example D-1:  FTP Data Source.  (1 of 8)</font></i></b></caption>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86435"> </a><code>package COM.intel.media.protocol.ftp;
</code><a name="86436"> </a><code>
</code><a name="86437"> </a><code>import javax.media.protocol.PullDataSource;
</code><a name="86438"> </a><code>import javax.media.protocol.SourceStream;
</code><a name="86439"> </a><code>import javax.media.protocol.PullSourceStream;
</code><a name="86440"> </a><code>import javax.media.Time;
</code><a name="86441"> </a><code>import javax.media.Duration;
</code><a name="86442"> </a><code>import java.io.*;
</code><a name="86443"> </a><code>import java.net.*;
</code><a name="86444"> </a><code>import java.util.Vector;
</code><a name="86454"> </a><code>
</code><a name="86455"> </a><code>public class DataSource extends PullDataSource
</code><a name="86456"> </a><code>{
</code><a name="86457"> </a><code>   public static final int FTP_PORT = 21;
</code><a name="86458"> </a><code>   public static final int FTP_SUCCESS = 1;
</code><a name="86504"> </a><code>   public static final int FTP_TRY_AGAIN = 2;
</code><a name="86505"> </a><code>   public static final int FTP_ERROR = 3;
</code><a name="86506"> </a><code>
</code><a name="86507"> </a><code>   // used to send commands to server
</code><a name="86508"> </a><code>   protected Socket controlSocket;   
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86522"> </a><code>          
</code><a name="86523"> </a><code>   // used to receive file
</code><a name="86524"> </a><code>   protected Socket dataSocket;     
</code><a name="86530"> </a><code>   // wraps controlSocket's output stream
</code><a name="86531"> </a><code>   protected PrintStream controlOut;     
</code><a name="86532"> </a><code>       
</code><a name="86533"> </a><code>   // wraps controlSocket's input stream
</code><a name="86534"> </a><code>   protected InputStream controlIn;   
</code><a name="86535"> </a><code>       
</code><a name="86536"> </a><code>   // hold (possibly multi-line) server response
</code><a name="86537"> </a><code>   protected Vector response = new Vector(1);  
</code><a name="86538"> </a><code>    
</code><a name="86539"> </a><code>   // reply code from previous command
</code><a name="86540"> </a><code>   protected int previousReplyCode;       
</code><a name="86541"> </a><code>   
</code><a name="86542"> </a><code>   // are we waiting for command reply?
</code><a name="86543"> </a><code>   protected boolean replyPending;   
</code><a name="86544"> </a><code>           
</code><a name="86545"> </a><code>   // user login name
</code><a name="86546"> </a><code>    protected String user = "anonymous"; 
</code><a name="86547"> </a><code>        
</code><a name="86548"> </a><code>   // user login password
</code><a name="86549"> </a><code>   protected String password = "anonymous";  
</code><a name="86550"> </a><code>   
</code><a name="86551"> </a><code>   // FTP server name
</code><a name="86552"> </a><code>   protected String hostString;         
</code><a name="86553"> </a><code>     
</code><a name="86554"> </a><code>   // file to retrieve
</code><a name="86555"> </a><code>   protected String fileString;           
</code><a name="86556"> </a><code>
</code><a name="86557"> </a><code>   public void connect() throws IOException
</code><a name="86558"> </a><code>   {
</code><a name="86559"> </a><code>      initCheck();  // make sure the locator is set
</code><a name="86560"> </a><code>      if (controlSocket != null)
</code><a name="86561"> </a><code>      {
</code><a name="86562"> </a><code>         disconnect();
</code><a name="86563"> </a><code>      }
</code><a name="86564"> </a><code>      // extract FTP server name and target filename from locator
</code><a name="86565"> </a><code>      parseLocator();   
</code><a name="86566"> </a><code>      controlSocket = new Socket(hostString, FTP_PORT);
</code><a name="86567"> </a><code>      controlOut = new PrintStream(new BufferedOutputStream(
</code><a name="86568"> </a><code>         controlSocket.getOutputStream()), true);
</code><a name="86569"> </a><code>      controlIn = new
</code><a name="86570"> </a><code>         BufferedInputStream(controlSocket.getInputStream());
</code><a name="86571"> </a><code>    
</code><a name="86577"> </a><code>     if (readReply() == FTP_ERROR)
</code><a name="86578"> </a><code>      {
</code><a name="86579"> </a><code>          throw new IOException("connection failed");
</code><a name="86580"> </a><code>      }
</code><a name="86586"> </a><code>      
</code><a name="86587"> </a><code>      if (issueCommand("USER " + user) == FTP_ERROR)
</code><a name="86588"> </a><code>      {
</code><a name="86589"> </a><code>         controlSocket.close();</code>
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86597"> </a><code>         
</code><a name="86598"> </a><code>         throw new IOException("USER command failed");
</code><a name="86599"> </a><code>      }
</code><a name="86600"> </a><code>
</code><a name="86601"> </a><code>      if (issueCommand("PASS " + password) == FTP_ERROR)
</code><a name="86602"> </a><code>      {
</code><a name="86603"> </a><code>         controlSocket.close();
</code><a name="86604"> </a><code>         throw new IOException("PASS command failed");
</code><a name="86605"> </a><code>      }
</code><a name="86606"> </a><code>   }
</code><a name="86607"> </a><code>
</code><a name="86608"> </a><code>   public void disconnect()
</code><a name="86609"> </a><code>   {
</code><a name="86610"> </a><code>      if (controlSocket == null)
</code><a name="86611"> </a><code>      {
</code><a name="86612"> </a><code>         return;
</code><a name="86613"> </a><code>      }
</code><a name="86614"> </a><code>
</code><a name="86615"> </a><code>      try
</code><a name="86616"> </a><code>      {
</code><a name="86617"> </a><code>         issueCommand("QUIT");
</code><a name="86618"> </a><code>         controlSocket.close();
</code><a name="86619"> </a><code>      }
</code><a name="86620"> </a><code>
</code><a name="86621"> </a><code>      catch (IOException e) 
</code><a name="86622"> </a><code>      {
</code><a name="86623"> </a><code>         // do nothing, we just want to shutdown
</code><a name="86624"> </a><code>      }
</code><a name="86625"> </a><code>
</code><a name="86626"> </a><code>      controlSocket = null;
</code><a name="86627"> </a><code>      controlIn = null;
</code><a name="86628"> </a><code>      controlOut = null;
</code><a name="86629"> </a><code>   }
</code><a name="86630"> </a><code>
</code><a name="86631"> </a><code>    public void start() throws IOException
</code><a name="86632"> </a><code>    {
</code><a name="86633"> </a><code>         ServerSocket serverSocket;
</code><a name="86634"> </a><code>         InetAddress myAddress = InetAddress.getLocalHost();
</code><a name="86635"> </a><code>         byte[] address = myAddress.getAddress();
</code><a name="86636"> </a><code>
</code><a name="86637"> </a><code>         String portCommand = "PORT ";
</code><a name="86638"> </a><code>         serverSocket = new ServerSocket(0, 1);
</code><a name="86639"> </a><code>
</code><a name="86640"> </a><code>         // append each byte of our address (comma-separated)
</code><a name="86641"> </a><code>
</code><a name="86642"> </a><code>         for (int i = 0; i &lt; address.length; i++)
</code><a name="86643"> </a><code>         {
</code><a name="86644"> </a><code>            portCommand = portCommand + (address[i] &amp; 0xFF) + ",";
</code><a name="86645"> </a><code>         }
</code><a name="86661"> </a>
<a name="86652"> </a><code>      // append our server socket's port as two comma-separated
</code><a name="86653"> </a><code>      // hex bytes</code>
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86667"> </a><code>         portCommand = portCommand +
</code><a name="86668"> </a><code>            ((serverSocket.getLocalPort() &gt;&gt;&gt; 8) 
</code><a name="86669"> </a><code>            &amp; 0xFF) + "," + (serverSocket.getLocalPort() &amp; 0xFF);
</code><a name="86670"> </a><code>
</code><a name="86671"> </a><code>         // issue PORT command
</code><a name="86672"> </a><code>         if (issueCommand(portCommand) == FTP_ERROR)
</code><a name="86673"> </a><code>         {
</code><a name="86674"> </a><code>            serverSocket.close();
</code><a name="86675"> </a><code>            throw new IOException("PORT");
</code><a name="86676"> </a><code>         }
</code><a name="86677"> </a><code>
</code><a name="86678"> </a><code>         // issue RETRieve command
</code><a name="86679"> </a><code>         if (issueCommand("RETR " + fileString) == FTP_ERROR)
</code><a name="86680"> </a><code>         {
</code><a name="86681"> </a><code>            serverSocket.close();
</code><a name="86682"> </a><code>            throw new IOException("RETR");
</code><a name="86683"> </a><code>         }
</code><a name="86684"> </a><code>
</code><a name="86685"> </a><code>         dataSocket = serverSocket.accept();
</code><a name="86686"> </a><code>         serverSocket.close();
</code><a name="86687"> </a><code>   }
</code><a name="86688"> </a><code>   public void stop()
</code><a name="86689"> </a><code>   {
</code><a name="86690"> </a><code>      try
</code><a name="86691"> </a><code>      {
</code><a name="86692"> </a><code>      // issue ABORt command
</code><a name="86693"> </a><code>      issueCommand("ABOR");
</code><a name="86694"> </a><code>      dataSocket.close();
</code><a name="86695"> </a><code>      }
</code><a name="86696"> </a><code>      catch(IOException e) {}
</code><a name="86697"> </a><code>   }
</code><a name="86698"> </a><code>
</code><a name="86699"> </a><code>   public String getContentType()
</code><a name="86700"> </a><code>   {
</code><a name="86701"> </a><code>    // We don't get MIME info from FTP server.  This
</code><a name="86702"> </a><code>    // implementation makes an attempt guess the type using
</code><a name="86703"> </a><code>    // the File name and returns "unknown" in the default case.
</code><a name="86704"> </a><code>    // A more robust mechanisms should
</code><a name="86705"> </a><code>    // be supported for real-world applications.
</code><a name="86706"> </a><code>
</code><a name="86707"> </a><code>      String locatorString = getLocator().toExternalForm();
</code><a name="86708"> </a><code>      int dotPos = locatorString.lastIndexOf(".");
</code><a name="86709"> </a><code>      String extension = locatorString.substring(dotPos + 1);
</code><a name="86710"> </a><code>      String typeString = "unknown";
</code><a name="86711"> </a><code>
</code><a name="86712"> </a><code>      if (extension.equals("avi"))
</code><a name="86713"> </a><code>         typeString = "video.x-msvideo";
</code><a name="86714"> </a><code>      else if (extension.equals("mpg") ||     
</code><a name="86715"> </a><code>         extension.equals("mpeg"))
</code><a name="86716"> </a><code>         typeString = "video.mpeg";
</code><a name="86722"> </a><code>      else if (extension.equals("mov"))
</code><a name="86723"> </a><code>         typeString = "video.quicktime";</code>
</pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86737"> </a><code>      else if (extension.equals("wav"))
</code><a name="86738"> </a><code>         typeString = "audio.x-wav";
</code><a name="86739"> </a><code>      else if (extension.equals("au"))
</code><a name="86740"> </a><code>         typeString = "audio.basic";
</code><a name="86741"> </a><code>      return typeString;
</code><a name="86742"> </a><code>   }
</code><a name="86743"> </a><code>
</code><a name="86744"> </a><code>   public PullSourceStream[] getStreams()
</code><a name="86745"> </a><code>   {
</code><a name="86746"> </a><code>      PullSourceStream[] streams = new PullSourceStream[1];
</code><a name="86747"> </a><code>      try
</code><a name="86748"> </a><code>      {
</code><a name="86749"> </a><code>         streams[0] = new FTPSourceStream(dataSocket.getInputStream());
</code><a name="86750"> </a><code>      }
</code><a name="86751"> </a><code>
</code><a name="86752"> </a><code>      catch(IOException e)
</code><a name="86753"> </a><code>      {
</code><a name="86754"> </a><code>         System.out.println("error getting streams");
</code><a name="86755"> </a><code>      }
</code><a name="86756"> </a><code>      return streams;
</code><a name="86757"> </a><code>   }
</code><a name="86758"> </a><code>
</code><a name="86759"> </a><code>
</code><a name="86760"> </a><code>
</code><a name="86761"> </a><code>   public Time getDuration()
</code><a name="86762"> </a><code>   {
</code><a name="86763"> </a><code>      return Duration.DURATION_UNKNOWN;
</code><a name="86764"> </a><code>   }
</code><a name="86765"> </a><code>
</code><a name="86766"> </a><code>   public void setUser(String user)
</code><a name="86767"> </a><code>
</code><a name="86768"> </a><code>   {
</code><a name="86769"> </a><code>      this.user = user;
</code><a name="86770"> </a><code>   }
</code><a name="86771"> </a><code>
</code><a name="86772"> </a><code>   public String getUser()
</code><a name="86773"> </a><code>   {
</code><a name="86774"> </a><code>      return user;
</code><a name="86775"> </a><code>   }
</code><a name="86776"> </a><code>
</code><a name="86777"> </a><code>   public void setPassword(String password)
</code><a name="86778"> </a><code>   {
</code><a name="86779"> </a><code>      this.password = password;
</code><a name="86780"> </a><code>   }
</code><a name="86781"> </a><code>

⌨️ 快捷键说明

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