Giter Club home page Giter Club logo

castvideos-android's People

Contributors

alexbirkett avatar barnhill avatar c0d3base avatar gomez-andres avatar jtromo avatar meihua avatar norulesjustfeels 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  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  avatar

castvideos-android's Issues

Crash app if google play service not installed or too old

I got log when run and crash

Caused by com.google.android.gms.internal.zzsb$zza
com.google.android.gms.internal.zzsb.zza (Unknown Source)
com.google.android.gms.internal.zzni.zzbg (Unknown Source)
com.google.android.gms.internal.zzni.zza (Unknown Source)
com.google.android.gms.cast.framework.CastContext.<init> (Unknown Source)
com.google.android.gms.cast.framework.CastContext.getSharedInstance (Unknown Source)
com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.<init> (Unknown Source)
com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView (Unknown Source)
android.support.v4.app.Fragment.performCreateView (Fragment.java:1974)
android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1036)
android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1230)
android.support.v4.app.FragmentManagerImpl.addFragment (FragmentManager.java:1332)
android.support.v4.app.FragmentManagerImpl.onCreateView (FragmentManager.java:2288)
android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView (LayoutInflaterCompatHC.java:44)
android.view.LayoutInflater$FactoryMerger.onCreateView (LayoutInflater.java:169)
android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:684)
android.view.LayoutInflater.rInflate (LayoutInflater.java:755)
android.view.LayoutInflater.rInflate (LayoutInflater.java:758)
android.view.LayoutInflater.inflate (LayoutInflater.java:492)
android.view.LayoutInflater.inflate (LayoutInflater.java:397)
vn.com.vega.nhac.vn.base.NhacvnFragmentBase.onCreateView (NhacvnFragmentBase.java:36)
android.support.v4.app.Fragment.performCreateView (Fragment.java:1974)
android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1067)
android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1252)
android.support.v4.app.BackStackRecord.run (BackStackRecord.java:742)
android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1617)
android.support.v4.app.FragmentManagerImpl$1.run (FragmentManager.java:517)
android.os.Handler.handleCallback (Handler.java:733)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:136)
android.app.ActivityThread.main (ActivityThread.java:5045)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:779)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595)
dalvik.system.NativeStart.main (NativeStart.java)


I fixed it by
Add try{}catch in all cast code

        try {
            CastButtonFactory.setUpMediaRouteButton(getActivity(), (MediaRouteButton) mediaController.getCastBtn());
            setupCastListener();
            mCastContext = CastContext.getSharedInstance(getActivity());
            mCastContext.registerLifecycleCallbacksBeforeIceCreamSandwich(getActivity(), savedInstanceState);
            mCastSession = mCastContext.getSessionManager().getCurrentCastSession();
        }catch (Exception e){
            e.printStackTrace();
            isCastSupported = false;
            showNeedUpdateGooglePlayServiceDialog();
        }
//OnPause
        if (isCastSupported) {
            mCastContext.getSessionManager().removeSessionManagerListener(
                    mSessionManagerListener, CastSession.class);
        }
//on Resume
        //Cast
        if (isCastSupported) {
            Log.d(TAG, "onResume() was called");
            mCastContext.getSessionManager().addSessionManagerListener(
                    mSessionManagerListener, CastSession.class);
            if (mCastSession != null && mCastSession.isConnected()) {
                updatePlaybackLocation(PlaybackLocation.REMOTE);
            } else {
                updatePlaybackLocation(PlaybackLocation.LOCAL);
            }
        }

Override MiniControllerFragment

package vn.com.vega.cliptv.cast;

import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.cast.framework.media.widget.MiniControllerFragment;

/**
 * Created by binhbt on 2/8/2017.
 * Fix crash if google playservice have not installed yet
 */
