{ "id": "160442", "key": "TIMOB-23426", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2016-05-23T20:00:23.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "android", "exoplayer", "hyperloop", "media", "streaming" ], "versions": [], "issuelinks": [], "assignee": null, "updated": "2020-02-26T12:43:25.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "Currently if we need to stream long movies using adaptive streaming, we can only do so on iOS using Titanium since HLS is natively enabled on Apple's native media player (MPMoviePlayer).\r\n\r\nIn order to support adaptive streaming on Android, we need to use the new official ExoPlayer framework, which supports MPEG-DASH, replacing the old MediaPlayer implementation.\r\n\r\nThis also brings a lot of benefits apart from MPEG-DASH adaptive streaming. According to the ExoPlayer documentation:\r\n\r\n* Support for Dynamic Adaptive Streaming over HTTP (DASH) and SmoothStreaming, neither of which are are supported by MediaPlayer (it also supports HTTP Live Streaming (HLS), FMP4, MP4, M4A, MKV, WebM, MP3, AAC, MPEG-TS, MPEG-PS, OGG, FLV and WAV).\r\n* Support for advanced HLS features, such as correct handling of #EXT-X-DISCONTINUITY tags.\r\nThe ability to customize and extend the player to suit your use case. ExoPlayer is designed specifically with this in mind, and allows many components to be replaced with custom implementations.\r\n* Easily update the player along with your application. Because ExoPlayer is a library that you include in your application apk, you have control over which version you use and you can easily update to a newer version as part of a regular application update.\r\n* Fewer device specific issues.\r\n\r\nLinks referring to ExoPlayer and MPEG-DASH:\r\n\r\n* http://google.github.io/ExoPlayer/\r\n* https://developer.android.com/guide/topics/media/exoplayer.html\r\n* https://github.com/google/ExoPlayer\r\n* https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP", "attachment": [], "flagged": false, "summary": "Android - Support for MPEG-DASH using ExoPlayer", "creator": { "name": "ygbr", "key": "ygbr", "displayName": "Ygor Lemos", "active": true, "timeZone": "America/Sao_Paulo" }, "subtasks": [], "reporter": { "name": "ygbr", "key": "ygbr", "displayName": "Ygor Lemos", "active": true, "timeZone": "America/Sao_Paulo" }, "environment": null, "comment": { "comments": [ { "id": "403210", "author": { "name": "hazemkhaled", "key": "hazemkhaled", "displayName": "Hazem Khaled", "active": true, "timeZone": "Europe/Istanbul" }, "body": "+1", "updateAuthor": { "name": "hazemkhaled", "key": "hazemkhaled", "displayName": "Hazem Khaled", "active": true, "timeZone": "Europe/Istanbul" }, "created": "2016-12-12T20:52:05.000+0000", "updated": "2016-12-12T20:52:05.000+0000" }, { "id": "417199", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "+1", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-04-11T17:31:36.000+0000", "updated": "2017-04-11T17:31:36.000+0000" }, { "id": "431117", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": "https://github.com/NetrisTV/ti.exoplayer", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2017-11-21T15:30:37.000+0000", "updated": "2017-11-21T15:30:37.000+0000" }, { "id": "454452", "author": { "name": "patrickmounteney", "key": "patrickmounteney", "displayName": "Patrick Mounteney", "active": true, "timeZone": "Europe/London" }, "body": "I tried using NetrisTV ti.exoplayer but never got it to work. Probably due to not getting the right dependencies or not knowing how to use them. This really does need to be native in Appcelerator's MediaPlayer API, particularly for reliably playing AAC streams (like Shoutcast or Icecast) on Android.", "updateAuthor": { "name": "patrickmounteney", "key": "patrickmounteney", "displayName": "Patrick Mounteney", "active": true, "timeZone": "Europe/London" }, "created": "2020-02-26T12:35:58.000+0000", "updated": "2020-02-26T12:35:58.000+0000" }, { "id": "454453", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": "All dependencies are included and all stream from demo playlist should work (app example is in \"android/example\" directory).\r\nIf you have questions about NetrisTV/ti.exoplayer feel free to ask them on github.", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2020-02-26T12:43:25.000+0000", "updated": "2020-02-26T12:43:25.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }