Description
A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube and others in the WebView without the need to connect data API services.
Android Oembed Video alternatives and similar packages
Based on the "Video" category.
Alternatively, view Android Oembed Video alternatives based on common mentions on social networks and blogs.
-
Exoplayer
This project is deprecated and stale. The latest ExoPlayer code is available in https://github.com/androidx/media -
android-sdk
Free p2p cdn android github sdk to reduce video streaming costs of live and on demand video using webrtc by upto 90% and improve scalability by 6x - ๐ Vadootv ๐
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of Android Oembed Video or a related project?
README
Android Oembed Video
A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube and others in the WebView without the need to connect data API services.
Supported Video Hostings
YouTube
YouTube Music
Vimeo
Rutube
Facebook (the thumbnail is not available due to api restrictions)
Dailymotion
Wistia
Vzaar
Hulu
Ustream
Ted Talks
Coub
Streamable
Screenshots
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Add the dependency
dependencies {
implementation 'com.github.TalbotGooday:Android-Oembed-Video:Tag'
}
Work Flow
- Create your OkHttpClient and add it to the VideoService.Builder ```kotlin val okHttpClient = OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .build()
val videoService = VideoService.build{ with(this@MainActivity) httpClient(okHttpClient) enableCache(true) enableLog(true) }
2. Get VideoPreviewModel
```kotlin
videoService.loadVideoPreview(
url,
onSuccess = { video ->
//handle a video model
},
onError = { url, error ->
//handle an error
})
- Enable/disable caching
kotlin val videoService = VideoService.build { enableCache(true) }
- Enable/disable logging
kotlin val videoService = VideoService.build { enableLog(BuildConfig.DEBUG) }
## Play Video from VideoPreviewModel The BottomVideoController allows to run any oembed video in WebView. ```kotlin val host = model.videoHosting val linkToPlay = model.linkToPlay val title = model.videoTitle val initUrl = model.url
BottomVideoController.build(this) { setListener(object : BottomVideoController.Listener() { override fun openLinkIn(link: String) { openLink(link) } override fun copyLink(link: String) { copyLinkToClipboard(link) } }) setHostText(host) setPlayLink(linkToPlay) setSize(model.width, model.height) setTitle(title) setVideoUrl(initUrl) setProgressView(TextView(this@MainActivity).apply { text = "Loading" }) show() }
## How to add some other video hosting
1. Add the `Gson` library to your project
2. Create the `Gson` data class from the embed response of the video service. Make this class a subclass of `VideoInfoModel`, implement the` toPreview` function, and override it:
```kotlin
override fun toPreview(url: String?, linkToPlay: String, hostingName: String, videoId: String): VideoPreviewModel {
return VideoPreviewModel(url, linkToPlay, hostingName, videoId).apply {
this.thumbnailUrl = [email protected]
this.videoTitle = [email protected]
this.width = [email protected]()
this.height = [email protected]()
}
}
Create a subclass of
VideoInfoModel
, implement members and override them:class UltimediaVideoInfoModel: VideoInfoModel<UltimediaResponse>() { override val baseUrl: String get() = "https://www.ultimedia.com" //https://regex101.com/r/2AsrOc/1 override val pattern: String get() = "(?:http[s]?:\\/\\/)?(?:www)?\\.?ultimedia\\.com\\/(?:deliver|default|api)\\/.*\\/([_a-zA-Z0-9]+)\\S*" override val idPattern: String get() = pattern //or some another video id search pattern override val type: Class<UltimediaResponse> get() = UltimediaResponse::class.java override val hostingName: String get() = "Ultimedia" override fun getInfoUrl(incomingUrl: String?): String? { return "$baseUrl/api/search/oembed?$FORMAT=$FORMAT_JSON&$URL=$incomingUrl" } override fun getPlayLink(videoId: String): String { return "https://www.ultimedia.com/deliver/generic/iframe/src/$videoId/" } }
Note: By default, the index of the
Regex
group should be 1. If youridPattern
does not fulfill this condition, then override theparseVideoId
method:override fun parseVideoId(url: String?): String? { url ?: return null return idPattern.toRegex().find(url)?.groups?.get(**someIndex**)?.value }
License
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details
*Note that all licence references and agreements mentioned in the Android Oembed Video README section above
are relevant to that project's source code only.