Giter Club home page Giter Club logo

player-sdk-native-android's Introduction

❗ Please note this project is deprecated, please see Kaltura Player for Android.


Build Status

Player SDK Native Android

Note: A new version of the Kaltura Player SDK (V3) will be available for beta very soon. The new SDK is fully native and introduces significant performance improvements.

If you are planning to begin a new project based on the SDK, you may want to wait for the new version.

The Kaltura player-sdk-native component enables embedding the kaltura player into native environments. This enables full HTML5 player platform, without limitations of HTML5 video tag API in Android platforms. Currently for Android this enables:

  • Inline playback with HTML controls ( disable controls during ads etc. )
  • Widevine DRM support
  • AutoPlay
  • Volume Control
  • Full player.kaltura.com feature set for themes and plugins
  • HLS Playback
  • DFP IMA SDK

For a full list of native embed advantages see native controls table within the player toolkit basic usage guide.

The Kaltura player-sdk-native component can be embedded into both native apps, and hybrid native apps ( via standard dynamic embed syntax )

Future support will include:

  • PlayReady DRM
  • Multiple stream playback
  • Offline viewing

Architecture Overview

alt text

Quick Start Guide

1. git clone https://github.com/kaltura/player-sdk-native-android.git to the same folder of your app.
2. Add reference to PlayerSDK module from your project:

#####Select settings.gradle and add:

include ':googlemediaframework'
project(':googlemediaframework').projectDir=new File('../player-sdk-native-android/googlemediaframework')

include ':playerSDK'
project(':playerSDK').projectDir=new File('../player-sdk-native-android/playerSDK')

#####Right click on your app folder ->Open Module Settings.

alt text

#####Select Dependencies tab -> click on the + button and choos the playerSDK module: alt text

Now, you are linked to the playerSDK by reference. Be sure that you cloned the playerSDK to the same folder of your project.

Make sure that you cloned the player-sdk-native-android project to the same folder of your project, if you prefer to clone it else where, you should update the settings.gradle.

API Overview

###Loading Kaltura player into Fragment - OVP:


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        if(mFragmentView == null) {
            mFragmentView = inflater.inflate(R.layout.fragment_fullscreen, container, false);
        }

        mPlayerView = (PlayerViewController) mFragmentView.findViewById(R.id.player);
        mPlayerView.loadPlayerIntoActivity(getActivity());

        KPPlayerConfig config = new  KPPlayerConfig("http://cdnapi.kaltura.com", "26698911", "1831271");
        config.setEntryId("1_o426d3i4");
        mPlayerView.initWithConfiguration(config);        mPlayerView.addEventListener(new KPEventListener() {
            @Override
            public void onKPlayerStateChanged(PlayerViewController playerViewController, KPlayerState state) {
                Log.d("KPlayer State Changed", state.toString());
            }

            @Override
            public void onKPlayerPlayheadUpdate(PlayerViewController playerViewController, float currentTime) {
                Log.d("KPlayer State Changed", Float.toString(currentTime));
            }

            @Override
            public void onKPlayerFullScreenToggeled(PlayerViewController playerViewController, boolean isFullscreen) {
                Log.d("KPlayer toggeled", Boolean.toString(isFullscreen));
            }
        });
        return mFragmentView;
    }

###Loading Kaltura player into Fragment - OTT:


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        if(mFragmentView == null) {
            mFragmentView = inflater.inflate(R.layout.fragment_fullscreen, container, false);
        }

        mPlayerView = (PlayerViewController) mFragmentView.findViewById(R.id.player);
        mPlayerView.loadPlayerIntoActivity(getActivity());
        KPPlayerConfig config = null;
        try {
              config = KPPlayerConfig.fromJSONObject(new JSONObject(getConfigJson("123","456","tvpapi_000")));
        } catch (JSONException e) {
              e.printStackTrace();
        }

        mPlayerView.initWithConfiguration(config);        mPlayerView.addEventListener(new KPEventListener() {
            @Override
            public void onKPlayerStateChanged(PlayerViewController playerViewController, KPlayerState state) {
                Log.d("KPlayer State Changed", state.toString());
            }

            @Override
            public void onKPlayerPlayheadUpdate(PlayerViewController playerViewController, float currentTime) {
                Log.d("KPlayer State Changed", Float.toString(currentTime));
            }

            @Override
            public void onKPlayerFullScreenToggeled(PlayerViewController playerViewController, boolean isFullscreen) {
                Log.d("KPlayer toggeled", Boolean.toString(isFullscreen));
            }
        });
        return mFragmentView;
    }

    public String getConfigJson(String mediaID, String uiConfID, String tvpApi) {
     String json = "{\n" +
             "  \"base\": {\n" +
             "    \"server\": \"http://192.168.160.160/html5.kaltura/mwEmbed/mwEmbedFrame.php\",\n" +
             "    \"partnerId\": \"\",\n" +
             "    \"uiConfId\": \"" + uiConfID + "\",\n" +
             "    \"entryId\": \"" + mediaID + "\"\n" +
             "  },\n" +
             "  \"extra\": {\n" +
             "    \"controlBarContainer.hover\": true,\n" +
             "    \"controlBarContainer.plugin\": true,\n" +
             "    \n" +
             "    \"liveCore.disableLiveCheck\": true,\n" +
             "    \"tvpapiGetLicensedLinks.plugin\": true,\n" +
             "    \"TVPAPIBaseUrl\": \"http://tvpapi-stg.as.tvinci.com/v3_9/gateways/jsonpostgw.aspx?m=\",\n" +
             "    \"proxyData\": {\n";

//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 /*4.3*/) {
//            json = json + "\"config\": {\n" +
//                    "                                    \"flavorassets\": {\n" +
//                    "                                        \"filters\": {\n" +
//                    "                                            \"include\": {\n" +
//                    "                                                \"Format\": [\n" +
//                    "                                                    \"dash Main\"\n" +
//                    "                                                ]\n" +
//                    "                                            }\n" +
//                    "                                        }\n" +
//                    "                                    }\n" +
//                    "                                },";
//        }
     json = json + "      \"MediaID\": \"" + mediaID + "\",\n" +
             "      \"iMediaID\": \"" + mediaID + "\",\n" +
             "      \"mediaType\": \"0\",\n" +
             "      \"picSize\": \"640x360\",\n" +
             "      \"withDynamic\": \"false\",\n" +
             "      \"initObj\": {\n" +
             "        \"ApiPass\": \"11111\",\n" +
             "        \"ApiUser\": \"" + tvpApi + "\",\n" +
             "        \"DomainID\": 0,\n" +
             "        \"Locale\": {\n" +
             "            \"LocaleCountry\": \"null\",\n" +
             "            \"LocaleDevice\": \"null\",\n" +
             "            \"LocaleLanguage\": \"null\",\n" +
             "            \"LocaleUserState\": \"Unknown\"\n" +
             "        },\n" +
             "        \"Platform\": \"Cellular\",\n" +
             "        \"SiteGuid\": \"\",\n" +
             "        \"UDID\": \"aa5e1b6c96988d68\"\n" +
             "      }\n" +
             "    }\n" +
             "  }\n" +
             "}\n";
     return json;
 }

