9 个解决方案
#1
你用的JMF?若用的JMF为什么不用JMF的接收和解包
你直接接回来的byte[]又不知道编码格式,又不知道你的传输协议要转成其他对象,应该没人能在这种条件下做出来的吧
你直接接回来的byte[]又不知道编码格式,又不知道你的传输协议要转成其他对象,应该没人能在这种条件下做出来的吧
#2
to:windstear1(枯枝烂叶也是宝)
先谢谢你了,我以为这不重要就没写上去,原视频是RGB_RTP编码,用udp协议。我想做个视频采集加密后再传输到其他用户播放的程序,现在采集和直接传输没有问题,只是在接收加密并传送过来的packet后不知如何还原成player可以播放的格式?我找了许多函数比如PushBufferStream、ByteArrayInputStream等等都不能直接达到要求,到这里就进行不下去了,问题究竟出在哪里?恳请指教,谢谢!
先谢谢你了,我以为这不重要就没写上去,原视频是RGB_RTP编码,用udp协议。我想做个视频采集加密后再传输到其他用户播放的程序,现在采集和直接传输没有问题,只是在接收加密并传送过来的packet后不知如何还原成player可以播放的格式?我找了许多函数比如PushBufferStream、ByteArrayInputStream等等都不能直接达到要求,到这里就进行不下去了,问题究竟出在哪里?恳请指教,谢谢!
#3
再换句话说:我试着在接收端读出传送过来的packet,读到PushBufferStream中,下一步怎么转换成player可播放的形式?
try{
mgrs = new RTPManager[sessions.length];
RTPSocketAdapter rtpsocketAdapter = new RTPSocketAdapter(
InetAddress.getLocalHost(), 6000);
mgrs[0].initialize(rtpsocketAdapter);
byte[] buffer = new byte[64];
while(true){
DatagramPacket dp = new DatagramPacket(buffer, 0,
InetAddress.getByName(
"192.168.0.3"), 6000);
rtpsocketAdapter.dataSock.receive(dp);
System.err.println("Deciphering code. ");//解密部分,代码略
PushSourceStream pss = rtpsocketAdapter.getDataInputStream();
pss.read(buffer, 0, 64);
//到这里停步了。。。how???
}
}catch(Exception ce){
ce.printStackTrace();
}
try{
mgrs = new RTPManager[sessions.length];
RTPSocketAdapter rtpsocketAdapter = new RTPSocketAdapter(
InetAddress.getLocalHost(), 6000);
mgrs[0].initialize(rtpsocketAdapter);
byte[] buffer = new byte[64];
while(true){
DatagramPacket dp = new DatagramPacket(buffer, 0,
InetAddress.getByName(
"192.168.0.3"), 6000);
rtpsocketAdapter.dataSock.receive(dp);
System.err.println("Deciphering code. ");//解密部分,代码略
PushSourceStream pss = rtpsocketAdapter.getDataInputStream();
pss.read(buffer, 0, 64);
//到这里停步了。。。how???
}
}catch(Exception ce){
ce.printStackTrace();
}
#4
急盼回复。。。
#5
看你的代码我还有几处不太明白哦
先是 rtpsocketAdapter.dataSock.receive(dp); 因为RTPSocketAdapter 实际上是封装了DatagramSocket ,干嘛要直接用dataSock去接收DatagramPacket,
再就是
rtpsocketAdapter.getDataInputStream();
得到的 PushSourceStream 应该是已经经过SourceTransferHandler处理的Stream了,你读出来的buffer就应该为转换过格式的byte[],在SourceTransferHandler中去做解密什么的
你是说担心的是怎么把byte[]转换成DataSource,有个叫RTPPushDataSource得东东,你不要直接读byte[]出来,把rtpsocketAdapter.getDataInputStream();取得的PushSourceStream用它来做中转,然后通过RTPPushDataSource得到MediaLocator,接下来的事就播放了呢
先是 rtpsocketAdapter.dataSock.receive(dp); 因为RTPSocketAdapter 实际上是封装了DatagramSocket ,干嘛要直接用dataSock去接收DatagramPacket,
再就是
rtpsocketAdapter.getDataInputStream();
得到的 PushSourceStream 应该是已经经过SourceTransferHandler处理的Stream了,你读出来的buffer就应该为转换过格式的byte[],在SourceTransferHandler中去做解密什么的
你是说担心的是怎么把byte[]转换成DataSource,有个叫RTPPushDataSource得东东,你不要直接读byte[]出来,把rtpsocketAdapter.getDataInputStream();取得的PushSourceStream用它来做中转,然后通过RTPPushDataSource得到MediaLocator,接下来的事就播放了呢
#6
很有启发,感谢windstear1!
我会按照你的提示改动,请继续关注,再次感谢!!
我会按照你的提示改动,请继续关注,再次感谢!!
#7
To: windstear1
对"取得的PushSourceStream用它来做中转"我的理解是不是把取得的PushSourceStream用RTPPushDataSource.setInputStream()作为输入流,再从客户端使用RTPPushDataSource.getOutputStream() 方法得到输出流?
能具体解释一下吗?谢谢!
对"取得的PushSourceStream用它来做中转"我的理解是不是把取得的PushSourceStream用RTPPushDataSource.setInputStream()作为输入流,再从客户端使用RTPPushDataSource.getOutputStream() 方法得到输出流?
能具体解释一下吗?谢谢!
#8
$ zz╭ ╮╭ ﹌╮. $
$ z(o-.-o)(o-.-o) . $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓ $
$ IT者-IT开发者的网站-- $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn----- $
$ z(o-.-o)(o-.-o) . $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓ $
$ IT者-IT开发者的网站-- $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn----- $
#9
还得麻烦问一句,你说“在SourceTransferHandler中去做解密”,interface SourceTransferHandler中的transferData()是个空方法,你的意思是要重写transferData()加入解密部分?如果是怎样重写?再就是下面的流程,到图中最后一步之前和你的思路一样吗?
现在没有头绪,还望指点迷津,谢谢!
PushBufferStream----->byte[] buffer1----->buffer2----->OutputDataStream
read cipher write | setInputStream
|
RTPPushDataSource
|
|NET|
|
RTPPushDataSource
|getOutputStream
??? |
MediaLocator<--------------PushSourceStream
现在没有头绪,还望指点迷津,谢谢!
PushBufferStream----->byte[] buffer1----->buffer2----->OutputDataStream
read cipher write | setInputStream
|
RTPPushDataSource
|
|NET|
|
RTPPushDataSource
|getOutputStream
??? |
MediaLocator<--------------PushSourceStream
#1
你用的JMF?若用的JMF为什么不用JMF的接收和解包
你直接接回来的byte[]又不知道编码格式,又不知道你的传输协议要转成其他对象,应该没人能在这种条件下做出来的吧
你直接接回来的byte[]又不知道编码格式,又不知道你的传输协议要转成其他对象,应该没人能在这种条件下做出来的吧
#2
to:windstear1(枯枝烂叶也是宝)
先谢谢你了,我以为这不重要就没写上去,原视频是RGB_RTP编码,用udp协议。我想做个视频采集加密后再传输到其他用户播放的程序,现在采集和直接传输没有问题,只是在接收加密并传送过来的packet后不知如何还原成player可以播放的格式?我找了许多函数比如PushBufferStream、ByteArrayInputStream等等都不能直接达到要求,到这里就进行不下去了,问题究竟出在哪里?恳请指教,谢谢!
先谢谢你了,我以为这不重要就没写上去,原视频是RGB_RTP编码,用udp协议。我想做个视频采集加密后再传输到其他用户播放的程序,现在采集和直接传输没有问题,只是在接收加密并传送过来的packet后不知如何还原成player可以播放的格式?我找了许多函数比如PushBufferStream、ByteArrayInputStream等等都不能直接达到要求,到这里就进行不下去了,问题究竟出在哪里?恳请指教,谢谢!
#3
再换句话说:我试着在接收端读出传送过来的packet,读到PushBufferStream中,下一步怎么转换成player可播放的形式?
try{
mgrs = new RTPManager[sessions.length];
RTPSocketAdapter rtpsocketAdapter = new RTPSocketAdapter(
InetAddress.getLocalHost(), 6000);
mgrs[0].initialize(rtpsocketAdapter);
byte[] buffer = new byte[64];
while(true){
DatagramPacket dp = new DatagramPacket(buffer, 0,
InetAddress.getByName(
"192.168.0.3"), 6000);
rtpsocketAdapter.dataSock.receive(dp);
System.err.println("Deciphering code. ");//解密部分,代码略
PushSourceStream pss = rtpsocketAdapter.getDataInputStream();
pss.read(buffer, 0, 64);
//到这里停步了。。。how???
}
}catch(Exception ce){
ce.printStackTrace();
}
try{
mgrs = new RTPManager[sessions.length];
RTPSocketAdapter rtpsocketAdapter = new RTPSocketAdapter(
InetAddress.getLocalHost(), 6000);
mgrs[0].initialize(rtpsocketAdapter);
byte[] buffer = new byte[64];
while(true){
DatagramPacket dp = new DatagramPacket(buffer, 0,
InetAddress.getByName(
"192.168.0.3"), 6000);
rtpsocketAdapter.dataSock.receive(dp);
System.err.println("Deciphering code. ");//解密部分,代码略
PushSourceStream pss = rtpsocketAdapter.getDataInputStream();
pss.read(buffer, 0, 64);
//到这里停步了。。。how???
}
}catch(Exception ce){
ce.printStackTrace();
}
#4
急盼回复。。。
#5
看你的代码我还有几处不太明白哦
先是 rtpsocketAdapter.dataSock.receive(dp); 因为RTPSocketAdapter 实际上是封装了DatagramSocket ,干嘛要直接用dataSock去接收DatagramPacket,
再就是
rtpsocketAdapter.getDataInputStream();
得到的 PushSourceStream 应该是已经经过SourceTransferHandler处理的Stream了,你读出来的buffer就应该为转换过格式的byte[],在SourceTransferHandler中去做解密什么的
你是说担心的是怎么把byte[]转换成DataSource,有个叫RTPPushDataSource得东东,你不要直接读byte[]出来,把rtpsocketAdapter.getDataInputStream();取得的PushSourceStream用它来做中转,然后通过RTPPushDataSource得到MediaLocator,接下来的事就播放了呢
先是 rtpsocketAdapter.dataSock.receive(dp); 因为RTPSocketAdapter 实际上是封装了DatagramSocket ,干嘛要直接用dataSock去接收DatagramPacket,
再就是
rtpsocketAdapter.getDataInputStream();
得到的 PushSourceStream 应该是已经经过SourceTransferHandler处理的Stream了,你读出来的buffer就应该为转换过格式的byte[],在SourceTransferHandler中去做解密什么的
你是说担心的是怎么把byte[]转换成DataSource,有个叫RTPPushDataSource得东东,你不要直接读byte[]出来,把rtpsocketAdapter.getDataInputStream();取得的PushSourceStream用它来做中转,然后通过RTPPushDataSource得到MediaLocator,接下来的事就播放了呢
#6
很有启发,感谢windstear1!
我会按照你的提示改动,请继续关注,再次感谢!!
我会按照你的提示改动,请继续关注,再次感谢!!
#7
To: windstear1
对"取得的PushSourceStream用它来做中转"我的理解是不是把取得的PushSourceStream用RTPPushDataSource.setInputStream()作为输入流,再从客户端使用RTPPushDataSource.getOutputStream() 方法得到输出流?
能具体解释一下吗?谢谢!
对"取得的PushSourceStream用它来做中转"我的理解是不是把取得的PushSourceStream用RTPPushDataSource.setInputStream()作为输入流,再从客户端使用RTPPushDataSource.getOutputStream() 方法得到输出流?
能具体解释一下吗?谢谢!
#8
$ zz╭ ╮╭ ﹌╮. $
$ z(o-.-o)(o-.-o) . $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓ $
$ IT者-IT开发者的网站-- $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn----- $
$ z(o-.-o)(o-.-o) . $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓ $
$ IT者-IT开发者的网站-- $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn----- $
#9
还得麻烦问一句,你说“在SourceTransferHandler中去做解密”,interface SourceTransferHandler中的transferData()是个空方法,你的意思是要重写transferData()加入解密部分?如果是怎样重写?再就是下面的流程,到图中最后一步之前和你的思路一样吗?
现在没有头绪,还望指点迷津,谢谢!
PushBufferStream----->byte[] buffer1----->buffer2----->OutputDataStream
read cipher write | setInputStream
|
RTPPushDataSource
|
|NET|
|
RTPPushDataSource
|getOutputStream
??? |
MediaLocator<--------------PushSourceStream
现在没有头绪,还望指点迷津,谢谢!
PushBufferStream----->byte[] buffer1----->buffer2----->OutputDataStream
read cipher write | setInputStream
|
RTPPushDataSource
|
|NET|
|
RTPPushDataSource
|getOutputStream
??? |
MediaLocator<--------------PushSourceStream