Приложение на базе OpenTok, использующее как многопартийность, так и функцию вещания

Приложение, которое я разрабатываю, представляет собой смесь многопартийности и вещания. Будет один конкретный администратор / хост, поток которого подписан всеми подписчиками (Broadcasting). И хост / издатель, и все подписчики смогут видеть всех участников сеанса (своего рода многопартийность). В случае события от хоста / издателя, такого как нажатие кнопки и т. Д., Издатель теперь прекращает публиковать свой поток, и весь подписчик будет просматривать поток от конкретного подписчика в сеансе, который выбирает хост. Так как мое приложение использует Android SDK и не имеет токена модератора. Как я могу успешно создать желаемое приложение ( (примечание: я уже прошел базовый аудио-, видеочат). Можете ли вы предоставить мне необходимые методы и пример кода для его запуска.

Я использовал следующие коды:

private HashMap<String, Stream> mStringStreams = new HashMap<String, Stream>();
 @Override
    public void onStreamReceived(Session session, final Stream stream) {

        Log.d(LOG_TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId()+" Stream name: "+stream.getName());

           if(stream.getName().equalsIgnoreCase("Main_stream"))
            {
                    mSubscriber = new Subscriber.Builder(SuscriberActivity.this, stream).build();
                    mSession.subscribe(mSubscriber);
                    mSubscriberViewContainer.addView(mSubscriber.getView());

            }
        if (mSubscribers.size() + 1 > MAX_NUM_SUBSCRIBERS ) {
            Toast.makeText(this, "New subscriber ignored. MAX_NUM_SUBSCRIBERS limit reached.", Toast.LENGTH_LONG).show();
            return;
        }
        if(stream.getName().compareTo("Main_stream")!=0)
        {

            final Subscriber subscriber = new Subscriber.Builder(SuscriberActivity.this, stream).build();
            mStringStreams.put(stream.getStreamId().toString(), stream);
            mSession.subscribe(subscriber);
            mSubscribers.add(subscriber);
            mSubscriberStreams.put(stream,subscriber);
            int position = mSubscribers.size() - 1;
            final int id = getResources().getIdentifier("subscriberview" + (new Integer(position)).toString(), "id", SuscriberActivity.this.getPackageName());
            FrameLayout subscriberViewContainer = (FrameLayout) findViewById(id);
            subscriber.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
            subscriberViewContainer.addView(subscriber.getView());
        }

 @Override
   public void onSignalReceived(Session session, String s, String s1, Connection connection) {
stream = mSubscriberStreams.get(s1).getStream();
          Stream stream= mStringStreams.get(s1);
             Subscriber mSubscriber1 = new Subscriber.Builder(SuscriberActivity.this, stream).build();
            mSubscriber1.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
            mSubscriberViewContainer.removeView(mPublisher.getView());
            mSubscriberViewContainer.addView(mSubscriber1.getView().getRootView());

        }
    }

1 ответ

Если я правильно понимаю, вы пытаетесь разрешить участникам подписаться на другой поток, когда издатель (основной хост) нажимает кнопку. Для этого вы можете использовать OpenTok Signaling API для отправки сигнала с streamId как данные для всех участников, чтобы они могли подписаться на этого конкретного пользователя.

Другие вопросы по тегам