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