您的位置:首页 > 运维架构

WebRTC中最简单loopback摄像头&麦克风的例子

2015-11-12 15:53 253 查看
peerconnection_client本地回放原理

默认的client已经集成了本地回放代码,但是要想实现该功能,需要做少许修改。

默认的点击界面上的"connect"按钮是连接到另一台peer,其最终执行的函数为Conductor::StartLogin。

现在我们想要连接到本地,所以需要将该函数修改为:

void Conductor::StartLogin(const std::string& server, int port) {

InitializePeerConnection();

ReinitializePeerConnectionForLoopback();

return;

// old

if (client_->is_connected())

return;

server_ = server;

client_->Connect(server, port, GetPeerName());

}

//

InitializePeerConnection做了这么几个工作:

1. 创建peerconnection工厂实例

2. 创建PeerConnection

3. 添加流

这里需要注意的是调用AddStreams的时候,会调用回调Conductor::OnAddStream,在该回调最终会回调到UIThreadCallback里面,并将摄像头输入信号拷贝一份到RemoteRenderer里面。

代码如下:

void Conductor::UIThreadCallback(int msg_id, void* data)

{

// ...

case NEW_STREAM_ADDED: {

webrtc::MediaStreamInterface* stream =

reinterpret_cast<webrtc::MediaStreamInterface*>(

data);

webrtc::VideoTrackVector tracks = stream->GetVideoTracks();

// Only render the first track.

if (!tracks.empty()) {

webrtc::VideoTrackInterface* track = tracks[0];

main_wnd_->StartRemoteRenderer(track);

}

stream->Release();

break;

}

// ...

}

而ReinitializePeerConnectionForLoopback会创建一个Offer,作为PeerConnection的提供者。

代码如下:

bool Conductor::ReinitializePeerConnectionForLoopback() {

// ...

peer_connection_->CreateOffer(this, NULL);

// ...

}

调用CreateOffer会调用到Conductor::OnSuccess函数,在这里会根据loopback_的值设定耳机回放麦克风内容。

这样就完成了远端和本地播放的是同一个视频。

并且我将回放本地摄像头的代码简化了。

有需要的可以来这里下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: