]> source.dussan.org Git - tigervnc.git/commitdiff
[Development] Loading the keyframe data, using HTTP Range headers to load only the...
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 20:12:22 +0000 (20:12 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 20:12:22 +0000 (20:12 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2609 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tightvnc/rfbplayer/FbsConnection.java
java/src/com/tightvnc/rfbplayer/FbsInputStream.java

index f53e5557c430b00cb4cc7dadb3b4a5564dc9f5dd..20b0154435c280f001a3ac71d52f81c7e7470b16 100644 (file)
@@ -191,7 +191,34 @@ public class FbsConnection {
    */
   private FbsInputStream openFbsFile(FbsEntryPoint entryPoint)
       throws IOException {
-    return null;
+
+    // Make sure the protocol is HTTP.
+    if (!fbkURL.getProtocol().equalsIgnoreCase("http") ||
+        !fbsURL.getProtocol().equalsIgnoreCase("http")) {
+      return null;
+    }
+
+    // Prepare URLConnection to the right part of the .fbk file.
+    URLConnection fbkConn = fbkURL.openConnection();
+    long firstByteOffset = entryPoint.key_fpos;
+    long lastByteOffset = entryPoint.key_fpos + entryPoint.key_size - 1;
+    String rangeSpec = "bytes=" + firstByteOffset + "-" + lastByteOffset;
+    System.err.println("Range: " + rangeSpec);
+    fbkConn.setRequestProperty("Range", rangeSpec);
+    fbkConn.connect();
+    DataInputStream is = new DataInputStream(fbkConn.getInputStream());
+
+    // Load keyframe data from the .fbk file.
+    int keyDataSize = is.readInt();
+    byte[] keyData = new byte[keyDataSize];
+    is.readFully(keyData);
+    is.close();
+
+    // Open the FBS stream.
+    URLConnection fbsConn = fbsURL.openConnection();
+    fbsConn.connect();
+    return new FbsInputStream(fbsConn.getInputStream(), entryPoint.timestamp,
+                              keyData, entryPoint.fbs_skip);
   }
 
 }
index 68bf8de208a7eee75d098b6aa7255bb97eececa6..db02a1dd8cbe76b0eb47df782c1050cd0bf4ef51 100644 (file)
@@ -43,7 +43,7 @@ class FbsInputStream extends InputStream {
   protected int bufferPos;
 
   /** The number of bytes to skip in the beginning of the next data block. */
-  protected int nextBlockOffset;
+  protected long nextBlockOffset;
 
   protected Observer obs;
 
@@ -95,7 +95,7 @@ class FbsInputStream extends InputStream {
    *    from <code>in</code>.
    */
   FbsInputStream(InputStream in, long timeOffset, byte[] buffer,
-                 int nextBlockOffset) {
+                 long nextBlockOffset) {
 
     this.in = in;
     startTime = System.currentTimeMillis() - timeOffset;