如何在没有jmf的情况下在java中构建视频聊天程序?

时间:2012-04-21 08:59:54

标签: java videochat

我想使用socket在java中创建一个C / S聊天程序,现在我想为它添加在线视频聊天功能。谷歌之后,我发现了jmf并遵循了一些教程,但我并不喜欢它,因为每个客户端都必须安装jmf并注册网络摄像头(或其他音频设备)。

所以我期待一个没有jmf的替代lib,发现像(juv,xuggle)这样的lib,然后效果很好。不幸的是,他们只能驾驶网络摄像头,无法访问音频设备。

有人能给我一些建议吗?

2 个答案:

答案 0 :(得分:4)

我最近一直在寻找网络摄像头选项,我决定使用GStreamer。它确实需要单独的本机库,但您可以将它们与您的程序捆绑在一起(检查许可证)。

好消息是它内置了视频和音频流。坏消息是它需要一些时间来解决它,因为它非常灵活。以下是在Windows上从命令行设置流的示例。

Send video:
gst-launch ksvideosrc ! queue ! video/x-raw-yuv,width=320,height=240,framerate=4/1 ! videorate ! videoscale ! ffmpegcolorspace ! queue ! smokeenc ! queue ! udpsink host=[TARGET_IP_ADDRESS] port=5000

Receive video:
gst-launch udpsrc port=5000 ! smokedec ! autovideosink

Send audio:
gst-launch audiotestsrc ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16,rate=44100 ! rtpL16pay  ! udpsink host=[TARGET_IP_ADDRESS] port=5001

Receive audio:
gst-launch udpsrc port=5001 ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! audioconvert ! audioresample ! directsoundsink

声音流来自这里的答案:

moving audio over a local network using GStreamer

对于Linux,将ksvideosrc更改为v4l2src并将directsoundsink更改为alsasink。使用gstreamer-java库在Java中可以在命令行上执行任何操作:

http://code.google.com/p/gstreamer-java/

以下是一些更有用的链接:

GStreamer Manual

Cheat Sheet

Webcam Examples

Streaming Info

答案 1 :(得分:0)

您还可以使用OpenCV来实现客户端服务器。 OpenCV提供了许多功能,有助于捕获视频。 http://docs.opencv.org/java/2.4.2/org/opencv/highgui/VideoCapture.html#VideoCapture(int)