###Fetching duration: For fetching the duration of a video, the player must be in READY state:

mPlayerView.addEventListener(new KPEventListener() {
            @Override
            public void onKPlayerStateChanged(PlayerViewController playerViewController, KPlayerState state) {
                Log.d("KPlayer State Changed", state.toString());
                if (state == KPlayerState.READY) {
                    Log.d("Duration", Double.toString(playerViewController.getDurationSec()) );
                }
            }

            @Override
            public void onKPlayerPlayheadUpdate(PlayerViewController playerViewController, float currentTime) {
                Log.d("KPlayer State Changed", Float.toString(currentTime));
            }

            @Override
            public void onKPlayerFullScreenToggeled(PlayerViewController playerViewController, boolean isFullscreen) {
                Log.d("KPlayer toggeled", Boolean.toString(isFullscreen));
            }
        });

DEMO - Better Than Words

You can check out our demo which will help you to better understand our SDK: Kaltura Demos

License and Copyright Information

All player-sdk-native-ios code is released under the AGPLv3 unless a different license for a particular library is specified in the applicable library path

player-sdk-native-android's People

Contributors

antonafa avatar g-kozlov avatar giladna avatar inbaritay avatar itanbp avatar jabberdabber avatar michalradwantzor avatar nissopa avatar noamtamim avatar orenme avatar tehilar avatar tziporaziegler avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

player-sdk-native-android's Issues

Using PlayerViewController in a RecyclerView

Hi,

I want to use the PlayerViewController in a RecyclerView that holds 2 ViewHolder in which i added the PlayerViewController.

The idea is to create and initialize the PlayerViewController only once when creating the ViewHolder
and then change the entryId when i use the ViewHolder for other content.

This shall reduce the preparation time for the video since i do not need to initialize the player again and again (so the customer care support told me).

So my question is:

How can I change the entryID of an existing instance of PlayerViewController, resp. of the KPPlayerConfig ?

Failed to resolve dependencies

I had a problem while adding the PlayerSDK library into our project. I was getting "Failed to resolve" while compiling com.google.ads.interactivemedia.v3 and com.googlecode.android-query on playerSDK.gradle.

My fix was to add the following to playerSDK.gradle:

repositories{
    mavenCentral()
    jcenter()
}

Is there any way for resolving this? Am I doing something wrong?

One option would be to include this in future versions so that others don't have the same problems as I did.

Incorrect handle of device rotating

Problem

I noticed the problem related to device orientation changes, the video in landscape mode doesn't fill full available space, Example how it looks like on my device:

I have used official example kalturaPlay from this repo.

Device:
Sony Z3 Dual, OS: Android 5.1.1

Could you please help me with this?

Possible workarounds

  1. Remove orientation from /manifest/activity/android:configChanges

    Disadvantage:

    • 2-4 sec delay after rotation, cursor position always dropped to 0
  2. Initially set videoPlayer size to landscape, update FullscreenFragment.showPlayerView()

    public void showPlayerView() {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
        mPlayerView.setVisibility(RelativeLayout.VISIBLE);
        Point size = new Point();
        getActivity().getWindowManager().getDefaultDisplay().getSize(size);
    
        // workaround for portrait
        if (size.x < size.y) {
            size.x = size.x ^ size.y;
            size.y = size.x ^ size.y;
            size.x = size.x ^ size.y;
        }
    
        mPlayerView.setPlayerViewDimensions(size.x, size.y, 0, 0);
    }
    

    Disadvantage:

    • almost good, but first 2-3 sec, players looks bad then it automatically refreshed and looks ok

  3. Make Activity landscape only in manifest, if this acceptable

Chromecast is not working

Version used: v2.3.0.rc4
Environment: Nexus 5, Android 6.0.1
Steps to reproduce: just start player when chromecast is available

