का उपयोग करके भेजा या प्राप्त नहीं किया जा रहा है मैं mjsip sip stack का उपयोग कर सॉफ्टफ़ोन प्रोजेक्ट पर काम कर रहा हूं। एमजेएसआईपी केवल जी 711 या पीसीएमए/पीसीएमयू कोडेक का समर्थन करता है। मैंने अपनी परियोजना में जी 72 9 जोड़ा है। जब मैं प्रोजेक्ट का निर्माण करता हूं तो यह कोई त्रुटि नहीं दिखाता है। लेकिन जब फोन कनेक्ट हो जाते हैं तो कॉल स्थापित हो जाता है वहां कोई आवाज संचार नहीं होती है, वास्तव में मेरा ऐप किसी भी आरटीपी पैकेट उत्पन्न नहीं करता है। और लॉग मेंआरटीपी पैकेट्स mjsip
java.lang.NullPointerException
RtpStreamReceiver - run -> Terminated.
at local.media.RtpStreamReceiver.run(RtpStreamReceiver.java:171)
जैसी कोई त्रुटि दिखाई देती है, तो मैं बग खोजने में विफल रहा हूं।
यहां मेरा आरटीपीस्ट्रीम रिसीवर.जावा वर्ग है।
package local.media;
import local.net.RtpPacket;
import local.net.RtpSocket;
import java.io.*;
import java.net.DatagramSocket;
import org.flamma.codec.SIPCodec;
/** RtpStreamReceiver is a generic stream receiver.
* It receives packets from RTP and writes them into an OutputStream.
*/
public class RtpStreamReceiver extends Thread {
public static int RTP_HEADER_SIZE = 12;
private long start = System.currentTimeMillis();
public static final int SO_TIMEOUT = 200; // Maximum blocking time, spent waiting for reading new bytes [milliseconds]
private SIPCodec sipCodec = null; // Sip codec to be used on audio session
private RtpSocket rtp_socket = null;
private boolean socketIsLocal = false; // Whether the socket has been created here
private boolean running = false;
private int timeStamp = 0;
private int frameCounter = 0;
private OutputStream output_stream;
public RtpStreamReceiver(SIPCodec sipCodec, OutputStream output_stream, int local_port)
{
try {
DatagramSocket socket = new DatagramSocket(local_port);
socketIsLocal = true;
init(sipCodec, output_stream, socket);
start = System.currentTimeMillis();
}
catch (Exception e) {
e.printStackTrace();
}
}
public RtpStreamReceiver(SIPCodec sipCodec, OutputStream output_stream, DatagramSocket socket)
{
init(sipCodec, output_stream, socket);
}
/** Inits the RtpStreamReceiver */
private void init(SIPCodec sipCodec, OutputStream output_stream, DatagramSocket socket)
{
this.sipCodec = sipCodec;
this.output_stream = output_stream;
if (socket != null) {
rtp_socket = new RtpSocket(socket);
}
}
/** Whether is running */
public boolean isRunning()
{
return running;
}
/** Stops running */
public void halt()
{
running = false;
}
/** Runs it in a new Thread. */
public void run()
{
if (rtp_socket == null)
{
println("run", "RTP socket is null.");
return;
}
byte[] codedBuffer = new byte[ sipCodec.getIncomingEncodedFrameSize() ];
byte[] internalBuffer = new byte[sipCodec.getIncomingEncodedFrameSize() + RTP_HEADER_SIZE ];
RtpPacket rtpPacket = new RtpPacket(internalBuffer, 0);
running = true;
try {
rtp_socket.getDatagramSocket().setSoTimeout(SO_TIMEOUT);
float[] decodingBuffer = new float[ sipCodec.getIncomingDecodedFrameSize() ];
int packetCount = 0;
println("run",
"internalBuffer.length = " + internalBuffer.length
+ ", codedBuffer.length = " + codedBuffer.length
+ ", decodingBuffer.length = " + decodingBuffer.length + ".");
while (running) {
try {
rtp_socket.receive(rtpPacket);
frameCounter++;
if (running) {
byte[] packetBuffer = rtpPacket.getPacket();
int offset = rtpPacket.getHeaderLength();
int length = rtpPacket.getPayloadLength();
int payloadType = rtpPacket.getPayloadType();
if(payloadType < 20)
{
System.arraycopy(packetBuffer, offset, codedBuffer, 0, sipCodec.getIncomingEncodedFrameSize());
timeStamp = (int)(System.currentTimeMillis() - start);
output_stream.write(codedBuffer,offset,length);
}
}
}
catch (java.io.InterruptedIOException e) {
}
}
}
catch (Exception e) {
running = false;
e.printStackTrace();
}
// Close RtpSocket and local DatagramSocket.
DatagramSocket socket = rtp_socket.getDatagramSocket();
rtp_socket.close();
if (socketIsLocal && socket != null) {
socket.close();
}
// Free all.
rtp_socket = null;
println("run", "Terminated.");
}
/** Debug output */
private static void println(String method, String message) {
System.out.println("RtpStreamReceiver - " + method + " -> " + message);
}
और लाइन 171 है: output_stream.write(codedBuffer,offset,length);
आप रुचि रखते हैं here पूर्ण परियोजना स्रोत है।
अधिकतर एनपीई 'output_stream' के कारण होता है जब 'RtpStreamReceiver' थ्रेड चल रहा है। यह पता लगाने के लिए कि क्या यह मामला है, मैं 'println' का उपयोग करूंगा। – gnat
सॉकेट बाध्य (बाइंड()) या खोला गया है, या आरटीपी सॉकेट क्लास आपके लिए यह संभालता है? – EdH
क्या आप इसे काम कर रहे थे? क्या आप अपनी परियोजना को दोबारा अपलोड कर सकते हैं? – B770