【问题标题】:Stream Buffer for voice chat / voIP?语音聊天 / VoIP 的流缓冲区?
【发布时间】:2014-02-23 18:06:03
【问题描述】:

我了解流 buffer 通常对 IO 很有用。

我想问一下buffer 应该如何在实时 VoIP 应用程序中使用, 比如流在(Android)MediaRecorder output -> LocalSocket ->UDP / RTP

在我看来,似乎没有空间来缓冲任何流。

我说的对吗?还是我错过了什么重要的事情?

在这种情况下不使用缓冲区时设备资源效率(CPU & Buttery)如何?

伪代码

//UNIX type localSocket Server to receive stream from mediaRecorder
server = new LocalServerSocket(SOCKET_ADDRESS);

// local socket between mediaRecorder and localSocket Server
 sender = new LocalSocket();
 sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
//mediaRecorder
 mRecorder = new MediaRecorder(); 
 //.....................
 //sender.getFileDescriptor() is set as the vitual Outputfile
 mRecorder.setOutputFile(sender.getFileDescriptor());
 mRecorder.prepare();
 mRecorder.start();

//localSocket Server accept the stream to receiver
receiver = server.accept();

int val;
byte[] buf;
DatagramPacket packet;
ds = new DatagramSocket(localPort);

while (localServerLoop)
{ 
    //receiver stream is read to (int)val
    val = receiver.getInputStream().read();  
    //======localServer to remoteUDP======================     
    // (int)val to (byte)buf
    buf = toBytes(val);
    //  byte  to packet
    packet = new DatagramPacket(buf, buf.length,
            InetAddress.getByName(remoteHost), remotePort);
    //send to remoteHost
    ds.send(packet);
    //=========================
}

【问题讨论】:

    标签: android stream udp buffer rtp


    【解决方案1】:

    您正在从流中读取单个字节,因此实际上没有什么可以缓冲的。使用采用字节数组的read() 方法之一,这将是您的缓冲区。您也可以使用BufferedInputStream 等进行包装。您可能想了解流在 Java 中的一般工作方式,这不是 Android 特定的。

    http://developer.android.com/reference/java/io/InputStream.html#read(byte[])

    【讨论】:

    • 感谢您提供的信息丰富的回答。我会调查这些。
    猜你喜欢
    • 2018-11-09
    • 2015-02-12
    • 2023-03-22
    • 2014-11-03
    • 2010-12-04
    • 2014-03-02
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多