2016-05-16 2 views
1

Я работаю с приложением, которое показывает видео в реальном времени. И я хочу, чтобы приложение могло транслировать видео на chromcast. Я не могу использовать cast method, потому что мне нужно менять заголовки на лету (для обеспечения безопасности, и я не нашел, как это сделать). Поэтому мне пришлось отказаться от этого метода, и я решил попробовать remote display method, чтобы снять мое видео на GlSurfaceView. Но я столкнулся с тем, что CastRemoteDisplayLocalService не вызывает onCreatePresentation, поэтому мой CastPresentation не создает. Согласно журналам, PresentationService создает, но не вызывает onCreatePresentation, и я не понимаю, почему. Также он вызывает onDismissPresentation, когда я прекращаю потоковое вещание.Chromcast. CastRemoteDisplayLocalService не вызывает onCreatePresentation

Журналы:

onRouteSelected COOL Chromecast 
CHROMECAST PresentationService onCreate 
CHROMECAST onServiceCreated 
//I stop streaming 
onRouteUnselected COOL Chromecast 
CHROMECAST onDismissPresentation 

MediaRouterCallback.java

public class MediaRouterCallback extends MediaRouter.Callback { 
public static final String TAG = MediaRouterCallback.class.getName(); 

private CastDevice mSelectedDevice; 
private FragmentActivity activity; 
private Context mContext; 

public MediaRouterCallback(FragmentActivity activity, Context context){ 
    this.activity = activity; 
    mContext = context; 
} 

@Override 
public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo info) { 
    Log.d(TAG, "onRouteSelected " + info.getName()); 
    Intent intent = new Intent(mContext, 
      activity.getClass()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent notificationPendingIntent = PendingIntent.getActivity(
      mContext, 0, intent, 0); 

    CastRemoteDisplayLocalService.NotificationSettings settings = 
      new CastRemoteDisplayLocalService.NotificationSettings.Builder() 
        .setNotificationPendingIntent(notificationPendingIntent).build(); 

    CastRemoteDisplayLocalService.startService(
      CastApplication.getContext(), 
      PresentationService.class, CastApplication.sApplicationId, 
      mSelectedDevice, settings, 
      new CastRemoteDisplayLocalService.Callbacks() { 
       @Override 
       public void onServiceCreated(CastRemoteDisplayLocalService castRemoteDisplayLocalService) { 
        Log.d(TAG, "CHROMECAST onServiceCreated"); 
       } 

       @Override 
       public void onRemoteDisplaySessionStarted(
         CastRemoteDisplayLocalService service) { 
        Log.d(TAG, "CHROMECAST onRemoteDisplaySessionStarted"); 
       } 

       @Override 
       public void onRemoteDisplaySessionError(
         Status errorReason){ 
        Log.d(TAG, "CHROMECAST onRemoteDisplaySessionError"); 
       } 
      }); 
} 

@Override 
public void onRouteUnselected(MediaRouter router, MediaRouter.RouteInfo info) { 
    Log.d(TAG, "onRouteUnselected " + info.getName()); 
} 

} 

PresentationService.java

public class PresentationService extends CastRemoteDisplayLocalService { 
public static final String TAG = PresentationService.class.getName(); 

FirstScreenPresentation mPresentation; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d(TAG, "CHROMECAST PresentationService onCreate"); 
} 

@Override 
public void onCreatePresentation(Display display) { 
    Log.d(TAG, "CHROMECAST onCreatePresentation"); 
    createPresentation(display); 
} 

@Override 
public void onDismissPresentation() { 
    Log.d(TAG, "CHROMECAST onDismissPresentation"); 
    dismissPresentation(); 
} 

private void dismissPresentation() { 
    if (mPresentation != null) { 
     mPresentation.dismiss(); 
     mPresentation = null; 
    } 
} 

private void createPresentation(Display display) { 
    dismissPresentation(); 
    mPresentation = new FirstScreenPresentation(this, display); 
    try { 
     mPresentation.show(); 
    } catch (WindowManager.InvalidDisplayException ex) { 
     Log.e(TAG, "CHROMECAST Unable to show presentation, display was " + 
       "removed.", ex); 
     dismissPresentation(); 
    } 
} 
} 

FirstScreenPresentation.java

public class FirstScreenPresentation extends CastPresentation { 

private GLSurfaceView mFirstScreenSurfaceView; 

public FirstScreenPresentation(Context context, 
           Display display) { 
    super(context, display); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.first_screen_layout); 
    mFirstScreenSurfaceView = (GLSurfaceView) 
      findViewById(R.id.gl_surface_view); 
    mFirstScreenSurfaceView.setRenderer(new ClearRenderer()); 
} 


class ClearRenderer implements GLSurfaceView.Renderer { 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     // Do nothing special. 
    } 

    public void onSurfaceChanged(GL10 gl, int w, int h) { 
     gl.glViewport(0, 0, w, h); 
    } 

    public void onDrawFrame(GL10 gl) { 
     gl.glClearColor(1.0f, 0f, 0f, 1.0f); 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    } 

    public void setColor(float r, float g, float b) { 
     mRed = r; 
     mGreen = g; 
     mBlue = b; 
    } 

    private float mRed = 1.0f; 
    private float mGreen; 
    private float mBlue; 
} 

} 

ответ

2

Проблема была в том, что у меня был неправильный листинг id

+0

Вы можете поделиться образцом Chromcast. CastRemoteDisplayLocalService – user3563954

 Смежные вопросы

  • Нет связанных вопросов^_^