Stacktrace:
02-16 13:05:43.187 3941-3941/* I/chromium: [INFO:CONSOLE(7)] "setAttribute", source: https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&* (7) 02-16 13:05:43.187 3941-3941/* I/chromium: [INFO:CONSOLE(7)] "chromecastAppId,FFCC6D19", source: https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&* (7) 02-16 13:05:43.188 3941-3941/* D/KControlsView: shouldOverrideUrlLoading: js-frame:setAttribute:0:%5B%22chromecastAppId%22%2C%22FFCC6D19%22%5D 02-16 13:05:43.197 3941-3941/* E/KRouterManager: Error parsing json org.json.JSONException: Value FFCC6D19 of type java.lang.String cannot be converted to JSONArray at org.json.JSON.typeMismatch(JSON.java:111) at org.json.JSONArray.<init>(JSONArray.java:96) at org.json.JSONArray.<init>(JSONArray.java:108) at com.kaltura.playersdk.cast.KRouterManager.initialize(KRouterManager.java:66) at com.kaltura.playersdk.PlayerViewController.setAttribute(PlayerViewController.java:762) at java.lang.reflect.Method.invoke(Native Method) at com.kaltura.playersdk.PlayerViewController.handleHtml5LibCall(PlayerViewController.java:587) at com.kaltura.playersdk.KControlsView$CustomWebViewClient.shouldOverrideUrlLoading(KControlsView.java:143) at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:325) at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:266) at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:37) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 02-16 13:05:43.197 3941-3941/* D/chromecast.initialize: FFCC6D19

mediaProxy.preferedFlavorBR doesn't work in Android WebView

Problem

Cannot change quality of video by using mediaProxy.preferedFlavorBR

Expected result

Quality doesn't change

Device details

Samsung S2 (Android 5.1.1);
Xiaomi mi4i(Android 6.0.1);

Android Player SDK Version

Kaltura SDK version: '2.5.4'

HTML5 Player Version

Version: v2.7
wid = 1858191
uiconf_id = 30743062
entry_id = 0_m3ecbkoa

Logs:

Logs: http://codepad.org/4vNkTVZt

Steps to reproduce

Use code below

Code

private PlayerViewController getPlayer() {
    if (mPlayer == null) {
        mPlayer = (PlayerViewController)findViewById(R.id.player);
        mPlayer.loadPlayerIntoActivity(this);
        KPPlayerConfig config = new KPPlayerConfig("http://cdnapi.kaltura.com/html5/html5lib/v2.7/mwEmbedFrame.php", "30743062", "1858191").setEntryId("0_m3ecbkoa");
        config.setAutoPlay(true);
        mPlayPauseButton.setText("Pause");
        config.addConfig("mediaProxy.preferedFlavorBR", "900"); // this line doesn't change quality
        mPlayer.initWithConfiguration(config);
        if (mCastProvider != null) {
            mPlayer.setCastProvider(mCastProvider);
        }
        mPlayer.setOnKPErrorEventListener(this);
        mPlayer.setOnKPPlayheadUpdateEventListener(this);
        mPlayer.setOnKPFullScreenToggeledEventListener(this);
        mPlayer.setOnKPStateChangedEventListener(this);
    }
    return mPlayer;
}

Sample

https://dl.dropboxusercontent.com/u/32611161/BasicPlayerDemo.zip

Kaltura SDK generate URL (for code above) http://cdnapi.kaltura.com/html5/html5lib/v2.7/mwEmbedFrame.php/p/1858191/sp/185819100/embedIframeJs/uiconf_id/30743062/entry_id/0_m3ecbkoa?iframeembed=true&wid=_1858191&uiconf_id=30743062&entry_id=0_m3ecbkoa&flashvars%5BautoPlay%5D=true&flashvars%5BmediaProxy.preferedFlavorBR%5D=900#localContentId=&nativeSdkDrmFormats=&nativeSdkAllFormats=dash,mp4,hls

But, when i use this URL in browser on desktop or phone default browser, it works, I even can change flashvars%5BmediaProxy.preferedFlavorBR%5D to another value it works

How to use Widevine DRM support

Hello there,
it is written in the README.md that the player-sdk-native-android support Widevine DRM.
Can you provide an example on how to implement it?
It seems there is not examples in KalturaDemos directory regarding this.
Thank you!

config.addConfig("mediaProxy.preferredFlavorBR", "600"); doesn't work

Problem

Cannot change quality of video by using config.addConfig("mediaProxy.preferredFlavorBR", "600")

Expected result

Quality doesn't change, always it has value is Auto

Device details

Samsung S2 (Android 5.1.1);
Xiaomi mi4i(Android 6.0.1);

Android Player SDK Version

Kaltura SDK version: '2.5.18'

HTML5 Player Version

Version: v2.45
wid = 1858191
uiconf_id = 35732951
entry_id = 1_900w36sk

Logs

Logs http://codepad.org/oaVMRjk5

Steps to reproduce

Use code below

Code

KPPlayerConfig config = new KPPlayerConfig("http://cdnapi.kaltura.com",
                "35732951", "1858191").setKS(ks).setEntryId("1_900w36sk");
        config.setAutoPlay(false);
        config.addConfig("controlBarContainer.plugin", "true");
        config.addConfig("topBarContainer.plugin", "true");
        config.addConfig("autoPlay", "false");
        config.addConfig("largePlayBtn.plugin", "true");
        config.addConfig("loadingSpinner.plugin", "true");
        config.addConfig("sourceSelector.plugin", "true");

        config.addConfig("sourceSelector.displayMode", "bitrate");
        config.addConfig("mediaProxy.preferredFlavorBR", "600");

        kalturaPlayer.initWithConfiguration(config);
        kalturaPlayer.registerReadyEvent(new VideoReadyListener());

Sample

this screenshot kaltura player from my app:
https://dl.dropboxusercontent.com/u/32611161/Screenshot_2016-07-20-10-28-20.png

Kaltura SDK generate URL:
"kWidget: Kaltura HTML5 Version: 2.45 ( iframe ) ", source: http://cdnapi.kaltura.com/html5/html5lib/v2.45/mwEmbedLoader.php?&wid=_1858191&uiconf_id=35732951&p=1858191&iframeServer=true

I changed mediaProxy.preferredFlavorBR different values: 100, 300, 900, 4000.
But quality always have value: Auto

Also, AutoPlay always works, even when i use
config.setAutoPlay(false); or config.addConfig("autoPlay", "false");
Should I create another ticket for autoplay problem?

Initial SDK integration issues

Error:Execution failed for task ':playerSDK:transformNative_libsWithSyncJniLibsForRelease'.

java.io.FileNotFoundException: /Users/aaaa/AndroidWorkplace/MediaShare/playerSDK/build/intermediates/bundles/release/jni/lib/armeabi/libHLSPlayerSDK.so (No such file or directory)

config.addConfig("mediaProxy.preferredFlavorBR", "700"); still doesn't work

Problem

Cannot change quality of video by using config.addConfig("mediaProxy.preferredFlavorBR", "700")

Expected result

Quality doesn't change, always it has value is Auto

Device details

Samsung S2 (Android 5.1.1);
Xiaomi mi4i(Android 6.0.1);

Android Player SDK Version

Kaltura SDK version: '2.5.21.2'
I tried version 2.5.21 and 2.5.21.1

HTML5 Player Version

Version: v2.45
wid = 1858191
uiconf_id = 35732951
entry_id = 0_86yighs7

Steps to reproduce

Use code below

Logs

http://codepad.org/tu6e3sKy

Code

KPPlayerConfig config = new KPPlayerConfig("http://cdnapi.kaltura.com",
                "35732951", "1858191").setEntryId("0_86yighs7");
        config.addConfig("controlBarContainer.plugin", "true");
        config.addConfig("topBarContainer.plugin", "true");
        config.addConfig("largePlayBtn.plugin", "true");
        config.addConfig("loadingSpinner.plugin", "true");
        config.addConfig("sourceSelector.plugin", "true");

        config.addConfig("sourceSelector.displayMode", "bitrate");
        config.addConfig("mediaProxy.preferredFlavorBR", "700");

        kalturaPlayer.initWithConfiguration(config);
        kalturaPlayer.registerReadyEvent(new VideoReadyListener());

Sample

this screenshot kaltura player from my app:
https://dl.dropboxusercontent.com/u/32611161/Screenshot_2016-07-26-11-37-11.png

Kaltura SDK generate URL:
"kWidget: Kaltura HTML5 Version: 2.45 ( iframe ) ", source: http://cdnapi.kaltura.com/html5/html5lib/v2.45/mwEmbedFrame.php/p/1858191/uiconf_id/35732951/entry_id/0_86yighs7?entry_id=0_86yighs7&wid=_1858191

I changed mediaProxy.preferredFlavorBR different values: 100, 300, 900, 4000.
But quality always have value: Auto
In logs I see the line


07-26 11:34:35.551 30471-30471/com.hilti.mobile.hiltipulse D/TracksManager: switchTrackByBitrate : VIDEO preferredBitrateKBit : 700
07-26 11:34:35.555 30471-30471/com.hilti.mobile.hiltipulse D/TracksManager: preferred bitrate selected = TrackFormat{index=1, trackType=VIDEO, trackId='0', bitrate=686080, channelCount=-1, sampleRate=-1, height=360, width=640, mimeType='video/avc', trackLabel='640x360, 0.69Mbit, 0', language='null', adaptive=false}
07-26 11:34:35.555 30471-30471/com.hilti.mobile.hiltipulse D/TracksManager: switchTrack for VIDEO newIndex = 1

Not able to start streaming videos

The current flow takes the steps:

We can retrieve the uiConfId and partnerId
We can start the player using a new instance of PlayerViewController, Including the params to instantiate it:
Domain: https://cdnapisec.kaltura.com
uiConfId
partnerId

Including the config params:
entryId
ks (Kaltura Session Id)

And call the method initWithConfiguration on PlayerViewController. The player is displayed on the screen, but it's not possible to play it.

Analyzing the logs, we checked an error with network connection (even though the device's connection is ok):

I/NuCachedSource2: currently network is disconnected (error -1), it will be reconnected in 10 retries
E/NuCachedSource2: source returned error -1, 10 retries left

And it goes until the 10th retry, when an exception is thrown:

E/ExoPlayerImplInternal: Internal track renderer error.
com.google.android.exoplayer.ExoPlaybackException: java.io.IOException: Failed to instantiate extractor.
at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:154)
at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:145)
at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:283)
at com.google.android.exoplayer.ExoPlayerImplInternal.prepareInternal(ExoPlayerImplInternal.java:272)
at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:201)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:145)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

Caused by: java.io.IOException: Failed to instantiate extractor.
at android.media.MediaExtractor.nativeSetDataSource(Native Method)
at android.media.MediaExtractor.setDataSource(MediaExtractor.java:143)
at android.media.MediaExtractor.setDataSource(MediaExtractor.java:117)
at com.google.android.exoplayer.FrameworkSampleSource.prepare(FrameworkSampleSource.java:136)
at com.google.android.exoplayer.SampleSourceTrackRenderer.doPrepare(SampleSourceTrackRenderer.java:54)
at com.google.android.exoplayer.TrackRenderer.prepare(TrackRenderer.java:110)
at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:281)

One of the many retries attempts logs:

I/NuCachedSource2: readAt: mIsMetadataRetriever == 0
V/NuCachedSource2: onRead
D/NuCachedSource2: readInternal - late!!!
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onRead
V/NuCachedSource2: readInternal offset 0 size 4
I/NuCachedSource2: seek : hint hits! 0 -> mAVminOffset = 0
V/NuCachedSource2: deferring read
V/NuCachedSource2: onFetch
V/NuCachedSource2: fetchInternal
V/MediaHTTP: reconnectAtOffset offset=0
V/MediaHTTP: connection established
E/NuCachedSource2: source returned error -1, 2 retries left
E/NuCachedSource2: source returned error -1, 2 retries left

The video never starts streaming, even though we are able to play the Demo video, following the same configuration as below:

// Kaltura Player Demo Configuration
mConfig = new KPPlayerConfig("http://kgit.html5video.org/tags/v2.39.rc8/mwEmbedFrame.php", "32855491", "1424501");
mConfig.setEntryId("1_32865911");

What could be wrong?

NullPointerException thrown from PlayerViewController.removeKPlayerEventListener

Hi,

I'm using v2.5.4 of the player-sdk-native-android.

Would it be possible to put a check inside of PlayerViewController.removeKPlayerEventListener for when mPlayerEventsHash is NULL? This can happen if removeKPlayerEventListener is called without previously calling addKPlayerEventListener.

Calling removeKPlayerEventListener without having previously called addKPlayerEventListener causes a NullPointerException to be thrown.

Thank you.

Player Seek

I am using Kaltura SDK android v.2.5.4 and it works fine. However i wonder if i can seek to a specific video position. I couldnt find any doc about it. Tried some random like below but it wont work:
mPlayerView.sendNotification("doSeek", "300");

How can i achieve that?

Pause after replay via native call

After a video ends, If I call kalturaVideoPlayer.getMediaControl().replay(); the video will restart and immediately pause.
I'm seeing the same behaviour in your sdk semo project (hitting replay after video end in the BasicPlayerDemo app).

Tested on an LG-G4 and Nexus 5, with player version 2.46 (2.47 and 2.48 aren't behaving any better).

Unable to play Kaltura videos.

Hi, I'm trying to integrate Kaltura player to enable playing Kaltura videos within our Android app. I'm trying out this url : http://cdnbakmi.kaltura.com/p/303932/sp/30393200/serveFlavor/flavorId/0_jv7h719f/name/0_jv7h719f.mp4

Code where I'm using Kaltura SDK has been attached.

Error I get is this :
`09-20 12:29:07.495 20277-21802/in.til.popkorn E/chromium: [ERROR:ffmpeg_demuxer.cc(365)] Format conversion failed.
09-20 12:29:07.505 20277-21802/in.til.popkorn E/chromium: [ERROR:ffmpeg_demuxer.cc(1510)] OnReadFrameDone result=-1094995529 IsMaxMemoryUsageReached=0
09-20 12:29:08.675 20277-21802/in.til.popkorn E/chromium: [ERROR:ffmpeg_demuxer.cc(365)] Format conversion failed.
09-20 12:29:08.675 20277-21802/in.til.popkorn E/chromium: [ERROR:ffmpeg_demuxer.cc(1510)] OnReadFrameDone result=-1094995529 IsMaxMemoryUsageReached=0

                                                      [ 09-20 12:29:08.685 20560:23347 E/         ]
                                                      not in avi mode`

I have almost no experience working with video players, codecs or media playback, so it's a bit difficult to exactly understand the problem. Hence, would request Kaltura devs to help me in this.
Also, I would like to know where should I add administrator secret for playing out Kaltura videos in app.

VideoStoriesFragment.zip

SDK doesn't work with Google Service

To enable Google Services (such as Google Signin or Google Analytics), Google requires adding this classpath 'com.google.gms:google-services:1.5.0-beta2' into project-level gradle build file. The documentation can be found here: https://developers.google.com/identity/sign-in/android/start-integrating

After adding this classpath, the project won't build successfully, the error shows:
Error:Execution failed for task ':playerSDK:transformNative_libsWithSyncJniLibsForDebug'.

java.io.FileNotFoundException: /player-sdk-native-android/playerSDK/build/intermediates/bundles/debug/jni/lib/armeabi/libHLSPlayerSDK.so (No such file or directory)

To reproduce this error, simply add the following line to your example project's project level gradle and rebuild the project:
classpath 'com.google.gms:google-services:1.5.0-beta2'

There are other people also complaining the same problem on StackOverflow: http://stackoverflow.com/questions/33959763/gradle-dependency-kaltura-player-google-analytics-incompatibility-android

Video is not shown but audio is being streamed successfully.

I followed the steps in http://knowledge.kaltura.com/kaltura-player-sdk-android however, when I press the play icon video starts with a black screen.

By the way, in the link above there is a method called "addComponents" but it does not exist in the library. What i found is a "setComponents" method:

mPlayerView.setComponents("http://cdnapi.kaltura.com/p/1937571/sp/193757100/embedIframeJs/uiconf_id/29215882/partner_id/1937571?iframeembed=true&playerId=kaltura_player_1432632971&entry_id=1_9ukxi0pe&flashvars[akamaiHD.loadingPolicy]=preInitialize&flashvars[akamaiHD.asyncInit]=true&flashvars[streamerType]=hdnetwork");

Above is the streaming option. There is another problem in the progress option: When I press play, video does not play at all and freezes at the first scene.

Closed caption frozen after pause/restart the player

The steps to reproduce it:
1- Play any video with closed caption enabled;
2- Press home button (the video will stop playing);
3- Go back to the app in which the video has been playing (it will start loading and playing again)
4- The closed caption will not be displayed or will be frozen (either one or another).
Disabling and enabling the closed caption won't make it work again.

Can't play this video

Hello,
I am implementing Kaltura player sdk in one of my project for playing live stream data. I have downloaded this library project and followed steps given in this http://knowledge.kaltura.com/kaltura-player-sdk-android link . I am getting "Can't play this video" dialog. While the video given in the link is playing fine in browser.
getting this error "MediaPlayer(20483): error (1, -1004)"
Please help me if I am missing something.

HOWTO: SDK integration as compiled version

I was looking for an integration solution that worked without having the repository cloned to the same working directory. I need to run automated builds on a CI and also need some version control.

It's possible using jitpack. Add following to your app/build.gradle:

dependencies {
    compile 'com.github.kaltura.player-sdk-native-android:playerSDK:v2.5.4'
    compile 'com.github.kaltura.player-sdk-native-android:googlemediaframework:v2.5.4'
}

and this in your root level build.gradle:

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://jitpack.io" }
    }
}

Maybe you can add this to your README

Tried to play video that exceeded baseline profile (77 > 66), aborting!

I'm getting this error while the same embed is working fine with browser:
01-28 16:23:01.376 27724-28016/com.kaltura.kalturaplayertoolkit I/bool HLSPlayer::InitSources()﹕ Validating H.264 AVC profile level...
01-28 16:23:01.376 27724-28016/com.kaltura.kalturaplayertoolkit E/bool HLSPlayer::InitSources()﹕ Tried to play video that exceeded baseline profile (77 > 66), aborting!
01-28 16:23:01.376 27724-28016/com.kaltura.kalturaplayertoolkit E/void HLSPlayer::PostError(int, char const*)﹕ Posting error -106 : Tried to play video that exceeded baseline profile. Aborting.

Regards

stretching the video inside the player

Hi,

We would like to be able to stretch and/or change the size of the video inside the player. With or without keeping the aspect ratio (doesn't matter at this point).

Is there a way to do this?

Thanks!

Can't find a way to stop videos

I'm trying to stop videos when leaving screens, but I can't find a clean way to do it.

If I call the method removePlayer() from PlayerViewController (as we do in iOS), app will crash after 3 or 4 seconds with this log:

...
12-03 14:52:22.697 19275-19275/com.carbonmediagroup.carbontv D/OverrideUrl: js-frame:play:0:%5B%5D
12-03 14:52:22.698 19275-19275/com.carbonmediagroup.carbontv W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
12-03 14:52:22.698 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.kaltura.playersdk.helpers.KStringUtilities.isMethodImplemented(KStringUtilities.java:171)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.kaltura.playersdk.PlayerViewController.handleHtml5LibCall(PlayerViewController.java:504)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.kaltura.playersdk.KControlsView$CustomWebViewClient.shouldOverrideUrlLoading(KControlsView.java:132)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:327)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:266)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:37)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at android.os.Looper.loop(Looper.java:135)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5343)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
12-03 14:52:22.699 19275-19275/com.carbonmediagroup.carbontv W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
12-03 14:52:22.701 19275-19275/com.carbonmediagroup.carbontv A/chromium: [FATAL:jni_android.cc(249)] Check failed: false. Please include Java exception stack in crash report
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: Chrome build fingerprint:
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: 1.0
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: 1
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: 45012863-7d3b-4c30-8ccf-e65394c57d85
12-03 14:52:22.980 19275-19275/com.carbonmediagroup.carbontv W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
12-03 14:52:22.981 19275-19275/com.carbonmediagroup.carbontv A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 19275 (agroup.carbontv)

what I´m doing right now is calling this methods to stop the video:

playerViewController.removeEventListener(this);
playerViewController.releaseAndSavePosition();

but it freezes the screen (UI thread) for a couple of seconds, and some times it displays the "android not responding" message after 5 seconds.

No source Video was found

I'm using kaltura SaaS to store videos but on some videos I'm getting :

"no source video was found"

Is this an issue with kaltura player ?

Kaltura SDK version: '2.5.17.0'
Android device : Nexus 5X
Android version : 6.0.1

I tried also using inlinePlayerDemo from KalturaDemos with these values :

        KPPlayerConfig config = new KPPlayerConfig("http://www.kaltura.com", "35420611", "2092431").setEntryId("1_z1saaxiz");

You can see in the next image that I'm getting the same error

device-2016-09-18-232915

Please let me know if you need more info.

Test hook fix

Please do not close this for a while. Testing to make sure the auto reply only happens once.

KHLSPlayer does not recover itself after pause/restart

Even though you have an implementation of recoverPlayer on KHLSPlayer, it's not possible to recover after pause/restart the fragment or activity.

That's what I've found:
The selected player has a recover player method, obviously to recover after onPause/onResume

@Override
    public void recoverPlayer() {
        mPlayer.recoverRelease();
    }

The method references HLSPlayerViewController, which we cannot change (it's part of hlsplayersdk). It just save stuff on shared preferences and then we can retrieve things to set again

@Override
    public void recoverRelease()
    {
        // Deserialize postion, playstate, and url
        SharedPreferences sp = getContext().getSharedPreferences("hlsplayersdk", Context.MODE_PRIVATE);
        mLastUrl = sp.getString("lasturl", "");
        mInitialPlayState = sp.getInt("playstate", 0);
        mStartupState = sp.getInt("startupstate", STARTUP_STATE_WAITING_TO_START);
        // ... more stuff here
        if (mRestoringState)
        {

            Thread t = new Thread( new Runnable()
            {
                @Override
                public void run() {

                    Log.i("VideoPlayer UI", " -----> Play " + mLastUrl);
                    setVideoUrl(mLastUrl, true, mInitialQualityLevel);
                    if (mInitialPlayState == STATE_PLAYING || mInitialPlayState == STATE_PAUSED) // The pause will happen immediately after playback resumes in initiatePlay()


> Here we have a call to play state again, not a big deal, but...
                        play();
                }
            });
            t.start();

This guy calls another guy, postToInterface

public void play() {

        postToInterfaceThread(new Runnable()
        {
            public void run()
            {
                requestState(FSM_PLAY);

            }
        });

    }

This guy calls another guy, getInterfaceThreadHandler

public static void postToInterfaceThread(Runnable runnable)
    {
        Handler handler = getInterfaceThreadHandler();
        if (handler != null)
        {
            handler.post(runnable);
        }
    }

This here should not be null and it's not once we start playing (first time). But it is after onPause/onResume.

public static Handler getInterfaceThreadHandler()
    {
        return (getInterfaceThread() != null) ? getInterfaceThread().getHandler() : null;
    }

This currentController is null

public static HLSUtilityThread getInterfaceThread()
    {
        return currentController != null ? currentController.mInterfaceThread : null;
    }

I've tested with your new release version and it's not working properly.
Do you guys can take a look at it?

Wrong video playing. Caching or cleanup issue?

I'm trying to set up a list of videos.
I recently integrated the Kaltura android sdk and I'm able to play video via the PlayerViewerController.
I have a list view of videos.
Selecting the initial list item will play the expected video.
However, when I switch to another video... the first selected video is shown... as if it were cached. If I wait a period of time, the correct video will be shown when selected.

Is there some cleanup I need to do when closing the first video?

private PlayerViewController mPlayerView;

@Override
protected void initLocalActivity() {
    setContentView(R.layout.activity_library_item_video_kaltura);

    mPlayerView = (PlayerViewController) findViewById(R.id.pvcLibaryVideoKaltura);
    mPlayerView.setActivity(this);

    // select video
    String videoId = getIntent().getExtras().getString(KeyManager.KEY_LIBRARY_ITEM, "not found");
    Log.d(TAG, TAG + " video id: " + videoId);

    if (videoId.equalsIgnoreCase("0")) {
        mPlayerView.addComponents("1768201", "0_nge2sq8u", this);

    } else if (videoId.equalsIgnoreCase("1")) {
        mPlayerView.addComponents("1768201", "1_uwp3q4jk", this);

    } else if (videoId.equalsIgnoreCase("2")) {
        mPlayerView.addComponents("1768201", "1_kejmejot", this);
    } else {
        mPlayerView.addComponents("1768201", "0_fnioliix", this);
    }

}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Log.d(TAG, TAG + " back pressed.");
    mPlayerView.stop();
    mPlayerView = null;
    finish();

}

}

Player Loading Time

Hi ,
The player loading time is very poor.Its taken approx more than 5 seconds to load the video.
Is there any optimization that can be done or any work around ?

Player not working on Android 4.1, 4.2, 4.3

Version used: v2.3.0.rc4
Environment: Galaxy Nexus, Android 4.3, Galaxy Core Prime, Android 4.2.2
Steps to reproduce: start player

Player keeps logging and never starts:
02-16 15:12:06.156 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.226 25748-25748/* E/Web Console: Uncaught Error: Error calling method on NPObject. at null:1 02-16 15:12:06.234 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.265 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.367 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.468 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.539 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.609 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.648 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.679 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.750 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.836 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:06.906 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content! 02-16 15:12:07.008 25748-25748/* W/PicturePileLayerContent: Warning: painting PicturePile without content!

sometimes:
02-16 14:23:02.882 1004-1004/* I/Web Console: flavorsListChanged at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:02.882 1004-1004/* I/Web Console: null at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:02.882 1004-1004/* W/Web Console: The page at about:blank displayed insecure content from js-frame:flavorsListChanged:0:%5B%5D. at null:1 02-16 14:23:02.930 1004-1004/* I/Web Console: notifyLayoutReady at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:02.930 1004-1004/* I/Web Console: null at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:02.930 1004-1004/* W/Web Console: The page at about:blank displayed insecure content from js-frame:notifyLayoutReady:0:%5B%5D. at null:1 02-16 14:23:03.050 1004-1004/* I/Web Console: setAttribute at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:03.050 1004-1004/* I/Web Console: chromecastAppId,FFCC6D19 at https://cdnapisec.kaltura.com/html5/html5lib/v2.39/load.php?debug=false&lang=en&modules=acCheck%2CacPreview%2CairPlay%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cplayerjs%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2Ctheme%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.AkamaiMediaAnalytics%2CEmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPlayersJsReceiver%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160117T074201Z&*:7 02-16 14:23:03.050 1004-1004/* W/Web Console: The page at about:blank displayed insecure content from js-frame:setAttribute:0:%5B%22chromecastAppId%22%2C%22FFCC6D19%22%5D. at null:1

No vdeo, only sound

Hello,

I'm trying to write a CoronaSDK plugin using the Kaltura player. I've managed to load the player and load a video, but I only see the controls and hear the sound.

I use this code to add Kaltura to Corona:

public int show(LuaState L) {+ // Fetch a reference to the Corona activity. // Note: Will be null if the end-user has just backed out of the activity. CoronaActivity activity = CoronaEnvironment.getCoronaActivity(); if (activity == null) { return 0; } // Fetch the first argument from the called Lua function. String the_id = L.checkString( 1 ); if ( null == the_id ) { the_id = "1_sf5ovm7u"; } // Create web view on the main UI thread. if (activity != null) { final String video_id = the_id; activity.runOnUiThread(new Runnable() { @Override public void run() { // Fetch a reference to the Corona activity. // Note: Will be null if the end-user has just backed out of the activity. CoronaActivity activity = CoronaEnvironment.getCoronaActivity(); if (activity == null) { return; } if ( null == mPlayerView ) { mPlayerView = new PlayerViewController(activity); mPlayerView.loadPlayerIntoActivity(activity); CoronaEnvironment.getCoronaActivity().getOverlayView().addView( mPlayerView ); } KPPlayerConfig config = new KPPlayerConfig("http://cdnapi.kaltura.com", "29030452", "1868701"); config.setEntryId(video_id); mPlayerView.initWithConfiguration(config); } } ); } return 0; }

What am I missing here?
Thanks,
Arthur Schenk

Video player poor performance

Version used: v2.3.0.rc4
Environment: Nexus 5, Android 6.0.1, Galaxy Nexus, Android 4.3, Samsung Galaxy S3, Android 4.4.4
Steps to reproduce: start player

Video loading time on Android is ~10 times slower than on iOS.
Even on your demo app loading video takes at least ~10 seconds.
Is there any chance this will improve in feature releases?
Is there anything we can do to improve player performance?

Video image is not hiding after player starts

Version used: v2.3.0.rc4
Environment: Nexus 5, Android 6.0.1
Steps to reproduce: start player

Video image will be hidden only after clicking player surface or rotating the device.
It's working ok on previous Android versions (4.2, 4.3)

Can not seek

I've tried with release 1.7.
When video is playing, can not seek to desire position in video.
Someone please take a look & give me a guide to fix.

Thanks,

Tu

Player time position

Hello,
I have implemented the player pretty much exactly like your example and it works great.
But for some reason, when switching to fullscreen and back, the player stops, reloads, and starts the video from the beginning.

This is pretty annoying, especially in long videos or when there's an preroll before the video (it plays the preroll again as well).
Any chance there's a way of preventing this? Having the video just keep playing is ideal, but a pause-reload-resume from current position will also be fine.

And another question, I tried to use the "addKPlayerEventListener" method to register for "timeupdate" events and it seems to work, but the "body" object is always null... Any way of fixing this?

Thanks!!

Widevine Classic is not supported- Android

I am using the Android 6.0 and the sdk is returning the following issue,

Java.Lang.UnsupportedOperationException: Widevine Classic is not supported
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

it may not support Widevine in new versions of android, how can I solve this?

webservice and parsing response creates lag

Hi,I am new to kaltura integrated demoApplication and wrote code i am using kaltura client library to make network calls and fetching response but it's not desired (As am loading data into viewpager) i am little bewildered why kaltura still using Xml response and Xml parsing and making network calls in asynctask.I couldn't find the scope to use retrofit and Rx for network . Could you guys help or tel me the correct way of using kaltura Sdk if m not heading in correct way

Resuming from no network

Hi guys,
I'm trying to handle correctly a flow where the player was initialized with an entryId, but there was no network.
It looks like the player fires events up to LOADED in this case, and the spinner remains on screen. fine.

Now when the network connection returns, how do I get the player to start?
calling resumePlayer() or getMediaControl().start() did not work. Also tried calling changeMedia for that same entryId. Nothing happens.

I'm using sdk version 2.5.29 and embedFrame v2.48.rc3.
uiconfid 34580511 and partner 777882.

Thanks,
Imri

StringIndexOutOfBoundsException in BroswerActivity

You get this error when you try to use sharing menu in player.
I have tried many devices and I get this error in each one of them.

Kaltura player sdk Version : 2.5.17

Error Exception :

09-22 10:15:13.895 1813-1813/MY_PACKAGE.debug E/AndroidRuntime: FATAL EXCEPTION: main
              Process: MY_PACKAGE.debug, PID: 1813
              java.lang.RuntimeException: Unable to start activity ComponentInfo{MY_PACKAGE.debug/com.kaltura.playersdk.BrowserActivity}: java.lang.StringIndexOutOfBoundsException: length=0; index=0
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
               Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=0
                  at java.lang.String.charAt(Native Method)
                  at android.graphics.Color.parseColor(Color.java:219)
                  at com.kaltura.playersdk.BrowserActivity.onCreate(BrowserActivity.java:31)
                  at android.app.Activity.performCreate(Activity.java:6251)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5417) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Videos not loading on Galaxy s6

When using a Galaxy S6 with Android 6.0.1
The player is firing the following error in the log and not loading -

D/KControlsView: Uncaught SyntaxError: missing ) after argument list at http://kgit.html5video.org/tags/v2.48.rc3/load.php?debug=false&lang=en&modules=Hlsjs%2CacCheck%2CacPreview%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2CkAnalony%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cpolyfill_Array_filter%2Cpolyfill_Array_forEach%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.EmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseScreen%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style%7Cvtt.js&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160907T110145Z&*:14
09-22 14:09:51.681 13758-13766/

The difference from other devices seems to be the date in the end of the url. Here's a log from an LG-G4:
http://kgit.html5video.org/tags/v2.48.rc3/load.php?debug=false&lang=en&modules=Hlsjs%2CacCheck%2CacPreview%2Cbase64_decode%2Cbase64_encode%2Cchromecast%2Cclass%2CclosedCaptions%2CcontrolBarContainer%2CcurrentTimeLabel%2CdurationLabel%2CfullScreenBtn%2Cid3Tag%2CkAnalony%2Ckdark%2CkeyboardShortcuts%2ClargePlayBtn%2CliveAnalytics%2CliveStream%2CmatchMedia%2CmorePlugins%2CnativeBridge%2CplayPauseBtn%2Cpolyfill_Array_filter%2Cpolyfill_Array_forEach%2CqualitySettings%2CreportError%2Cscreenfull%2Cscrubber%2CsideBarContainer%2CsourceSelector%2CstatisticsPlugin%2CtopBarContainer%2Cutf8_encode%2CvolumeControl%7Cjquery.client%2Ccolor%2Ccookie%2Cdebouncedresize%2ChoverIntent%2CmessageBox%2CmwEmbedUtil%2CmwExtension%2CnaturalSize%7Cjquery.ui.core%2Cmouse%2Cposition%2Cslider%2Ctooltip%2CtouchPunch%2Cwidget%7Cmediawiki.Uri%2CUtilitiesTime%2CUtilitiesUrl%2Cclient%2CjqueryMsg%2Ckmenu%2Clanguage%2Cutil%7Cmediawiki.util.tmpl%7Cmw.EmbedPlayer%2CEmbedPlayerImageOverlay%2CEmbedPlayerKplayer%2CEmbedPlayerNative%2CEmbedPlayerNativeComponent%2CEmbedTypes%2CKAnalytics%2CKBaseComponent%2CKBasePlugin%2CKBaseScreen%2CKBaseSmartContainer%2CKCuePoints%2CKDPMapping%2CKEntryLoader%2CKWidgetSupport%2CKalturaIframePlayerSetup%2CMediaElement%2CMediaPlayer%2CMediaPlayers%2CMediaSource%2CPlayerElement%2CPlayerElementFlash%2CPlayerElementHTML%2CPluginManager%2CTextSource%2CajaxProxy%7Cmw.Language.names%7Cmw.MwEmbedSupport.style%7Cvtt.js&pskwidgetpath=..%2Fkwidget-ps%2F&skin=no-theme&version=20160907T110145Z&

I'm using sdk version 2.5.29 and embedFrame v2.48.rc3.
uiconfid 34580511 and partner 777882.
Any ideas?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.