[FREE/OS] Exoplayer for AppInventor | Play media with Google's Exoplayer


A better free video player such as Google’s Exoplayer has always been missing from AppInventor based platforms. But now its here and its free and open source.



Create exoplayer view inside a layout.


Add a new media item to the player.


Remove media item at a specific index.


Clear all media items.


Play video.


Pause video.


Convert milliseconds to time string.


Playback states.


Current media duration.


Current position of media.


Buffered location.


Buffered percentage.


Check if current media is loading.


Should automatically play media when ready.

Current Player UI

The current ui of player is like below :

The upcoming ui that I am working on is shown below :


AIX File : com.dreamers.exoplayer.aix
AIA File : video_player.aia

The aia file was created in Kodular.

Open Source

I have made this project open-soure so other developers can benefit from it and make contributions. This initial release is a gateway to whole new opportuinities. A lot of cool and awesome stuff is coming and I would really love to see your contributions to it as well. Make sure to star the repo.


Great Extension @ZainUlHassan.

Awesome Extension @ZainUlHassan.


When I saw the image at the top I thought that it is a video :rofl:

1 Like

Can you please make a youtuebe video player extension. @ZainUlHassan


@Be_superb Welcome to Our Community!!
Please don’t use Capital Letters.

1 Like

Do not create duplicate posts

I just messaged to the developer for support

Please, I still don’t know how to use this extension correctly, I’m getting this error, I believe it’s because of the video link. I think maybe I have to use the DashSource block, but I don’t know how to do that, could someone help me?

1 Like

com.dreamers.exoplayercore.aix (1.9 MB)

Can anyone help me, what to enter in these fields, I tried but getting error evey time…
@AryanGupta @ZainUlHassan

The developer is offline since 2 year, and he didn’t made docs for this block

Anybody please help me!!
@Quantum20 @Bharat_Android_App_D

Why you want to use that block? or for what?

To use dash(mpd) links with drm license, can you help me I tried it but always getting error.

I hadn’t used this extension ever, so i don’t know more about this. But I will surely try to help you.

Thank you, if any other extension is available, I will use that but unfortunately this is the only extension that supports dash(mpd) with drm licence,and the developer is also offline from 2 years and he didn’t have made docs for this block.

1 Like
  • Create new media item with extra customizations.
    • @param path Path to media file either offline or online.
    • @param subtitles List of Subtitles.
    • @param mediaId Custom media id or an empty string to use path as default id.
    • @param mimeType The MIME type that may be used as a hint for inferring the type of the media item.
    • @param startPositionMs Sets the optional start position in milliseconds which must be a value larger than or equal to zero.
    • @param endPositionMs Sets the optional end position in milliseconds which must be a value larger than or equal to zero, or TimeEndOfSource.
    • @param relativeToLiveWindow Sets whether the start/end positions should move with the live window for live streams.
    • @param relativeToDefaultPosition Sets whether the start position and the end position are relative to the default position in the window.
    • @param startsAtKeyFrame Sets whether the start point guarantees to be a key frame.
    • @param drmScheme The drm scheme that will be used to get respective drm UUID.
    • @param drmLicenseUri Sets the optional default DRM license server URI.
    • @param drmForceDefaultLicenseUri Sets whether to force use the default DRM license server URI even if the media specifies its own DRM license server URI.
    • @param drmLicenseRequestHeaders Sets the optional request headers attached to the DRM license request.
    • @param drmMultiSession Sets whether the DRM configuration is multi session enabled.
    • @param drmPlayClearContentWithoutKey Sets whether clear samples within protected content should be played when keys for the encrypted part of the content have yet to be loaded.
    • @param drmSessionForClearContent Sets whether a DRM session should be used for clear tracks of type TrackTypeVideo and TrackTypeAudio.
    • @param liveTargetOffsetMs Sets the optional target offset from the live edge for live streams, in milliseconds.
    • @param liveMinOffsetMs Sets the optional minimum offset from the live edge for live streams, in milliseconds.
    • @param liveMaxOffsetMs Sets the optional maximum offset from the live edge for live streams, in milliseconds.
    • @param liveMinPlaybackSpeed Sets the optional minimum playback speed for live stream speed adjustment.
    • @param liveMaxPlaybackSpeed Sets the optional maximum playback speed for live stream speed adjustment.
    • @return MediaItem or null in case of an error
      @SimpleFunction(description = “Create new media item with extra customizations.”)
      fun CreateMediaExtended(
      path: String,
      subtitles: YailList,
      mediaId: String,
      mimeType: String,
      startPositionMs: Long,
      endPositionMs: Long,
      relativeToLiveWindow: Boolean,
      relativeToDefaultPosition: Boolean,
      startsAtKeyFrame: Boolean,
      drmScheme: String,
      drmLicenseUri: String,
      drmForceDefaultLicenseUri: Boolean,
      drmLicenseRequestHeaders: YailDictionary,
      drmMultiSession: Boolean,
      drmPlayClearContentWithoutKey: Boolean,
      drmSessionForClearContent: Boolean,
      liveTargetOffsetMs: Long,
      liveMinOffsetMs: Long,
      liveMaxOffsetMs: Long,
      liveMinPlaybackSpeed: Float,
      liveMaxPlaybackSpeed: Float

I found this on his GitHub page, he made this extension as OS, I think you can understand this and help me to use that block

GitHub Page:- exoplayer-appinventor/ExoplayerCore.kt at main · zainulhassan815/exoplayer-appinventor · GitHub

No idea man, I’ve never been in the need to use DRM playback, I can’t help you much as I don’t even know links to such videos.

If you want, you can pass the AIA inbox and I’ll test it or you can wait for a more experienced moderator!:ok_hand:

1 Like

Thanks for try to help me. i got it, how to use that blocks by reading the source code of the extension…


It will be helpful for others too, if you will post it here.

Yeah sure, i will post it.

1 Like