几天以来,我一直在寻找将PC屏幕从Java服务器实时流传输到Android客户端的最佳方法,但是我找不到其他方法来传输TCP套接字。我想从PC流到Android客户端。
现在,我只是通过TCP套接字发送图像(帧)。它工作正常,但有以下缺点:
我尝试使用UDP套接字,但是如何处理64Ko的最大大小的数据包?最好的解决方案是带多播的UDP,但我在Android上阅读了有关设备的一些问题。
预先感谢您的回答!
我终于成功通过Java服务器上的RTP传输了PC的屏幕
public static void main(String[] args) throws Exception {
boolean found = new NativeDiscovery().discover();
System.out.println(found);
System.out.println(LibVlc.INSTANCE.libvlc_get_version());
String media = "screen://";
String options = formatRtpStream("230.0.0.1", 5555);
System.out.println("Streaming '" + media + "' to '" + options + "'");
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(args);
EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
Canvas canvas = new Canvas();
canvas.setBackground(Color.black);
CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
mediaPlayer.setVideoSurface(videoSurface);
// Creating a JFrame to display stream (duplicate)
JFrame f = new JFrame("vlcj duplicate output test");
f.add(canvas);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
mediaPlayer.playMedia(media,
options,
":no-sout-rtp-sap",
":no-sout-standard-sap",
":sout-all",
":sout-keep"
);
// Don't exit
Thread.currentThread().join();
}
private static String formatRtpStream(String serverAddress, int serverPort) {
StringBuilder sb = new StringBuilder(60);
sb.append(":sout=");
// Transcode with codec (mp4v here), 30 FPS, not resized (scale 1), audio disabled (only video).
sb.append("#transcode{vcodec=mp4v,fps=30,scale=1,noaudio}");
// Creating RTP address
sb.append(":rtp{dst=");
sb.append(serverAddress);
sb.append(",port=");
sb.append(serverPort);
// Encapsulation method used for the resulting stream, this option has to be set.
sb.append(",mux=ts}");
return sb.toString();
}
您可以替换为:
sb.append(":rtp{dst=");
sb.append(",mux=ts}");
这样:
sb.append(":duplicate{dst=display,dst=rtp{dst=");
sb.append(",mux=ts}}");
这样,您将能够看到结果流。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句