Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从套接字获取InputStream_Java_Connection_Audio Streaming_Sip - Fatal编程技术网

Java 从套接字获取InputStream

Java 从套接字获取InputStream,java,connection,audio-streaming,sip,Java,Connection,Audio Streaming,Sip,我想在java应用程序(SE)中使用SIP连接进行流媒体和音频传输。我连接了服务器,收到了200条OK消息。我想接收服务器发送的数据。我创建了一个套接字,得到了一个InputStream。我是这样做的。123.456.789.1是我的ip地址,1234是我的应用程序侦听端口 Socket socket=new Socket("123.456.789.1",1234); InputStream in=socket.ge

我想在java应用程序(SE)中使用SIP连接进行流媒体和音频传输。我连接了服务器,收到了200条OK消息。我想接收服务器发送的数据。我创建了一个套接字,得到了一个InputStream。我是这样做的。123.456.789.1是我的ip地址,1234是我的应用程序侦听端口

            Socket socket=new Socket("123.456.789.1",1234);                
            InputStream in=socket.getInputStream();
            System.out.println("inputSream available :"+in.available());  
但是in.available()始终为0

但是如果我得到
对象content=response.getContent()

contenBytes的长度等于响应内容的长度

InputStream pp=new ByteArrayInputStream(b);

          AudioStream as = new AudioStream(pp);
          AudioData data = as.getData();
          ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
异常抛出;java.io.IOException:无法从输入流创建音频流 然后我尝试在.read()中读取inputstream
,然后在读取一些字节时抛出IOException。
问题1。如何从套接字解析和获取InputStream?
问题2。如何获取输入流来播放音频

或者让我知道问题在哪里以及如何解决

更新:感谢所有在.available()中显示错误的

然后我改变了密码

ByteArrayOutputStream ou=new ByteArrayOutputStream();
               int i=0;
                System.out.println("Before while");
               while((i=in.read())!=-1){

               ou.write(i);
                   System.out.println("Wrote :"+i);

               }  

不幸的是,应用程序没有进一步发展。这意味着只有在打印while之前。应用程序只显示正在运行(我使用netbeans IDE)。我不知道为什么。有什么需要澄清的吗?

available()是不执行对操作系统的阻塞调用就可以读取的字节数。如果您想知道有多少数据可用,您应该尝试读取数据并查看得到的数据量。

available()是不执行对操作系统的阻塞调用即可读取的字节数。如果你想知道有多少数据可用,你应该试着去读它,看看你能得到多少。

当你使用getContent时,你会得到一种包装内容的对象。然后使用ObjectOutputStream编写该对象的Java表示,而不是原始数据的实际字节

你应该能做到

AudioStream as = new AudioStream(in);
AudioData data = as.getData();
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
或者如果您确实想缓冲数据

int chunkSize;
byte[] chunk = new byte[2048];
ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
while ( ( chunkSize = in.read(chunk) ) != -1) {
  outBuffer.write(chunk, 0, chunkSize);
}

ByteArrayInputStream inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
AudioStream as = new AudioStream(inBuffer);
AudioData data = as.getData();
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);  

available()显示阻塞前可以保证读取的字节数。它可能总是返回0

当您使用getContent时,会得到某种对象来包装内容。然后使用ObjectOutputStream编写该对象的Java表示,而不是原始数据的实际字节

你应该能做到

AudioStream as = new AudioStream(in);
AudioData data = as.getData();
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
或者如果您确实想缓冲数据

int chunkSize;
byte[] chunk = new byte[2048];
ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
while ( ( chunkSize = in.read(chunk) ) != -1) {
  outBuffer.write(chunk, 0, chunkSize);
}

ByteArrayInputStream inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
AudioStream as = new AudioStream(inBuffer);
AudioData data = as.getData();
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);  

available()显示阻塞前可以保证读取的字节数。它可能总是返回0

谢谢你,罗杰。我尝试了上一个代码示例(缓冲区数据)。但是应用程序在ByteArrayOutputStream对象创建之后没有进一步执行。它没有进入while:(。请查看我的套接字连接以及如何获取InputStream。代码看起来正常。您确定服务器在连接时开始发送字节吗?您不需要初始化吗(发送一些信息)首先?感谢您的关注。在我的问题中,我也提到了。我可以从响应中获得一个inputStream(我使用JAINsip)。但是当该inputStream被读取时,IOExcepton会抛出一些字节,无法将流发送到audioStream。在响应中,内容长度也是280。我将字节值打印到控制台。(@当时我观察到读取某些字节时会引发IO异常),但响应是URLConnection?如果是,则启动已完成(请参阅),但您也应该能够在URLConnection上执行getInputStream。谢谢,罗杰。我尝试了上一个代码示例(缓冲区数据)。但是应用程序在ByteArrayOutputStream对象创建之后没有进一步的操作。它没有进入while:(。请查看我的套接字连接以及如何获取InputStream。代码看起来正常。您确定服务器在连接时开始发送字节吗?您不必初始化(发送一些信息)首先?感谢您的关注。在我的问题中,我也提到了。我可以从响应中获得一个inputStream(我使用JAINsip)。但是当该inputStream被读取时,IOExcepton会抛出一些字节,无法将流发送到audioStream。在响应中,内容长度也是280。我将字节值打印到控制台。(@当时我注意到读取某些字节时会引发IO异常),但响应是URLConnection?如果是,则启动已完成(请参阅)但您也应该能够在URLConnection上执行getInputStream。谢谢Peter。我尝试了阅读。但应用程序并没有走得更远。它会在while循环之前停止。我的代码中还有其他问题吗?如果代码在您显示的代码之前停止,这意味着该代码中存在错误。如果您想知道为什么要阅读()正在阻止它,因为它正在等待一些数据。如果在读取数据时要执行其他操作,我建议您使用后台线程。您认为,如果我创建套接字连接并在线程中运行上述代码会更好吗?我这样做了。我创建了一个套接字,获得了一个inputstream。并尝试读取。但它仍然没有继续r、 但是当我得到响应和响应长度时,它给出了一个长度。另外,我通过响应的内容得到了inputstream,当我读取它时,大小也与响应的内容长度相同。但是当我读取该inputstream时,它也给一些读取提供了IO异常。然后无法将inputstream传递到音频流中。
availablee()
是可以在不阻塞的情况下读取的字节数。数据可能在套接字接收缓冲区中,因此需要操作系统调用才能读取数据。谢谢Peter。我尝试读取。但应用程序没有继续。它会在while循环之前停止。我的代码中还有其他问题吗?如果代码在您显示代码之前停止,则m这段代码中有一个bug正在阻止它,因为它正在等待一些数据。如果在读取数据时要执行其他操作,我建议您使用后台线程。您认为,如果我创建套接字连接并在线程中运行上述代码会更好吗?我这样做了。我创建了一个套接字并获得了一个