From 198cf852d60ab2ac4150cfa5bc9f43adb742fafc Mon Sep 17 00:00:00 2001 From: Shengbin Meng Date: Sat, 15 Nov 2014 17:24:25 +0800 Subject: [PATCH 01/10] correct a command in README.md the typo is easy for people (like me) to copy and make mistakes --- src/native/vpx/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/native/vpx/README.md b/src/native/vpx/README.md index 922140906..2525893c4 100644 --- a/src/native/vpx/README.md +++ b/src/native/vpx/README.md @@ -20,7 +20,7 @@ export JAVA_HOME=/usr/lib/jvm/default-java/ ### Build the libjitsi code with the libvpx-debian ant target ``` -ant libvpx -Dlibmkv=/path/to/libvpx/third_party/libmkv +ant libvpx-debian -Dlibmkv=/path/to/libvpx/third_party/libmkv ``` From b4453265716e73d2610d77500e360c5257b5bd8c Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 5 Jan 2015 22:25:15 +0200 Subject: [PATCH 02/10] Fix broken test build --- src/org/jitsi/impl/neomedia/MediaUtils.java | 8 +++----- src/org/jitsi/service/neomedia/codec/Constants.java | 5 +++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/MediaUtils.java b/src/org/jitsi/impl/neomedia/MediaUtils.java index 699e16668..f20f3a5df 100644 --- a/src/org/jitsi/impl/neomedia/MediaUtils.java +++ b/src/org/jitsi/impl/neomedia/MediaUtils.java @@ -184,7 +184,7 @@ public class MediaUtils silkFormatParams.put("useinbandfec", "1"); addMediaFormats( MediaFormat.RTP_PAYLOAD_TYPE_UNKNOWN, - "SILK", + Constants.SILK, MediaType.AUDIO, Constants.SILK_RTP, silkFormatParams, @@ -201,7 +201,7 @@ public class MediaUtils //opusFormatParams.put("minptime", "10"); addMediaFormats( MediaFormat.RTP_PAYLOAD_TYPE_UNKNOWN, - "opus", + Constants.OPUS, MediaType.AUDIO, Constants.OPUS_RTP, 2, @@ -361,7 +361,6 @@ public class MediaUtils { AudioMediaFormatImpl audioMediaFormat = (AudioMediaFormatImpl) mediaFormat; - String encoding = audioMediaFormat.getEncoding(); int channels = audioMediaFormat.getChannels(); double sampleRate = audioMediaFormat.getClockRate(); int sampleSizeInBits @@ -369,9 +368,8 @@ public class MediaUtils // The opus/rtp format has 2 channels, but we don't want it to // trigger use of stereo elsewhere. - if (Constants.OPUS.equalsIgnoreCase(encoding)) + if (Constants.OPUS.equalsIgnoreCase(audioMediaFormat.getEncoding())) channels = 1; - if (maxAudioChannels < channels) maxAudioChannels = channels; if (maxAudioSampleRate < sampleRate) diff --git a/src/org/jitsi/service/neomedia/codec/Constants.java b/src/org/jitsi/service/neomedia/codec/Constants.java index e50dceeb2..7128d5d91 100644 --- a/src/org/jitsi/service/neomedia/codec/Constants.java +++ b/src/org/jitsi/service/neomedia/codec/Constants.java @@ -86,6 +86,11 @@ public class Constants */ public static final String OPUS_RTP = "opus/rtp"; + /** + * The OPUS constant. + */ + public static final String OPUS = "opus"; + /** * The name of the property used to control the Opus encoder * "audio bandwidth" setting From 5a671567ab630a4a21e217280ef1a0215d88154a Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 5 Jan 2015 22:27:11 +0200 Subject: [PATCH 03/10] Ignore junit-reports --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b126ffd69..f84f37f7b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ libjitsi.jar *.swp dist *.class -.settings/* \ No newline at end of file +.settings/* +junit-reports From 7548d1a5a9393262c01d579d87687f1af621ca2c Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 5 Jan 2015 22:53:33 +0200 Subject: [PATCH 04/10] Constants.PCMU --- src/org/jitsi/examples/AVReceive2.java | 3 ++- src/org/jitsi/examples/AVTransmit2.java | 3 ++- src/org/jitsi/impl/neomedia/MediaUtils.java | 2 +- .../jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java | 2 +- src/org/jitsi/service/neomedia/codec/Constants.java | 2 ++ 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/org/jitsi/examples/AVReceive2.java b/src/org/jitsi/examples/AVReceive2.java index ba9d1f186..83fc46116 100644 --- a/src/org/jitsi/examples/AVReceive2.java +++ b/src/org/jitsi/examples/AVReceive2.java @@ -12,6 +12,7 @@ import org.jitsi.service.libjitsi.*; import org.jitsi.service.neomedia.*; +import org.jitsi.service.neomedia.codec.Constants; import org.jitsi.service.neomedia.device.*; import org.jitsi.service.neomedia.format.*; @@ -134,7 +135,7 @@ private boolean initialize() switch (device.getMediaType()) { case AUDIO: - encoding = "PCMU"; + encoding = Constants.PCMU; clockRate = 8000; /* PCMU has a static RTP payload type number assigned. */ dynamicRTPPayloadType = -1; diff --git a/src/org/jitsi/examples/AVTransmit2.java b/src/org/jitsi/examples/AVTransmit2.java index 37ca21167..1d58ca50d 100644 --- a/src/org/jitsi/examples/AVTransmit2.java +++ b/src/org/jitsi/examples/AVTransmit2.java @@ -12,6 +12,7 @@ import org.jitsi.service.libjitsi.*; import org.jitsi.service.neomedia.*; +import org.jitsi.service.neomedia.codec.Constants; import org.jitsi.service.neomedia.device.*; import org.jitsi.service.neomedia.format.*; @@ -131,7 +132,7 @@ private String start() switch (device.getMediaType()) { case AUDIO: - encoding = "PCMU"; + encoding = Constants.PCMU; clockRate = 8000; /* PCMU has a static RTP payload type number assigned. */ dynamicRTPPayloadType = -1; diff --git a/src/org/jitsi/impl/neomedia/MediaUtils.java b/src/org/jitsi/impl/neomedia/MediaUtils.java index f20f3a5df..ca5c99025 100644 --- a/src/org/jitsi/impl/neomedia/MediaUtils.java +++ b/src/org/jitsi/impl/neomedia/MediaUtils.java @@ -83,7 +83,7 @@ public class MediaUtils { addMediaFormats( (byte) SdpConstants.PCMU, - "PCMU", + Constants.PCMU, MediaType.AUDIO, AudioFormat.ULAW_RTP, 8000); diff --git a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java index 0b7467e15..8073bda58 100644 --- a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java +++ b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java @@ -83,7 +83,7 @@ private void initializeFormatPreferences() setEncodingPreference("G722", 8000 /* actually, 16 kHz */, 705); setEncodingPreference("speex", 32000, 701); setEncodingPreference("speex", 16000, 700); - setEncodingPreference("PCMU", 8000, 650); + setEncodingPreference(Constants.PCMU, 8000, 650); setEncodingPreference("PCMA", 8000, 600); setEncodingPreference("iLBC", 8000, 500); setEncodingPreference("GSM", 8000, 450); diff --git a/src/org/jitsi/service/neomedia/codec/Constants.java b/src/org/jitsi/service/neomedia/codec/Constants.java index 7128d5d91..87a198bff 100644 --- a/src/org/jitsi/service/neomedia/codec/Constants.java +++ b/src/org/jitsi/service/neomedia/codec/Constants.java @@ -91,6 +91,8 @@ public class Constants */ public static final String OPUS = "opus"; + public static final String PCMU = "PCMU"; + /** * The name of the property used to control the Opus encoder * "audio bandwidth" setting From e779aef3115365945df02fdd553e3c3118fa4944 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 5 Jan 2015 23:12:57 +0200 Subject: [PATCH 05/10] Constants --- src/org/jitsi/impl/neomedia/MediaUtils.java | 4 ++-- .../codec/EncodingConfigurationImpl.java | 16 ++++++++-------- .../jitsi/service/neomedia/codec/Constants.java | 3 ++- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/MediaUtils.java b/src/org/jitsi/impl/neomedia/MediaUtils.java index ca5c99025..e64329987 100644 --- a/src/org/jitsi/impl/neomedia/MediaUtils.java +++ b/src/org/jitsi/impl/neomedia/MediaUtils.java @@ -100,7 +100,7 @@ public class MediaUtils g723FormatParams.put("bitrate", "6.3"); addMediaFormats( (byte) SdpConstants.G723, - "G723", + Constants.G723, MediaType.AUDIO, AudioFormat.G723_RTP, g723FormatParams, @@ -116,7 +116,7 @@ public class MediaUtils 8000); addMediaFormats( (byte) SdpConstants.PCMA, - "PCMA", + Constants.PCMA, MediaType.AUDIO, Constants.ALAW_RTP, 8000); diff --git a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java index 8073bda58..03c79ee26 100644 --- a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java +++ b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java @@ -77,21 +77,21 @@ private void initializeFormatPreferences() 800); // audio - setEncodingPreference("opus", 48000, 750); - setEncodingPreference("SILK", 24000, 714); - setEncodingPreference("SILK", 16000, 713); - setEncodingPreference("G722", 8000 /* actually, 16 kHz */, 705); + setEncodingPreference(Constants.OPUS, 48000, 750); + setEncodingPreference(Constants.SILK, 24000, 714); + setEncodingPreference(Constants.SILK, 16000, 713); + setEncodingPreference(Constants.G722, 8000 /* actually, 16 kHz */, 705); setEncodingPreference("speex", 32000, 701); setEncodingPreference("speex", 16000, 700); setEncodingPreference(Constants.PCMU, 8000, 650); - setEncodingPreference("PCMA", 8000, 600); + setEncodingPreference(Constants.PCMA, 8000, 600); setEncodingPreference("iLBC", 8000, 500); setEncodingPreference("GSM", 8000, 450); setEncodingPreference("speex", 8000, 352); - setEncodingPreference("G723", 8000, 150); + setEncodingPreference(Constants.G723, 8000, 150); - setEncodingPreference("SILK", 12000, 0); - setEncodingPreference("SILK", 8000, 0); + setEncodingPreference(Constants.SILK, 12000, 0); + setEncodingPreference(Constants.SILK, 8000, 0); setEncodingPreference("G729", 8000, 0 /* proprietary */); // enables by default telephone event(DTMF rfc4733), with lowest diff --git a/src/org/jitsi/service/neomedia/codec/Constants.java b/src/org/jitsi/service/neomedia/codec/Constants.java index 87a198bff..db1e4e867 100644 --- a/src/org/jitsi/service/neomedia/codec/Constants.java +++ b/src/org/jitsi/service/neomedia/codec/Constants.java @@ -90,8 +90,9 @@ public class Constants * The OPUS constant. */ public static final String OPUS = "opus"; - public static final String PCMU = "PCMU"; + public static final String G723 = "G723"; + public static final String PCMA = "PCMA"; /** * The name of the property used to control the Opus encoder From db1042236a0014f00e9286cde9d0f91c784a59f0 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 5 Jan 2015 23:25:17 +0200 Subject: [PATCH 06/10] Constants --- .../neomedia/codec/EncodingConfigurationImpl.java | 14 +++++++------- .../jitsi/service/neomedia/codec/Constants.java | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java index 03c79ee26..7ad25260a 100644 --- a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java +++ b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java @@ -53,12 +53,12 @@ private void initializeFormatPreferences() 1100); setEncodingPreference( - "H263-1998", + Constants.H263P, VideoMediaFormatImpl.DEFAULT_CLOCK_RATE, 0); setEncodingPreference( - "VP8", + Constants.VP8, VideoMediaFormatImpl.DEFAULT_CLOCK_RATE, 0); /* @@ -72,7 +72,7 @@ private void initializeFormatPreferences() VideoMediaFormatImpl.DEFAULT_CLOCK_RATE, 950); setEncodingPreference( - "H261", + Constants.H261, VideoMediaFormatImpl.DEFAULT_CLOCK_RATE, 800); @@ -81,18 +81,18 @@ private void initializeFormatPreferences() setEncodingPreference(Constants.SILK, 24000, 714); setEncodingPreference(Constants.SILK, 16000, 713); setEncodingPreference(Constants.G722, 8000 /* actually, 16 kHz */, 705); - setEncodingPreference("speex", 32000, 701); - setEncodingPreference("speex", 16000, 700); + setEncodingPreference(Constants.SPEEX, 32000, 701); + setEncodingPreference(Constants.SPEEX, 16000, 700); setEncodingPreference(Constants.PCMU, 8000, 650); setEncodingPreference(Constants.PCMA, 8000, 600); setEncodingPreference("iLBC", 8000, 500); setEncodingPreference("GSM", 8000, 450); - setEncodingPreference("speex", 8000, 352); + setEncodingPreference(Constants.SPEEX, 8000, 352); setEncodingPreference(Constants.G723, 8000, 150); setEncodingPreference(Constants.SILK, 12000, 0); setEncodingPreference(Constants.SILK, 8000, 0); - setEncodingPreference("G729", 8000, 0 /* proprietary */); + setEncodingPreference(Constants.G729, 8000, 0 /* proprietary */); // enables by default telephone event(DTMF rfc4733), with lowest // priority as it is not needed to order it with audio codecs diff --git a/src/org/jitsi/service/neomedia/codec/Constants.java b/src/org/jitsi/service/neomedia/codec/Constants.java index db1e4e867..dd43c5ce2 100644 --- a/src/org/jitsi/service/neomedia/codec/Constants.java +++ b/src/org/jitsi/service/neomedia/codec/Constants.java @@ -93,6 +93,8 @@ public class Constants public static final String PCMU = "PCMU"; public static final String G723 = "G723"; public static final String PCMA = "PCMA"; + public static final String H261 = "H261"; + public static final String G729 = "G729"; /** * The name of the property used to control the Opus encoder From 79fffd2073e362461db68503637340944f0d8b4d Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Tue, 6 Jan 2015 05:50:21 +0200 Subject: [PATCH 07/10] README.md --- README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 81bb6097a..16a70755d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,50 @@ -libjitsi -======== +libjitsi Secure audio/video communication for Java applications +=============================================================== + +`libjitsi` is an advanced Java media library for secure real-time audio/video communication. +It allows applications to capture, playback, stream, encode/decode and encrypt audio and video flows. +It also allows for advanced features such as audio mixing, handling multiple streams, participation in audio and video conferences. +Originally `libjitsi` was part of the [Jitsi](https://jitsi.org/) client source code but we decided to spin it off so that other projects can also use it. +`libjitsi` is distributed under the terms of the [LGPL](http://www.gnu.org/licenses/lgpl.html). + +Features +-------- + +* Video capture and rendering on Windows, Mac OS X and Linux. +* Video codecs: H.264 and H.263 (VP8 coming in early 2013) +* Audio codecs: Opus, SILK, G.722, Speex, ilbc, G.711 (PCMU, PCMA), G.729 (get your [licences](http://sipro.com/) first though). +* Security: SRTP (with ZRTP or SDES) +* RTP DTMF ([RFC 2833](http://tools.ietf.org/html/rfc2833)/[RFC 4733](http://tools.ietf.org/html/rfc4733)) +* RTP audio levels ([RFC 6465](http://tools.ietf.org/html/rfc6465)) +* … and all other [media features in Jitsi](https://jitsi.org/features) + +Examples and API +---------------- + +`libjitsi` contains some basic examples that can get you started. You can check them out here: + +* [AVReceive2.java](./src/org/jitsi/examples/AVReceive2.java) +* [AVTransmit2.java](./src/org/jitsi/examples/AVTransmit2.java) + +Ultimately, though, you can always use Jitsi’s source code as a reference to libjitsi’s full potential. + +You can also peruse the [javadocs](http://bluejimp.com/jitsi/libjitsi/javadoc/) `libjitsi’s` API. + +Mailing list +------------ + +Despite being now technically separate, `libjitsi` is still very much part of the Jitsi community. +Technical discussions and questions about `libjitsi` are hence most welcome on the [Jitsi dev mailing list](https://jitsi.org/Development/MailingLists#dev). + + +Acknowledgements +---------------- + +`libjitsi` heavily relies on libraries such as [FMJ](http://fmj-sf.net/), [FFmpeg](http://ffmpeg.org/), [Speex](http://www.speex.org/), and others. +The `libjitsi` spin-off project would not have been possible without the support of the [NLnet Foundation](http://nlnet.nl/). + +We are also grateful to [Qomtec](http://qomtec.com/) for their support in the project. +Of course, it goes without saying, that all the media features that were part of Jitsi have been implemented with the help of our [Partners](https://jitsi.org/Main/Partners) and [Contributors](https://jitsi.org/Development/TeamAndContributors). + +-- the Jitsi development team -libjitsi is an advanced Java media library for secure real-time audio/video communication. It allows applications to capture, playback, stream, encode/decode and encrypt audio and video flows. It also allows for advanced features such as audio mixing, handling multiple streams, participation in audio and video conferences. Originally libjitsi was part of the Jitsi client source code but we decided to spin it off so that other projects can also use it. libjitsi is distributed under the terms of the LGPL. From 2e8f2f7bb2050c61429544da336126d4aa6d56d8 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Tue, 6 Jan 2015 06:14:38 +0200 Subject: [PATCH 08/10] README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 16a70755d..38643d7a4 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,14 @@ Ultimately, though, you can always use Jitsi’s source code as a reference to l You can also peruse the [javadocs](http://bluejimp.com/jitsi/libjitsi/javadoc/) `libjitsi’s` API. +Links +----- + +* [GSoC 2014, Part 1 : ice4j tutorial](http://blog.sharedmemory.fr/en/2014/06/22/gsoc-2014-ice4j-tutorial/) +* [GSoC 2014, Part 2 : Libjitsi tutorial with ice4j](http://blog.sharedmemory.fr/en/2014/07/07/gsoc-2014-libjitsi-tutorial/) +* [Java Bells: A Jingle implementation for Java based on LibJitsi, Ice4J and Smack](https://github.com/bejayoharen/java-bells0) +* [Video Conferencing Project in Java Source Code](http://matrixsust.blogspot.com/2013/07/video-conferencing-project-in-java.html) + Mailing list ------------ From 2ac21016b140e4094c149e38c7c1825c9112736c Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Tue, 6 Jan 2015 20:58:55 +0200 Subject: [PATCH 09/10] Revert "README.md" This reverts commit 2e8f2f7bb2050c61429544da336126d4aa6d56d8. --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 38643d7a4..16a70755d 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,6 @@ Ultimately, though, you can always use Jitsi’s source code as a reference to l You can also peruse the [javadocs](http://bluejimp.com/jitsi/libjitsi/javadoc/) `libjitsi’s` API. -Links ------ - -* [GSoC 2014, Part 1 : ice4j tutorial](http://blog.sharedmemory.fr/en/2014/06/22/gsoc-2014-ice4j-tutorial/) -* [GSoC 2014, Part 2 : Libjitsi tutorial with ice4j](http://blog.sharedmemory.fr/en/2014/07/07/gsoc-2014-libjitsi-tutorial/) -* [Java Bells: A Jingle implementation for Java based on LibJitsi, Ice4J and Smack](https://github.com/bejayoharen/java-bells0) -* [Video Conferencing Project in Java Source Code](http://matrixsust.blogspot.com/2013/07/video-conferencing-project-in-java.html) - Mailing list ------------ From 86ae54dfcf9781c4aa1118322625fd5165e877c3 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Tue, 6 Jan 2015 21:00:12 +0200 Subject: [PATCH 10/10] README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 16a70755d..9be9cb13c 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,14 @@ Ultimately, though, you can always use Jitsi’s source code as a reference to l You can also peruse the [javadocs](http://bluejimp.com/jitsi/libjitsi/javadoc/) `libjitsi’s` API. +Links +----- + +* [GSoC 2014, Part 1 : ice4j tutorial](http://blog.sharedmemory.fr/en/2014/06/22/gsoc-2014-ice4j-tutorial/) +* [GSoC 2014, Part 2 : Libjitsi tutorial with ice4j](http://blog.sharedmemory.fr/en/2014/07/07/gsoc-2014-libjitsi-tutorial/) +* [Java Bells: A Jingle implementation for Java based on LibJitsi, Ice4J and Smack](https://github.com/bejayoharen/java-bells) +* [Video Conferencing Project in Java Source Code](http://matrixsust.blogspot.com/2013/07/video-conferencing-project-in-java.html) + Mailing list ------------