我想用socket在java中创建一个C/S聊天程序,现在我想给它添加在线视频聊天功能。在谷歌之后,我找到了 jmf 并遵循了一些教程,但我不太喜欢它,因为每个客户端都必须安装 jmf 并注册网络摄像头(或其他音频设备)。
所以我期待一个没有 jmf 的替代库,并找到了像 (juv, xuggle) 这样的库,然后运行良好。不幸的是,他们只能驱动网络摄像头,无法访问音频设备。
谁能给我一些建议?
我最近一直在研究网络摄像头选项,并决定使用 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
声音流改编自这里的答案:
对于 Linux,将 ksvideosrc 更改为 v4l2src,将 directsoundsink 更改为 alsasink。使用 gstreamer-java 库在 Java 中可以在命令行上进行任何可能的操作:
http://code.google.com/p/gstreamer-java/
这里有一些更有用的链接:
您还可以使用 OpenCV 来实现客户端服务器。OpenCV 提供了许多有助于捕获视频的功能。 http://docs.opencv.org/java/2.4.2/org/opencv/highgui/VideoCapture.html#VideoCapture(int)