libdatachannel使用总结

libdatachannel 介绍

libdatachannel 是一个 C++ 实现的 WebRTC 库,实现了传输和rtp包的解析和拆分,但是 C++ 使用起来是比较复杂的,所以他又提供了 C 语言的 API 函数。他并不是用 C 语言把整个项目重写了,而是用 C 语言包装一下 C++ 的函数,然后提供给上层使用。

整个 cpi 封装的实现都在 capi.cpp 文件里面`

拉流实现原理

在这里插入图片描述

libDataChannel拉流

PeerConnection::initDtlsTransport()

bind -》 PeerConnection::forwardMessage 普通消息

bind -》 PeerConnection::forwardMedia 媒体消息

agent_input()
->IceTransport::RecvCallBack()
->Transport::incoming()->Transport::recv()
->DtlsTransport::incoming()

->DtlsTransport::doRecv()->demuxMessage()->recvMedia()
->PeerConnection::forwardMedia()->dispatchMedia()
->Track::incoming()
    ->MediaHandler::incomingChain()//链式调用
        ->H264RtpDepacketizer::incoming() //组帧
    分发帧->Channel::triggerAvailable()
->Track->flushPendingMessages() //回调给上层

拉流调用流程

m_pPeerConnection = new rtc::PeerConnection(cfg);
//audio
rtc::Description::Audio audio_description(audio_mid, rtc::Description::Direction::RecvOnly);
audio_description.addOpusCodec(audio_payload_type);
m_pAudioTrack = m_pPeerConnection->addTrack(audio_description);
auto depacketizer = std::make_shared<rtc::OpusRtpDepacketizer>();
m_pAudioTrack->setMediaHandler(depacketizer);
m_pAudioTrack->onFrame([this](rtc::binary data, rtc::FrameInfo frame) {
		this->onFrameAudio(data, frame);
});
//video
rtc::Description::Video video_description(video_mid, rtc::Description::Direction::RecvOnly);
video_description.addH264Codec(video_payload_type);
video_description.setBitrate(3000);
auto depacketizer = std::make_shared<rtc::H264RtpDepacketizer>();
m_pVideoTrack = m_pPeerConnection->addTrack(video_description);
m_pVideoTrack->setMediaHandler(depacketizer);
m_pVideoTrack->onFrame([this](rtc::binary data, rtc::FrameInfo frame) {
		this->onFrameVideo(data, frame);
});
//准备offer
m_pPeerConnection->setLocalDescription();

//发送offer请求到服务
std::map<std::string, std::string> headers;
auto offer_sdp = std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值