public class MiniControllerFragmentx extends MiniControllerFragment {
    public View onCreateView(LayoutInflater var1, ViewGroup var2, Bundle var3) {
        try {
            View v = super.onCreateView(var1, var2, var3);
            return v;
        }catch (Exception e){
            e.printStackTrace();
            View v = var1.inflate(com.vn.vega.base.R.layout.fragment_vega, var2,
                    false);
            return v;
        }
    }
    public void onInflate(Context var1, AttributeSet var2, Bundle var3) {
        try {
            super.onInflate(var1, var2, var3);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

use minicontroller in xml like this:

        <fragment
            android:id="@+id/castMiniController"
            class="vn.com.vega.cliptv.cast.MiniControllerFragmentx"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:visibility="gone" />

Done

Support Fragment syntax

I'm wondering why sample using class attribute instead of android:name?

    <fragment
        android:id="@+id/browse"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar"
        android:layout_above="@+id/cast_mini_controller"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="-5dp"
        class="com.google.sample.cast.refplayer.browser.VideoBrowserFragment" />

    <fragment
        android:id="@+id/cast_mini_controller"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:visibility="gone"
        app:castShowImageThumbnail="true"
        class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />

Checkout training

I integrated chrome cast and see "SAMPLE" in red on the screen?

Hi,

I followed the instructions and successfully implemented google chrome cast in an android app, using the following libraries:

compile 'com.android.support:mediarouter-v7:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.google.android.gms:play-services-cast-framework:9.4.0'
compile 'com.googlecode.android-query:android-query:0.25.9'

Currently i am facing an issue where on the screen there is a overlay of "SAMPLE" text in red is there a way to remove this?

Thanks!

A custom SessionProvider implementation example would be nice.

CastOptionsProvider contains the method getAdditionalSessionProviders(Context context) which can be used to add non-cast devices. The documentation for adding a custom SessionProvider is very limited, so it would be nice if this could be included in this example.

I would like to use this to add support for Samsung's Smartview sdk, just like the YouTube app also has.

stack size error when I load a live content to remotemediaclient for Chromecast in Android

I try to load live contents in the chromecast in my app and after play some live contents the app freezes and crashes with the next error.

java.lang.StackOverflowError: stack size 8MB at com.google.android.gms.internal.zzbcz.getMediaInfo(Unknown Source) at com.google.android.gms.internal.zzbcz.getStreamDuration(Unknown Source) at com.google.android.gms.cast.framework.media.RemoteMediaClient.getStreamDuration(Unknown Source) at com.google.android.gms.cast.framework.CastSession.getSessionRemainingTimeMs(Unknown Source) at com.google.android.gms.cast.framework.Session$zza.getSessionRemainingTimeMs(Unknown Source) at com.google.android.gms.cast.framework.zzac.onTransact(Unknown Source) at android.os.Binder.transact(Binder.java:387) at nf.a(:com.google.android.gms.DynamiteModulesC@11951446:10) at vc.c(:com.google.android.gms.DynamiteModulesC@11951446:41) at vm.n(:com.google.android.gms.DynamiteModulesC@11951446:173) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:12) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at vh.a(:com.google.android.gms.DynamiteModulesC@11951446:55) at vk.onFinish(:com.google.android.gms.DynamiteModulesC@11951446:18) at android.os.CountDownTimer.start(CountDownTimer.java:89) at v

I can't catch the error, and I don't know where it happens. I've searched for similar errors, and it seems that nobody refers to the same error.

Any help? Thanks!

First video does not play when using the default media receiver

I'm filling this issue here as well as the on code.google.com, not sure where it should go.

If you use the default media receiver (by replacing use of R.string.app_id with use of CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID instead), the first video you attempt to cast will not play. Then cast any other video, and it works.

I noticed this problem when developing my own sender app. I then switched to this reference app, and found the same problem.

Testing with Nexus Player 7.0, Build NRD91D

ExpandedControlsActivity stops working while local video playing

Steps that produce the issue are following:

  1. Select an item from VideoBrowserActivity - LocalPlayerActivity opens
  2. In LocalPlayerActivity click on play button for playing video in local player, afterwards click on Cast button and select device for casting the video content
  3. The ExpandedControlsActivity appears for one second and then immediately disappears

Here is the video for better understanding, does anyone know what could be the problem?

Log doesn't reveal too much:
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. D/LocalPlayerActivity: Setting url of the VideoView to: https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/DesigningForGoogleCast.mp4 D/LocalPlayerActivity: Controls: PlayBackState: IDLE D/LocalPlayerActivity: onStart was called D/LocalPlayerActivity: onResume() was called D/ViewRootImpl[LocalPlayerActivity]: changeCanvasOpacity: opaque=true D/ViewRootImpl[LocalPlayerActivity]: changeCanvasOpacity: opaque=false D/LocalPlayerActivity: Stopped TrickPlay Timer D/LocalPlayerActivity: Restarted TrickPlay Timer W/MediaPlayer: Couldn't open https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/DesigningForGoogleCast.mp4: java.io.FileNotFoundException: No content provider: https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/DesigningForGoogleCast.mp4 D/LocalPlayerActivity: Controls: PlayBackState: PLAYING D/MediaPlayer: getMetadata D/LocalPlayerActivity: onPrepared is reached D/LocalPlayerActivity: Stopped TrickPlay Timer D/LocalPlayerActivity: Restarted TrickPlay Timer V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } W/MediaPlayer: info/warning (3, 0) V/MediaRouter: Selecting route: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } D/OpenGLRenderer: endAllActiveAnimators on 0x7ca1451c00 (ListView) with handle 0x7ca20e1d80 I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Nexus Player, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=CastVideos, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=CastVideos, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=CastVideos, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } D/onSessionStarted: sessionId: 5ee20da4-e9cf-4f99-ba97-bf3937df8246 D/LocalPlayerActivity: onPause() was called D/LocalPlayerActivity: Controls: PlayBackState: PAUSED I/art: Do partial code cache collection, code=122KB, data=114KB I/art: After code cache collection, code=120KB, data=113KB I/art: Increasing code cache capacity to 512KB D/LocalPlayerActivity: onResume() was called I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=CastVideos, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Ready To Cast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Ready To Cast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Ready To Cast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 D/skia: libjpeg error 102 <Start of Image> from read_header D/skia: --- SkAndroidCodec::NewFromStream returned null I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. D/skia: libjpeg error 102 <Start of Image> from read_header D/skia: --- SkAndroidCodec::NewFromStream returned null I/DynamiteModule: Considering local module com.google.android.gms.cast.framework.dynamite:0 and remote module com.google.android.gms.cast.framework.dynamite:5 I/DynamiteModule: Selected remote version of com.google.android.gms.cast.framework.dynamite, version >= 5 I/CastDynamiteModuleImpl: xv created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/arm64-v8a, /system/lib64, /vendor/lib64]]]. D/skia: libjpeg error 102 <Start of Image> from read_header D/skia: --- SkAndroidCodec::NewFromStream returned null V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Ready To Cast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Nexus Player, description=Now Casting: Designing For Google Cast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null } V/MediaRouter: Dispatching route change: UserRouteInfo{ name=Kantine TV, description=Chromecast, status=null, category=RouteCategory{ name=Devices types=ROUTE_TYPE_USER groupable=false }, supportedTypes=ROUTE_TYPE_USER , presentationDisplay=null }

What does setPreloadTime(20) do? Need help with pre-loading next video / audio in queue.

Hi,

First of all thanks for this awesome example on how to use the new cast framework.

I successfully implemented Cast in a few applications and am looking for low delay between switching between queue items. My assumption was when using following code:

new MediaQueueItem.Builder(getMediaInfo())
                .setAutoplay(true)
                .setPreloadTime(20)
                .build();

especially setPreloadTime(20) would load at-least 20 seconds of the next video / audio in queue as soon as the current video / audio just started playing. Is my assumption correct?

If so, i am still facing delays between the current video / audio is completed and the next in queue starts (3-5 seconds of delay between current and next).

In my case each media item is between 3 - 40 seconds only and the delay between each media when playing the next item in queue is between 3 - 5 seconds for loading and causing issues.

Would you please guide in reducing this delay and actually pre-load the next video / audio as soon as the first/current video / audio has started playing?

Thanks!!!

App crashes on devices or emulator that don't support google play services.

06-29 20:37:01.519 20333-20333/com.google.sample.cast.refplayer E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.sample.cast.refplayer/com.google.sample.cast.refplayer.VideoBrowserActivity}: android.view.InflateException: Binary XML file line #40: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #40: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:53)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: com.google.android.gms.dynamite.DynamiteModule$zza: No acceptable module found. Local version is 0 and remote version is 0.
at com.google.android.gms.internal.zzwv.zzaw(Unknown Source)
at com.google.android.gms.internal.zzwv.zza(Unknown Source)
at com.google.android.gms.cast.framework.CastContext.(Unknown Source)
at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source)
at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.(Unknown Source)
at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1255)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1472)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1691)
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3413)
at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:378)
at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:53) 
at android.app.Activity.performCreate(Activity.java:5104) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: com.google.android.gms.dynamite.DynamiteModule$zza: No acceptable module found. Local version is 0 and remote version is 0.
at com.google.android.gms.dynamite.DynamiteModule.zza(Unknown Source)
at com.google.android.gms.internal.zzwv.zzaw(Unknown Source) 
at com.google.android.gms.internal.zzwv.zza(Unknown Source) 
at com.google.android.gms.cast.framework.CastContext.(Unknown Source) 
at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source) 
at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.(Unknown Source) 
at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1255) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1472) 
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1691) 
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3413) 
at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) 
at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:378) 
at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33) 
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:53) 
at android.app.Activity.performCreate(Activity.java:5104) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 

