【问题标题】:OpenTok based application using both multiparty and broadcasting feature使用多方和广播功能的基于 OpenTok 的应用程序
【发布时间】:2018-02-08 17:38:38
【问题描述】:

我正在开发的应用程序是多方和广播的混合体。将有一个特定的管理员/主机被所有订阅者订阅(广播)。主持人/发布者以及所有订阅者都将能够看到会话中的所有参与者(类似于多方)。在来自主机/发布者的事件(例如按钮单击等)中,发布者现在将停止发布他/她的流,并且所有订阅者将在主机选择的会话中查看来自特定订阅者的流。由于我的应用程序使用 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());

        }
    }

【问题讨论】:

    标签: android opentok tokbox broadcasting


    【解决方案1】:

    如果我理解正确,您是在尝试让参与者在发布者(主要主持人)单击按钮时订阅不同的流。为此,您可以使用OpenTok Signaling API 向所有参与者发送带有streamId 数据的信号,以便他们可以订阅该特定用户。

    【讨论】:

    • 将streamID发送给所有客户端后,我应该使用什么方法订阅该流,因为streamID是一个字符串,API需要流来构建订阅者。换句话说,我如何使用 streamId 订阅该流?
    • 您可以在每次触发streamCreated 事件时将streamId 映射到其对应的event.stream 数据。这样,当任何人收到带有streamId 作为数据的信号时,只要他们在 hashMap 中有streamId:event.stream,他们就应该能够订阅流
    • 我已在我的问题/帖子中添加了代码。你能不能复习一下。代码不起作用,但在构建应用程序时没有显示任何错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2011-01-24
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多