【发布时间】: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->isOpen() 的调用表明“轨道是不是打开”。
如果我稍后尝试使用该曲目(例如track->send()),如果失败并显示 SIGABRT:
terminate called after throwing an instance of 'std::runtime_error'
what(): Track is closed
Signal: SIGABRT (Aborted)
所以不知何故,我感觉我的赛道一开始就没有正确打开。虽然我希望track->onOpen() 被调用......当轨道打开时。
我错过了什么吗?
【问题讨论】:
标签: c++ webrtc libdatachannel