MediaMetaData image for Cast Dialog

Noticing something strange with the cast dialog. Using the MediaInfo.Builder to prepare MediaInfo for a call to RemoteMediaClient.load(mediainfo), if the same image URL is used for MediaMetaData.addImage this time as was used last time the image does not show up in the dialog.

Runtime exception if outdated Google Play Services version

Description

The app crashes if using an outdated Google Play Services version

Crash

Caused by: java.lang.RuntimeException: com.google.android.gms.internal.zzsb$zza: No acceptable module found. Local version is 0 and remote version is 0.
                                                                                      at com.google.android.gms.internal.zzni.zzbg(Unknown Source)
                                                                                      at com.google.android.gms.internal.zzni.zza(Unknown Source)
                                                                                      at com.google.android.gms.cast.framework.CastContext.<init>(Unknown Source)
                                                                                      at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source)
                                                                                      at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.<init>(Unknown Source)
                                                                                      at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source)

Listeners for play/pause events on V3

I need to catch play/pause events when a user is playing a video.

The current documentation suggests using MediaIntentReceiver, however, this would only catch play/pause events when a user clicks it from the lock screen or cast dialogue.

Even RemoteMediaClient's override methods, such as onStatusUpdated() and onSendingRemoteMediaRequest() doesn't get called when I play/pause the video.

Please advise me on how to add a listener for play/pause in my app.

MediaRouteChooserDialog crashed on rotation if custom theme is applied

Ali Naddaf suggested a solution for styling the MediaRouteChooserDialog and MediaRouteControllerDialog by extending the MediaRouteDialogFactory and overriding the implementation of those dialog. Source: http://stackoverflow.com/questions/24245926/mediarouteactionprovider-connection-dialog-theme
This works well with api v2, but doing the same thing on with api v3 results in the crash, if you have a dialog up and rotation the screen.

