想把视频文件存放在oracle数据库中,好说,直接在表中建立了类型是blob的字段,但是问题出现了:当我取视频数据时,要把一段视频数据全部取到本地才能播放.怎么能实现视频流那样,直接把数据库中的数据以流的方式发送的客户端.谢谢

解决方案 »

  1.   

    放进去了再拿出来,这个好像用blob不能实现吧,最好使用bfile来实现这个功能
    而且好像也没有必要非要把它取到本地,你直接访问有什么问题吗?
      

  2.   

    就是在播放存储在数据库中的视频的时候,有什么方法可以不预先读取所有要播放的视频数据到本地,而是只读取当前要播放的数据,有点象vod的视频流服务.
      

  3.   

    试试用这个DBMS_LOB.READ (
       lob_loc   IN             BLOB,
       amount    IN OUT  NOCOPY BINARY_INTEGER,
       offset    IN             INTEGER,
       buffer    OUT            RAW);           --buffer的类型也可以是varchar2
    Parameter  Description  
    lob_loc  Locator for the LOB to be read. 
     
    amount  Number of bytes (for BLOBs) or characters (for CLOBs) to read, or number that were read.  
     
    offset  Offset in bytes (for BLOBs) or characters (for CLOBs) from the start of the LOB (origin: 1). 
     
    buffer  Output buffer for the read operation.
     
    注:buffer的最大长度为32KB 
     再加个例子
    CREATE OR REPLACE PROCEDURE Example_13a IS
        src_lob        BLOB;
        buffer         RAW(32767);
        amt            BINARY_INTEGER := 32767;
        pos            INTEGER := 2147483647;
    BEGIN
        SELECT b_col INTO src_lob
            FROM lob_table
            WHERE key_value = 21;
        LOOP
            dbms_lob.read (src_lob, amt, pos, buffer);
            -- process the buffer 
            pos := pos + amt;
        END LOOP;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                dbms_output.put_line('End of data');
    END;
      

  4.   

    SQL> create table tb (img blob);表已创建。SQL> insert into tb select '1234' from dual
      2  /已创建 1 行。SQL> ed
    已写入文件 afiedt.buf  1  declare b varchar2(10);
      2  tmp blob;
      3  amt binary_integer;
      4  begin
      5  select img into tmp from tb where rownum=1;
      6  amt:=1;
      7  dbms_lob.read(tmp,amt,1,b);    --读第一个字节
      8  dbms_output.put_line(b);
      9  dbms_lob.read(tmp,amt,2,b);    --读第二个字节
     10  dbms_output.put_line(b);
     11* end;
    SQL> /
    12
    34PL/SQL 过程已成功完成。自己写了个例子,仅供参考
      

  5.   

    知道intermedia 吗?那是oracle  专门针对多媒体的功能,你可以用这个,oracle还有针对real networks的插件呢,很好用的 。
      

  6.   

    原理上面可以是利用DBMS_LOB.read 去分段读取字段内容,然后显示部分字段内容。比如读取10秒的影像
    然后在播放这10秒的时候,继续读取下一个10秒的影像。然后在播放,如此循环,直到播放完毕。关于播放的连续性我就不清楚了。你看看是把数据放在内存中还是保存到文件里面。应该可以放在内存中保证连续性吧。