как создать программу видеочата на java без jmf?

Я хочу создать программу чата C/S в java, используя сокет, и теперь я хочу добавить к ней функцию онлайн-видеочата. После google я нашел jmf и следовал некоторым учебникам, но мне это не очень нравится, потому что каждый клиент должен установить jmf и зарегистрировать веб-камеру (или другие аудиоустройства).

Поэтому я с нетерпением жду альтернативной библиотеки без jmf и нашел такие библиотеки, как (juv, xuggle), и тогда они хорошо работают. К сожалению, они могут управлять только веб-камерой, но не могут получить доступ к аудиоустройству.

Кто-нибудь может дать мне совет?


person Crystal Cat    schedule 21.04.2012    source источник


Ответы (2)


Недавно я рассматривал варианты веб-камеры и остановился на 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

Звуковые потоки адаптированы из ответа здесь:

перемещение аудио по локальной сети с помощью GStreamer

Для Linux измените ksvideosrc на v4l2src и directsoundsink на alsaink. Все, что возможно в командной строке, возможно из Java с помощью библиотеки gstreamer-java:

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

А вот еще несколько полезных ссылок:

Руководство по GStreamer

Шпаргалка

Примеры веб-камеры

Информация о потоковой передаче

person Russ Hayward    schedule 21.04.2012
comment
Это великолепно! Изучив некоторые основные способы использования GStreamer и его java-интерфейса, я могу свободно получать доступ к своей веб-камере, спасибо! :) PS: Каждый клиент должен установить GStream, так что есть ли лучший способ запустить мою программу на другом компьютере, не устанавливая GStream? - person Crystal Cat; 21.04.2012
comment
Я думаю, что это возможно, но это немного некрасиво, и я не уверен насчет лицензии или разумности этого. В Windows GStreamer загружает свои DLL, используя переменные среды PATH и GST_PLUGIN_PATH. Если вы измените эти переменные (только для вашего процесса) перед запуском приложения, чтобы они указывали на каталог в папке вашего приложения, тогда вам не нужно устанавливать GStreamer - я думаю. Как я сказал ранее - я не рекомендую это и не знаю, законно ли это! - person Russ Hayward; 21.04.2012

Вы также можете использовать OpenCV для реализации клиентского сервера. OpenCV предоставляет множество функций, помогающих в захвате видео. http://docs.opencv.org/java/2.4.2/org/opencv/highgui/VideoCapture.html#VideoCapture(int)

person user5616083    schedule 28.11.2015