In VideoBrowserActivity, modify onCreateOptionsMenu to the following:
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.browse, menu); mediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item); mQueueMenuItem = menu.findItem(R.id.action_show_queue); mediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item); MediaRouteActionProvider mediaRouteButton = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem); mediaRouteButton.setDialogFactory(new MediaRouteDialogFactory(){ @NonNull @Override public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() { return new MediaRouteChooserDialogFragment() { @Override public MediaRouteChooserDialog onCreateChooserDialog(Context context, Bundle savedInstanceState) { return new MediaRouteChooserDialog(getActivity(), R.style.Theme_MediaRouter); } }; } }); showIntroductoryOverlay(); return true; }

Add the themes.xml with the following:
<style name="Theme.MediaRouter" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:windowNoTitle">false</item> <item name="android:textColor">@color/white</item> <item name="mediaRouteButtonStyle">@style/Widget.MediaRouter.MediaRouteButton</item> <item name="mediaRouteOffDrawable">@drawable/ic_media_route_off_mono_dark</item> <item name="mediaRouteCloseDrawable">@drawable/mr_ic_close_light</item> <item name="mediaRoutePlayDrawable">@drawable/mr_ic_play_light</item> <item name="mediaRoutePauseDrawable">@drawable/mr_ic_pause_light</item> <item name="mediaRouteCastDrawable">@drawable/mr_ic_cast_light</item> <item name="mediaRouteAudioTrackDrawable">@drawable/ic_audiotrack</item> <item name="mediaRouteDefaultIconDrawable">@drawable/ic_tv_dark</item> <item name="mediaRouteSpeakerIconDrawable">@drawable/ic_speaker_dark</item> <item name="mediaRouteSpeakerGroupIconDrawable">@drawable/ic_speaker_group_dark</item> <item name="mediaRouteChooserPrimaryTextStyle"> @style/Widget.MediaRouter.ChooserText.Primary.Dark </item> <item name="mediaRouteChooserSecondaryTextStyle"> @style/Widget.MediaRouter.ChooserText.Secondary.Dark </item> <item name="mediaRouteControllerTitleTextStyle"> @style/Widget.MediaRouter.ControllerText.Title.Dark </item> <item name="mediaRouteControllerPrimaryTextStyle"> @style/Widget.MediaRouter.ControllerText.Primary.Dark </item> <item name="mediaRouteControllerSecondaryTextStyle"> @style/Widget.MediaRouter.ControllerText.Secondary.Dark </item> </style>

Run the app, press on the chromecast button, dialog appears, turn the device, application crashes with the following logs:
FATAL EXCEPTION: main Process: com.google.sample.cast.refplayer, PID: 31871 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.sample.cast.refplayer/com.google.sample.cast.refplayer.VideoBrowserActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.sample.cast.refplayer.VideoBrowserActivity$2$1: make sure class name exists, is public, and has an empty constructor that is public at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077) at android.app.ActivityThread.-wrap15(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350) 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: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.sample.cast.refplayer.VideoBrowserActivity$2$1: make sure class name exists, is public, and has an empty constructor that is public at android.support.v4.app.Fragment.instantiate(Fragment.java:431) at android.support.v4.app.FragmentState.instantiate(Fragment.java:102) at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1952) at android.support.v4.app.FragmentController.restoreAllState(FragmentController.java:144) at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:306) at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:85) at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:117) 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.handleRelaunchActivity(ActivityThread.java:4077)  at android.app.ActivityThread.-wrap15(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)  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.InstantiationException: java.lang.Class<com.google.sample.cast.refplayer.VideoBrowserActivity$2$1> has no zero argument constructor at java.lang.Class.newInstance(Native Method) at android.support.v4.app.Fragment.instantiate(Fragment.java:420) at android.support.v4.app.FragmentState.instantiate(Fragment.java:102)  at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1952)  at android.support.v4.app.FragmentController.restoreAllState(FragmentController.java:144)  at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:306)  at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:85)  at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:117)  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.handleRelaunchActivity(ActivityThread.java:4077)  at android.app.ActivityThread.-wrap15(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)  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) 

Subtitles

How can i add external subtitles from file during casting video? Is it possible?

MiniControllerFragment

In layout player_activity.xml in fragment MiniControllerwe have line:
app:castShowImageThumbnail="true"

It's underscored as mistake in Android Studio: "Add Android prefix".
Can you explain, please, is it right line or not?

Next queue item preview is not displayed on mini controller

Using the new version of CastVideos-android and the receiver app sample https://github.com/googlecast/CastReferencePlayer, the next queue item preview is not displayed on the minicontroller.

Reproduction steps:

  1. start casting a video
  2. add another video to the queue
  3. seek to towards the end of the asset

Expected: when the preview of the next item in the queue is displayed on the receiver app, it should be displayed on the minicontroller.

Note: the state of the next episode in the queue screen is updated with a skip button and blue highlight.


Tested on Nexus 6 (Android 6.0 MPA44G)

On disconnecting ChromeCast from one device is stopping receiver application

Two or more android device are connected in to the same chromecast receiver application. And when i disconnect from anyone of the device the chromecast receiver application is stopped. The issue is occured after updating play-services-cast-framework:9.4.0 to play-services-cast-framework: 9.8.0. Have also tried 10.0.1 version also issue is still there.

Any suggestions/directions are much appreciated.

Mini controller is sometimes displayed under bottom bar on devices with software buttons

Steps:

  1. Make sure you are using a device with software bottom butttons (nexus 7, nexus 5x etc).
  2. Open CastVideos-android app.
  3. Connect to a chromecast.
  4. Start video from overflow buttons.

Behaviour: a shadow appears near the bottom bar, which indicates that the mini controller is present but under the buttons. Please see screenshot.

Note: this happens sometimes in portrait. In landscape (nexus 7) it happens every time opening a video.

App crashes if stop casting while session is trying to reconnect

If I start a cast session, and then disconnect wifi then immediately click on cast button and stop casting, the app will crash with below trace:

10-23 17:18:45.894 27189-27189/com.google.sample.cast.refplayer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.sample.cast.refplayer, PID: 27189
Theme: themes:{}
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzrb.zzb(Unknown Source)
at com.google.android.gms.internal.zzrf.zzb(Unknown Source)
at com.google.android.gms.internal.zzrd.zzb(Unknown Source)
at com.google.android.gms.cast.Cast$CastApi$zza.stopApplication(Unknown Source)
at com.google.android.gms.cast.framework.CastSession$zzb.zzgo(Unknown Source)
at com.google.android.gms.cast.framework.zzf$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:387)
at yn.a(:com.google.android.gms.DynamiteModulesC:184)
at yd.a(:com.google.android.gms.DynamiteModulesC:120)
at ys.onTransact(:com.google.android.gms.DynamiteModulesC:122)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.cast.framework.zzh$zza$zza.zzb(Unknown Source)
at com.google.android.gms.cast.framework.CastSession.end(Unknown Source)
at com.google.android.gms.cast.framework.Session$zza.end(Unknown Source)
at com.google.android.gms.cast.framework.zzq$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:387)
at zu.a(:com.google.android.gms.DynamiteModulesC:216)
at aac.a(:com.google.android.gms.DynamiteModulesC:305)
at aay.a(:com.google.android.gms.DynamiteModulesC:61)
at aav.onTransact(:com.google.android.gms.DynamiteModulesC:144)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.internal.zzol$zza$zza.zza(Unknown Source)
at com.google.android.gms.internal.zzoo.onRouteUnselected(Unknown Source)
at android.support.v7.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:2846)
at android.support.v7.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:2793)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
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)

Cast button not visible in the actionbar

I have installed this sample app on mu mobile . but i can see video list and video list detail screen. but i could not find cast button anywhere. can anyone tell me why is not visible for me?

This user claims to have trouble reconnecting, even tho Cast SDK has automatic reconnection

I am writing sample sender app and I have a problem in chromecast reconnection when Wi-Fi is lost. According to chromecast documentation Chromecast reconnection, ReconnectionService must automatically reconnect to wi-fi and cast button will be filled, but after 20 seconds reconnection does not work.

My CastProvider has this lines of code:

return new CastOptions.Builder()
.setReceiverApplicationId(id)
.setLaunchOptions(launchOptions)
.setResumeSavedSession(true)
.setEnableReconnectionService(true)
.setCastMediaOptions(mediaOptions)
.build();
What I'm doing wrong? All code seems like a google sample:Sample code

Where could he be possibly wrong?

Samsung Galaxy S8 + Chromecast 2 => cannot pause from lockscreen

When I'm running this application on SGS-S8 and casting to Chromecast 2, I experience the minor issue - the pause button on the lock screen is not functional. When the app is in the background, I am able to control the playback only from the notification widget.

MiniController attribute

Hi!
The attribute "castControlButtons" is not available as it described here: https://developers.google.com/cast/docs/reference/android/com/google/android/gms/cast/framework/media/widget/MiniControllerFragment

One can see in the sources of MiniControllerFragment.class that you might forgot to define it in the attrs:

public void onInflate(Context var1, AttributeSet var2, Bundle var3) {
        super.onInflate(var1, var2, var3);
        TypedArray var4 = var1.obtainStyledAttributes(var2, styleable.CastMiniController, attr.castMiniControllerStyle, style.CastMiniController);
        this.nt = var4.getBoolean(styleable.CastMiniController_castShowImageThumbnail, true);
        this.nu = var4.getResourceId(styleable.CastMiniController_castTitleTextAppearance, 0);
        this.nv = var4.getResourceId(styleable.CastMiniController_castSubtitleTextAppearance, 0);
        var4.recycle();
    }

May you please check this part? Thank you!

I am using androidStudio-3.0

I am using androidStudio-3.0. However, the following error occurs.

Error:(30, 0) Could not set unknown property 'enforceUniquePackageName' for object of type com.android.build.gradle.AppExtension.

ExpandedControlsActivity leaks every time it is dismissed

Once a video is casting and ExpandedControlsActivity is showing, each time I dismiss the controls by tapping the arrow in the top-left, the activity is leaked. I see these messages if I turn on StrictMode for the app:

12-08 15:37:04.980 18037-18037/? E/StrictMode: class com.google.sample.cast.refplayer.expandedcontrols.ExpandedControlsActivity; instances=4; limit=1
                                               android.os.StrictMode$InstanceCountViolation: class com.google.sample.cast.refplayer.expandedcontrols.ExpandedControlsActivity; instances=4; limit=1
                                                   at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

How to just mirror whole mobile screen on monitor

I am developing an app for TV mirroring. so i just need to mirror everything from mobile to TV(but using HDMI monitor now). i have added cast button in actionbar . when i click button . it displays my chromecast device . when i select it. its connected to my cast but in monitor only that cast icon displaying if exit from app or if open facebook or whatsapp. its not mirror anything.. but i tried with google home app . when i enable cast button . it starts to display my mobile screen to monitor .even if go to facebook .it just mirror and everything what i do in my mobile . so how to do like google home app?

OOM error on particular devices with some video asset

Issue occurring on particular devices while casting where it runs for few seconds then suddenly crashes:

E/art: Throwing OutOfMemoryError "Failed to allocate a 67253676 byte allocation with 16764512 free bytes and 43MB until OOM"
E/art: Throwing OutOfMemoryError "Failed to allocate a 67253676 byte allocation with 16777120 free bytes and 43MB until OOM"
E/art: Throwing OutOfMemoryError "Failed to allocate a 67231812 byte allocation with 16777120 free bytes and 43MB until OOM"
E/art: Throwing OutOfMemoryError "Failed to allocate a 67231812 byte allocation with 16777120 free bytes and 43MB until OOM"

09-13 18:40:11.685 29723-30102/com.test.androiddev E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
Process: com.test.androiddev, PID: 29723
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 67253676 byte allocation with 16777120 free bytes and 43MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreateFromParcel(Native Method)
at android.graphics.Bitmap.access$100(Bitmap.java:32)
at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1484)
at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1476)
at com.google.android.gms.internal.zzef.zza(Unknown Source)
at com.google.android.gms.internal.zzavk.zzn(Unknown Source)
at com.google.android.gms.internal.zzave.doInBackground(Unknown Source)
at com.google.android.gms.internal.zzave.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:818) 

Play/Pause button not working

In the sample app, open the casting control dialog by clicking the casting icon on the title bar when video is cast. The pause or play button on the dialog doesn't work. No response when clicking the play/pause button.

Remove Hungarian notation?

It seems like the old Google convention of prefixing member variables with m is used in some places (but not others) in this project. e.g. in VideoListAdapter we find

    private final Context mAppContext;
    private List<MediaInfo> videos;

I've not worked on any Android projects that use the m notation for many years. Is it still in widespread use? If not can we get rid of it? This would mean that people who begin their implementations by pasting code from the example project would not have to rename everything.

Why does LocalPlayerActivity start an ExpandedControlsActivity when cast connects?

I think it would be more sensible if the video in the LocalPlayerActivity was replaced by a still image, and the play/pause controls managed play/pause on the Chromecast. Basically, the same as YouTube and many other video apps do.

The previous CastVideos sample (the one that used CCL) had this behavior, and (to me, at least) it seemed way more natural.

Crash when stop casting

Steps to reproduce this crash:

  1. Run this example app to cast any sample video
  2. Click the cast icon on the toolbar to open the Casting playback control dialog
  3. Click "stop casting". The sample app will crash.

Tested in both Android M and Android N phones. Same crash always happens.

Below is the crash stacktrace:
com.google.sample.cast.refplayer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.sample.cast.refplayer, PID: 3615
java.lang.NullPointerException: Attempt to write to field 'java.lang.ref.WeakReference android.support.v4.media.session.MediaSessionCompat$Callback.mSessionImpl' on a null object reference
at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi21.setCallback(MediaSessionCompat.java:2305)
at android.support.v4.media.session.MediaSessionCompat.setCallback(MediaSessionCompat.java:267)
at android.support.v4.media.session.MediaSessionCompat.setCallback(MediaSessionCompat.java:255)
at com.google.android.gms.internal.zzxe.zzcb(Unknown Source)
at com.google.android.gms.cast.framework.CastSession.zzbV(Unknown Source)
at com.google.android.gms.cast.framework.CastSession.zza(Unknown Source)
at com.google.android.gms.cast.framework.CastSession$zzb.zzbV(Unknown Source)
at com.google.android.gms.cast.framework.zzf$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:499)
at zt.a(:com.google.android.gms.DynamiteModulesC:199)
at zj.a(:com.google.android.gms.DynamiteModulesC:128)
at zy.onTransact(:com.google.android.gms.DynamiteModulesC:122)
at android.os.Binder.transact(Binder.java:499)
at com.google.android.gms.cast.framework.zzh$zza$zza.zzb(Unknown Source)
at com.google.android.gms.cast.framework.CastSession.end(Unknown Source)
at com.google.android.gms.cast.framework.Session$zza.end(Unknown Source)
at com.google.android.gms.cast.framework.zzq$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:499)
at aba.a(:com.google.android.gms.DynamiteModulesC:216)
at abi.a(:com.google.android.gms.DynamiteModulesC:305)
at ace.a(:com.google.android.gms.DynamiteModulesC:61)
at acb.onTransact(:com.google.android.gms.DynamiteModulesC:144)
at android.os.Binder.transact(Binder.java:499)
at com.google.android.gms.internal.zzwv$zza$zza.zza(Unknown Source)
at com.google.android.gms.internal.zzwy.onRouteUnselected(Unknown Source)
at android.support.v7.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:2999)
at android.support.v7.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:2946)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

MiniControllerFragment set background color not work

Hi guys, i changed the background color from the style but it does not work. The background color is transparent. Please tell me what I do wrong? Thanks in advance.

style.xml
<style name="CustomCastMiniController" parent="CastMiniController"> <item name="castShowImageThumbnail">true</item> <item name="castTitleTextAppearance">@style/TextAppearance.AppCompat.Subhead.Inverse</item> <item name="castSubtitleTextAppearance">@style/TextAppearance.AppCompat.Caption</item> <item name="castBackground">#FFFFFF</item> <item name="castProgressBarColor">@color/colorAccent</item> </style>

layout.xml
<fragment android:id="@+id/cast_mini_controller" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />

Notification image is not cropped

As you can see in the attached screenshot, the notification image is stretched out and not cropped. I assume this behaviour is not intended. I have tested this on several devices and Android versions and most of the devices stretch the image.
screenshot_2016-07-19-13-15-42

Update to latest dependencies

Currently this will not build on the latest android studio. I propose that I create a pull request for updating all the dependencies to their latest version as of todays date.

HLS with wmsauth

Hello, I customized the CastVideos project to parse my m3u playlist and playing my m3u8 files.. When I play locally one of my stream the stream works fine... When i cast my stream it starts to play on chromecast but after 1 mins (but it could varying) it stops to work.. In debug mode i saw a java expection about "malformed URL".. (the stream contains a wms authentication in the form as "https://beta.skystreaming.co/tv/eJx3sUEgLQ/playlist.m3u8?wmsAuthSign=aWQ9NzI5Njg5LWVKeDNzVUVnTFEtMTQ5NTY0NDIxMzExMTAtODguODYuMTg3LjM4JnNlcnZlcl90aW1lPTUvMjQvMjAxNyA0OjQzOjMzIFBNJmhhc2hfdmFsdWU9SElSSVljeWVqT0VVNzFDSjNGaVBHZz09JnZhbGlkbWludXRlcz0yNDA="
It is a hls stream using .ts segment.. if you want i can post you a network packet sniffer to show you the http contents... Btw, i build media info setting mime-type "application/vnd.apple.mpegurl" as showed by http headers.. I was thinking that the problem could be the default receiver app don't using MediaPLayerLibrary to stream hls format,as described in chromecast documentation, but i verified that casting of a Google hls video works fine so my understanding is that receiver app id "4F8B3483" is using MediaPlayerLibrary.. Could you help me what is wrong? thanks
Paolo

Backwards compatibility of the v3 mini controller: Error inflating class fragment

The minSdkVersion is 10. When trying to run the App on an API 16 Emulator Instance (Android 4.1 x86) the App crashes immediately and i get this error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.sample.cast.refplayer/com.google.sample.cast.refplayer.VideoBrowserActivity}: android.view.InflateException: Binary XML file line #41: Error inflating class fragment
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
                  at android.app.ActivityThread.access$600(ActivityThread.java:130)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:137)
                  at android.app.ActivityThread.main(ActivityThread.java:4745)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:511)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                  at dalvik.system.NativeStart.main(Native Method)
               Caused by: android.view.InflateException: Binary XML file line #41: Error inflating class fragment
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
                  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                  at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:111)
                  at android.app.Activity.performCreate(Activity.java:5008)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
                  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
                  at android.os.Handler.dispatchMessage(Handler.java:99) 
                  at android.os.Looper.loop(Looper.java:137) 
                  at android.app.ActivityThread.main(ActivityThread.java:4745) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:511) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                  at dalvik.system.NativeStart.main(Native Method) 
               Caused by: java.lang.RuntimeException: com.google.android.gms.internal.zzsb$zza: No acceptable module found. Local version is 0 and remote version is 0.
                  at com.google.android.gms.internal.zzni.zzbg(Unknown Source)
                  at com.google.android.gms.internal.zzni.zza(Unknown Source)
                  at com.google.android.gms.cast.framework.CastContext.<init>(Unknown Source)
                  at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source)
                  at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.<init>(Unknown Source)
                  at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source)
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1264)
                  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1366)
                  at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2409)
                  at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
                  at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:374)
                  at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33)
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
                  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                  at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:111) 
                  at android.app.Activity.performCreate(Activity.java:5008) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
                  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
                  at android.os.Handler.dispatchMessage(Handler.java:99) 
                  at android.os.Looper.loop(Looper.java:137) 
                  at android.app.ActivityThread.main(ActivityThread.java:4745) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:511) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                  at dalvik.system.NativeStart.main(Native Method) 
               Caused by: com.google.android.gms.internal.zzsb$zza: No acceptable module found. Local version is 0 and remote version is 0.
                  at com.google.android.gms.internal.zzsb.zza(Unknown Source)
                  at com.google.android.gms.internal.zzni.zzbg(Unknown Source) 
                  at com.google.android.gms.internal.zzni.zza(Unknown Source) 
                  at com.google.android.gms.cast.framework.CastContext.<init>(Unknown Source) 
                  at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source) 
                  at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.<init>(Unknown Source) 
                  at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1264) 
                  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1366) 
                  at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2409) 
                  at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) 
                  at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:374) 
                  at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33) 
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
                  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                  at com.google.sample.cast.refplayer.VideoBrowserActivity.onCreate(VideoBrowserActivity.java:111) 
                  at android.app.Activity.performCreate(Activity.java:5008) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
                  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
                  at android.os.Handler.dispatchMessage(Handler.java:99) 
                  at android.os.Looper.loop(Looper.java:137) 
                  at android.app.ActivityThread.main(ActivityThread.java:4745) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:511) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                  at dalvik.system.NativeStart.main(Native Method) 

It acts as could the AppCompatActivity not inflate the MiniController Fragment, which is provided by the Cast v3 Framework.

Is this a problem of the Cast Framework or some kind of false configured emulator?

The same happens on my own App, where i added the Mini Controller Fragment to an AppCompatActivity as well.
On API 23 both Apps work perfectly.

Thanks

After integrate cast framework app crashes when opening

After integrate cast framework app crashes when opening.when google it everyone says device must update their google play services. How to prevent those errors.

Log says:
java.lang.RuntimeException: com.google.android.gms.dynamite.DynamiteModule$zza: No acceptable module found. Local version is 0 and remote version is 0

French string res

Hi,

I am wondering where can I get French string res for this chrome cast library??

cast-framework:9.2.0

Android Studio can't resolve:
compile 'com.google.android.gms:play-services-cast-framework:9.2.0'

Notification, minicontroller and expandedControllsActivity do not get updated when next item in queue starts

Here're the steps that produce the issue:

  • Play a video
  • Add another video into the queue
  • Turn off the phone display and throw it away
  • When chromecast plays the second video in queue, I turn on the display, but the notification, minicontroller and ExpandedControllsActivity all stay at the end of first video,
    There's no way to get them updated without disconnecting media cast session.

By the way this only happens after putting the display off for quite long time, let's say 20-30 minutes

Cannot append item to the queue at doInBackground inside an async task

I need to add new videos to the queue getting their urls them from a web server. I have a loop inside doInBackground that get those urls, make a MediaQueueItem and call queueAppendItem. My problem is that the item is not queued. I don't receive any exception or warning.

If i save those items in an array and call queueInsertItems at onPostExecute the items are queued, so i think the problem is calling queueAppendItem in background.

This process of getting the videos urls is slow so i need to add one by one to the queue, is there any way to do it in background?

UPDATE: I found that i can't call remote media player methods from background, so i solved this with publishProgress.

Sorry for incoveniences.

Click on "X" in notification will stop the receiver and disconnect all senders

We found this weird issue in notification where if one sender clicks on the "X", the receiver will stop and disconnect all senders.

We observed the same behavior in the latest CastVideos Android builds.

Is this an expected behavior?

It seems wrong to me since we expect the button functions just like "STOP CASTING" button in media route dialog which will only disconnect one sender.

llegalArgumentException when showing the IntroductoryOverlay

The application crashes with the following error stacktrace:

java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:877)
at android.graphics.Bitmap.createBitmap(Bitmap.java:856)
at android.graphics.Bitmap.createBitmap(Bitmap.java:823)
at com.google.android.gms.cast.framework.internal.featurehighlight.zza.onDraw(Unknown Source)
at android.view.View.draw(View.java:17067)
at android.view.View.updateDisplayListIfDirty(View.java:16049)
at android.view.View.draw(View.java:16833)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16044)
at android.view.View.draw(View.java:16833)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:17070)
at com.android.internal.policy.DecorView.draw(DecorView.java:751)
at android.view.View.updateDisplayListIfDirty(View.java:16049)...

As the googlecast code is obfuscated it is hard to say what exactly goes wrong, but it seems to point to the IntroductoryOverlay from this line in the stacktrace - "at com.google.android.gms.cast.framework.internal.featurehighlight.zza.onDraw(Unknown Source)"

Issue maybe reproduced on LGE Nexus 5X.

Cast reconnection issue

Description

When regaining connection to the cast device, the current session does not seem to represent the state of the content on the Cast device. As such, the Cast Videos player state is out of sync with the device.

Reproduction steps

  1. Open the Cast Videos app
  2. Connect to a Cast device
  3. Select a video -> observe that it starts playing on the receiver
  4. Disconnect the client (phone/tablet) from WiFi -> observe video is still playing on the receiver
  5. Connect the client back to WiFi -> observe MediaRouteButton shows as connecting -> wait for the connection to establish
  6. Press the Pause button

Actual behavior

  • The video is paused on the receiver
  • A progress spinner is shown on the client in the app
  • The app shows "Loading..."
  • The progress/seek bar keeps incrementing
  • User cannot play the video again
  • The result of CastContext.getSessionManager().getCurrentCastSession().getRemoteMediaClient().isPlaying() returns true

Expected behavior

  • The video is paused on the receiver
  • The play button is shown
  • The progress/seek bar is stopped in the last position instead of continuously incrementing
  • The result of CastContext.getSessionManager().getCurrentCastSession().getRemoteMediaClient().isPlaying() returns false

I am pretty sure this is an issue with the Cast SDK v3 and not the Cast Videos app, but I am not sure where I would voice that concern. In either case, it affects the Cast Videos app, so I decided to write this issue. It affects my application as well, so I am hoping to get this resolved quickly.

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.