From 75242281601fcdd5cf365d0025e453a83d919863 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Wed, 5 Jul 2017 15:08:00 +0100 Subject: [PATCH] Clean up rtmp extension --- core_settings.gradle | 2 + extensions/rtmp/README.md | 47 +++++----- extensions/rtmp/build.gradle | 9 +- extensions/rtmp/src/main/AndroidManifest.xml | 2 +- .../exoplayer2/ext/rtmp/RtmpDataSource.java | 86 ++++++++++++------- .../ext/rtmp/RtmpDataSourceFactory.java | 47 ++++++++++ .../upstream/DefaultDataSource.java | 78 ++++++++++++++--- 7 files changed, 198 insertions(+), 73 deletions(-) create mode 100644 extensions/rtmp/src/main/java/com/google/android/exoplayer2/ext/rtmp/RtmpDataSourceFactory.java diff --git a/core_settings.gradle b/core_settings.gradle index abf5422b04..31547f60df 100644 --- a/core_settings.gradle +++ b/core_settings.gradle @@ -31,6 +31,7 @@ include modulePrefix + 'extension-ima' include modulePrefix + 'extension-okhttp' include modulePrefix + 'extension-opus' include modulePrefix + 'extension-vp9' +include modulePrefix + 'extension-rtmp' project(modulePrefix + 'library').projectDir = new File(rootDir, 'library/all') project(modulePrefix + 'library-core').projectDir = new File(rootDir, 'library/core') @@ -46,6 +47,7 @@ project(modulePrefix + 'extension-ima').projectDir = new File(rootDir, 'extensio project(modulePrefix + 'extension-okhttp').projectDir = new File(rootDir, 'extensions/okhttp') project(modulePrefix + 'extension-opus').projectDir = new File(rootDir, 'extensions/opus') project(modulePrefix + 'extension-vp9').projectDir = new File(rootDir, 'extensions/vp9') +project(modulePrefix + 'extension-rtmp').projectDir = new File(rootDir, 'extensions/rtmp') if (gradle.ext.has('exoplayerIncludeCronetExtension') && gradle.ext.exoplayerIncludeCronetExtension) { diff --git a/extensions/rtmp/README.md b/extensions/rtmp/README.md index cdd34f156b..2cfa6b8ff4 100644 --- a/extensions/rtmp/README.md +++ b/extensions/rtmp/README.md @@ -2,33 +2,26 @@ ## Description ## -The RTMP Extension is an [DataSource][] implementation for playing [RTMP][] streaming using -[Librtmp Client for Android]. - -## Using the extension ## - -When building [MediaSource][], inject `RtmpDataSourceFactory` like this: - -```java -private MediaSource buildMediaSource(Uri uri, String overrideExtension) { - int type = TextUtils.isEmpty(overrideExtension) ? Util.inferContentType(uri) - : Util.inferContentType("." + overrideExtension); - switch (type) { - - // ... other types cases - - case C.TYPE_OTHER: - DataSource.Factory factory = uri.getScheme().equals("rtmp") ? new RtmpDataSourceFactory() : mediaDataSourceFactory; - return new ExtractorMediaSource(uri, factory, new DefaultExtractorsFactory(), mainHandler, eventLogger); - default: { - throw new IllegalStateException("Unsupported type: " + type); - } - } -} -``` - +The RTMP Extension is a [DataSource][] implementation for playing [RTMP][] +streams using [LibRtmp Client for Android][]. [DataSource]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/upstream/DataSource.html [RTMP]: https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol -[Librtmp Client for Android]: https://github.com/ant-media/LibRtmp-Client-for-Android -[MediaSource]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/source/MediaSource.html +[LibRtmp Client for Android]: https://github.com/ant-media/LibRtmp-Client-for-Android + +## Using the extension ## + +The easiest way to use the extension is to add it as a gradle dependency: + +```gradle +compile 'com.google.android.exoplayer:extension-rtmp:rX.X.X' +``` + +where `rX.X.X` is the version, which must match the version of the ExoPlayer +library being used. + +Alternatively, you can clone the ExoPlayer repository and depend on the module +locally. Instructions for doing this can be found in ExoPlayer's +[top level README][]. + +[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md diff --git a/extensions/rtmp/build.gradle b/extensions/rtmp/build.gradle index e039825502..7f017255fa 100644 --- a/extensions/rtmp/build.gradle +++ b/extensions/rtmp/build.gradle @@ -11,6 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +apply from: '../../constants.gradle' apply plugin: 'com.android.library' android { @@ -18,12 +19,14 @@ android { buildToolsVersion project.ext.buildToolsVersion defaultConfig { - minSdkVersion 16 + // TODO: Lower minSdkVersion as much as possible once this issue in LibRtmp is fixed: + // https://github.com/ant-media/LibRtmp-Client-for-Android/issues/39 + minSdkVersion 21 targetSdkVersion project.ext.targetSdkVersion } } dependencies { compile project(':library-core') - compile 'net.butterflytv.utils:rtmp-client:0.2.6.1' -} \ No newline at end of file + compile 'net.butterflytv.utils:rtmp-client:0.2.7.1' +} diff --git a/extensions/rtmp/src/main/AndroidManifest.xml b/extensions/rtmp/src/main/AndroidManifest.xml index 272aa11a96..7c5e92c198 100644 --- a/extensions/rtmp/src/main/AndroidManifest.xml +++ b/extensions/rtmp/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ -