首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JMF中三种数据源有什么区别跟联系

2012-07-30 
JMF中三种数据源有什么区别和联系想写个JMF程序实现:1.获得媒体设备,捕捉数据2.本地播放视频捕捉的数据3.

JMF中三种数据源有什么区别和联系
想写个JMF程序实现:
1.获得媒体设备,捕捉数据
2.本地播放视频捕捉的数据
3.传输该数据至远程PC机
4.将该数据本地保存

为了解决三个问题(本地播放、传输、保存)得用数据克隆
部分代码如下:

//自定义类
//获得设备数据
import   CaputreUtil;
//传输数据
import   RTPTransmit;
//保存数据
import   Store;
import   ……;

public   class   Server{

        ……
        DataSource   datasource   =   null;
        datasource   =   CaptureUtil.getCaptureDS(   new   VideoFormat(null)   ,new   AudioFormat(null));//获得数据源
        //创建可克隆数据源
        DataSource   cloneableDS   =   Manager.createCloneableDataSource(datasource);
        //由可克隆数据源克隆出新的数据源,一个用于保存,一个用于传输
        DataSource   toFileDS   =   ((SourceCloneable)dataClone).createClone();
        DataSource   transmitDS   =   ((SourceCloneable)dataClone).createClone();
        //传输数据
        RTPTransmit   rtpTransmit   =   new   RTPTransmit(transmitDS, "192.168.1.15 ", "8686 ",null);
        rtpTransmit.mystart();
        //保存数据
        Store   store   =   new   Store(toFileDS);
        ……
}

////////////////////////////////////////////////////////////////////
public   class   CaputreUtil{
        ……
        public   DataSource   getCaptureDS(Format   vf,Format   af){
        ……//获得数据源
        }
        ……
}
///////////////////////////////////////////////////////////////////
public   class   RTPTransmit{
        ……
        public   RTPTransmit(DataSource   ds,String   ipAddress,String   port,Format   mf){
        ……//用ds创建一个processor传输数据
        }
        ……
}
//////////////////////////////////////////////////////////////////
public   class   Store{
        ……
        DataSource   datasource   =   null;
        public   Store(DataSource   ds){
                this.datasource   =   ds;
                ……/用datasource创建一个processor
                ……//调用processor.getDataOutput()获得数据流   DataSource   outSource
                ……//再用该数据流创建一个DataSink   datasink;
                ……//然后调用processor.start
        }
        ……
}

经过测试上面那样做,三个功能都可以实现。
也就是说克隆所获得的数据既可以用于播放,又可以用于传输,还可以本地存储。
不过遇到了个问题,我做了如下的修改:
1.将Server中获得数据的方法直接复制到Server中
2.分别用三种数据源测试文件传输单个功能
三种数据源如下:
        DataSource   datasource   =   null;
        //原数据源
        datasource   =   CaptureUtil.getCaptureDS(   new   VideoFormat(null)   ,new   AudioFormat(null));
        //可克隆数据源


        DataSource   cloneableDS   =   Manager.createCloneableDataSource(datasource);
        //克隆数据源
        DataSource   toFileDS   =   ((SourceCloneable)dataClone).createClone();

修改后的Store类如下:
public   class   Store{
        ……
        DataSource   datasource   =   null;
        public   Store(){
                datasource   =   CaptureUtil.getCaptureDS(   new   VideoFormat(null)   ,new   AudioFormat(null));
                //可克隆数据源
                DataSource   cloneableDS   =   Manager.createCloneableDataSource(datasource);
                //克隆数据源
                DataSource   toFileDS   =   ((SourceCloneable)dataClone).createClone();
                //方法一:用datasource创建一个processor,然后将获得的数据传至文件
                //方法二:用cloneableDS创建一个processor,然后将获得的数据传至文件
                //方法三:用toFileDS创建一个processor,然后将获得的数据传至文件
                //三个方法每次选一个测试
        }
        ……
}

测试结果:
用datasource(原数据源)和coloneableDS(可克隆数据源)都可以实现文件传输功能
用toFileDS(克隆数据源)虽然可以传输,不过不可以processor.close(),close的时候就会抛出异常

不知道三种数据之间有什么区别和联系,在使用上有什么需要注意的地方,请各位英才帮我看看啊,谢谢了。
期待您的回复。

需要源代码的话我可以传给大家,不过太多,我就不贴出来了。

[解决办法]
看不明白,关注一下
[解决办法]
好像大陆确实没有几个学JMF的,苦闷ING

[解决办法]
请把那个源码 发给我 我最近在做这方面的研究 谢谢!
我的邮箱zhoujiaweicgy@126.com
[解决办法]
lingfei-1986@163.com
发我一份啊 谢谢
[解决办法]
我也要一份 我的邮箱xiaogan221@163.com
[解决办法]
yilin-hust@163.com
研究中...
[解决办法]
ljchn@126.com
谢谢了
[解决办法]
给我一份吧bigkimna@163.com
谢谢你
[解决办法]
我要一套。我是想说 DataSource cloneableDS = Manager.createCloneableDataSource(datasource); 
是什么意思啊,clone到底是怎么回事,我程序是这样的 DataSource ds=Manager.createDataSource(ml);
DataSource dsClone=Manager.createCloneableDataSource(ds); dsClone 作为本地数据播放 Player能实现,但是没播放,也无异常!
油箱:classic20082003@gmail.com

热点排行