人生似水岂无涯,浮云吹作雪,世味煮成茶...

PJSIP笔记之二视频通话

2022年11月05日 21:08    0 人评论    657 人阅读

打开视频支持

环境:Ubuntu18.04

上一节实现了sip的拨号功能测试,但只能音频通话,那么如何实现视频通话呢?

在 pjlib\include\pj\config_site.h 文件,增加视频的支持:

#define PJMEDIA_HAS_VIDEO		1

安装视频编解码相关依赖库

$ sudo apt install libv4l-dev libspeex-dev libx264-dev libx265-dev libavcodec-dev libavformat-dev libswscale-dev libasound2 alsa-utils alsa-base ffmpeg libsdl2-dev

编译

配置并编译:

$ ./configure
$ make dep
$ make 

测试

1、运行

执行编译生成的 pjsua-x86_64-unknown-linux-gnu 可执行文件:

$ ./pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu

输入 vid enable 来启用视频通话:

vid enable

为了能够在 Ubuntu 中看到手机传来的视频,需要输入以下命令:

vid acc autorx on

为了能够在手机看到 Ubuntu 传来的视频,需要输入以下命令:

vid acc autotx on

2、使用客户端打电话测试

使用 SIP 安卓客户端 Linphone 拨打电话测试,Ubuntu PJSIP 服务端部分打印信息提示如下:

From: <sip:android@192.168.0.12>
To: <sip:ubuntu@192.168.0.103>
Press a to answer or h to reject call

输入 a 应答来电,提示 Answer with code (100-699) (empty to cancel): 时,输入 200 应答码进行接听。

可以看到 Android Linphone 客户端上出现了摄像头的视频画面:

avatar

同时和 Ubuntu 里弹出了视频窗口显示手机摄像头的视频画面。

3、可能遇到的问题

1)Android Linphone 客户端不能显示对方的视频,查看 PJSIP 的打印信息如下:

15:13:05.002   vstdec0x55e107888fd8  codec decode() error: Bad or corrupted bitstream (PJMEDIA_CODEC_EBADBITSTREAM)
15:13:05.031   vstdec0x55e107888fd8  codec decode() error: Bad or corrupted bitstream (PJMEDIA_CODEC_EBADBITSTREAM)
15:13:05.101   vstdec0x55e107888fd8  codec decode() error: Bad or corrupted bitstream (PJMEDIA_CODEC_EBADBITSTREAM)
15:13:05.168   vstdec0x55e107888fd8  codec decode() error: Bad or corrupted bitstream (PJMEDIA_CODEC_EBADBITSTREAM)
15:13:05.202   vstdec0x55e107888fd8  codec decode() error: Bad or corrupted bitstream (PJMEDIA_CODEC_EBADBITSTREAM)
15:13:07.861      udp0x7fe3e0017520 !Remote RTP address switched to 192.168.0.3:9078

为了确认虚拟机的摄像头是否能正常显示,打开 Cheese 软件,发现是黑屏,而摄像头指示灯正常亮起。这种情况需要修改虚拟机USB兼容设置, 改为 USB3.1。

avatar


如果文章对您有所帮助, 请随意打赏! 您的支持将鼓励我写出更好的文章!

发表评论 已发布 0