【问题标题】:WebRTC: Track.onOpen() is called, but track is not openWebRTC:Track.onOpen() 被调用,但轨道未打开
【发布时间】:2022-11-02 04:30:43
【问题描述】:

使用libdatachannel,我使用一些带外信令在两个伙伴之间建立PeerConnection。我可以创建DataChannels 并在它们之间成功发送数据(使用peer_connection->createDataChannel())。

但我正在努力对视频轨道做同样的事情。这是我所做的:

  • 我创建了一个合作伙伴的曲目:
rtc::Description::Video media("myvideo", rtc::Description::Direction::RecvOnly);
media.addH264Codec(96);
media.setBitrate(3000);

auto track = peer_connection->addTrack(media);
peer_connection->setLocalDescription();

请注意我在addTrack 之后如何调用setLocalDescription(),以便libdatachannel 将协商轨道并且我不需要在带外发送SDP(至少这是我的理解)。

  • 从另一个伙伴那里,我检查了onTrack() 回调:
peer_connection->onTrack([this](const std::shared_ptr<rtc::Track>& track) {
    track->onClosed([]() {
        std::cout << "onClosed" << std::endl;
    });
    track->onOpen([]() {
        std::cout << "onOpen" << std::endl;

        if (track->isOpen()) {
            std::cout << "track is open" << std::endl;
        } else {
            std::cout << "track is not open" << std::endl;
        }
    });
}

我观察到的是onTrack 被调用,track 具有我从发送方(“myvideo”)设置的mid。但就在onOpen() 回调中,对track-&gt;isOpen() 的调用表明“轨道是不是打开”。

如果我稍后尝试使用该曲目(例如track-&gt;send()),如果失败并显示 SIGABRT:

terminate called after throwing an instance of 'std::runtime_error'
  what():  Track is closed
Signal: SIGABRT (Aborted)

所以不知何故,我感觉我的赛道一开始就没有正确打开。虽然我希望track-&gt;onOpen() 被调用......当轨道打开时。

我错过了什么吗?

【问题讨论】:

    标签: c++ webrtc libdatachannel


    【解决方案1】:

    那是libdatachannel 中的a bug

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      相关资源
      最近更新 更多