SipDroidはあなたが必要とまさにありません。
これは、ファイルディスクリプタを必要とMediaRecorder
クラスの制限を回避するハックを必要とします。 MediaRecorderのビデオストリームの結果をローカルソケット(パイプの一種として使用)に保存し、(同じアプリケーションだが別のスレッド)をもう一度このソケットからもう一度読み取ってRTPを作成する最終的には、パケット受信したデータのうち、及び(あなたが望むようにあなたは、ここにブロードキャストまたはユニキャストモードを使用することができます)ネットワークへのRTPパケットをブロードキャストします。
基本的には、以下の(簡略化コード)に要約:
// Create a MediaRecorder
MediaRecorder mr = new MediaRecorder();
// (Initialize mr as usual)
// Create a LocalServerSocket
LocalServerSocket lss = new LocalServerSocket("foobar");
// Connect both end of this socket
LocalSocket sender = lss.accept();
LocalSocket receiver = new LocalSocket();
receiver.connect(new LocalSocketAddress("foobar"));
// Set the output of the MediaRecorder to the sender socket file descriptor
mr.setOutputFile(sender.getFileDescriptor());
// Start the video recording:
mr.start();
// Launch a background thread that will loop,
// reading from the receiver socket,
// and creating a RTP packet out of read data.
RtpSocket rtpSocket = new RtpSocket();
InputStream in = receiver.getInputStream();
while(true) {
fis.read(buffer, ...);
// Here some data manipulation on the received buffer ...
RtpPacket rtp = new RtpPacket(buffer, ...);
rtpSocket.send(rtpPacket);
}
RtpPacket
と
RtpSocket
クラス(かなり単純)、およびビデオストリームのコンテンツを操作する正確なコードの実装を見つけることができ
SipDroidプロジェクト(特にVideoCamera.java
)。
私はWebRTCを使ってみましたが、スマートテレビで働いていませんでした(私の問題はアンドロイドとスマートテレビの間の伝送です)、スマートテレビにはクロムがありません:( – vrbsm