pjsua demo运行怎么同时 显示被呼叫方和呼叫方的视频
时间: 2024-09-12 19:10:49 浏览: 53
PJSUA是一款强大的开源多媒体通信库,主要用于实时音视频应用程序的开发,包括VoIP电话、视频会议等。要在PJSUA Demos中同时显示双方的视频,通常需要设置多方会话并配置相应的视屏窗口。
以下是基本步骤:
1. **设置多方会话**:
- 在你的应用代码中,创建一个支持多方通话的会话(Session),而不是简单的点对点连接。
```cpp
pjmedia_channel* channel = pjmedia_create_audio_channel(transport);
pjmedia_session* session = pjmedia_endpt_create_session(endpt, PJMEDIA_SESSION_TYPE_RTP);
pjmedia_multiconnection* conn = pjmedia_conn_connect(session, "multiconnect");
```
2. **添加视频媒体端点**:
- 添加视频设备,并将其关联到session。
```cpp
pjmedia_codec_vid inst;
inst.id = pjmedia_codec_get_default_encoder(PJ_CODEC_VID_H264); // 或其他编码器
pjmedia_endpt_register_codecs(endpt, &inst);
pjmedia_vid_dev_info devinfo;
pjmedia_device_query(viddev_index, &devinfo);
pjmedia_endpoint_add_video_device(session, devinfo.index);
```
3. **视频渲染**:
- 创建两个或更多的VideoWindow实例,分别代表被呼叫者和呼叫者,然后在接收到视频流时更新它们。
```cpp
pjmedia_window_cfg cfg;
pjmedia_window* caller_win = pjmedia_window_create(pjmedia_endpt_get_media_toolbox(endpt), &cfg);
pjmedia_window* callee_win = pjmedia_window_create(...); // 类似地创建另一个窗口
pjmedia_frame frm;
while (pjmedia_stream_read(session, &frm) >= 0) {
if (pjmedia_frame_is_video(&frm)) {
pjmedia_window_update(caller_win, &frm);
pjmedia_window_update(callee_win, &frm);
}
}
pjmedia_window_destroy(caller_win);
pjmedia_window_destroy(callee_win);
```
4. **处理媒体协商**:
- 调整媒体配置以适应视频交互,比如分辨率、码率等,这通常在`pjmedia_config_set()`函数中完成。
阅读全文