H323plus的学习使用(2)——simple实现音视频通话
但该文章的解释大多不够详细,而且使用的版本不同,编译安装的环境也不同,导致了文章中所说的解决方法并不能够十分完美地解决,本人在按照该文章所说的方法,完成了simple音视频的加载同通信,故此记录一下解决的历程同思路。
首先是关于音频驱动的问题,在此先介绍一下ptlib关于音视频的结构先
原始的音频通道是在ptlib中定义的,但这仅仅是一个抽象的音频通道而已,实际上的音频驱动设备的调用是在ptlib中插件plugin中定义使用的,而插件的加载是通过程序运行时的动态库加载的,这涉及到的问题有几个,首先是配置时,需要具有对应音频驱动的支持,其次是对应驱动动态库要在对应路径下(配置安装时会 默认安装到指定目录)
首先安装必要的支持,对于linux系统,存在俩种选择,alsa和pulse俩种
命令行安装:记不太清楚了其实,因为在安装libsdl1.2-dev的时候,就会默认帮忙安装了的
接下去是关于视频驱动的问题了,视频驱动需要的开源库就比较多了些,首先对于视频读取的支持,需要v4l2,虽然默认编译一般都会产生这个动态库(明明配置信息显示没有支持的头文件的),就很神奇了,保险起见,还是安装吧
sudo apt-get install libv4l-dev
接下去是关于视频的输出问题,由于是使用显示器,最简单的输出是使用sdl输出,所以ptlib需要sdl支持,而且版本是1.2,不是2.0
sudo apt-get install libsdl1.2-dev
现在解决完音视频驱动的问题了,重新编译安装ptlib就可以了
但关于h323plus还存在音视频编解码器加载的问题,音频默认存在g711能力集功能,而h323plus在配置时,虽然视频存在H.261功能,但运行simple时,并没有加载出来,这是由于h323plus的编解码器同ptlib的插件类似,都是使用动态库加载实现的,所以需要进入h323plus插件目录,将h.261编译出来,并复制到对应的动态库加载目录
-
lewei@ubuntu:~/h323plus/plugins/video/H.261-vic$ make
-
make: 'h261-vic_video_pwplugin.so' is up to date.
-
lewei@ubuntu:~/h323plus/plugins/video/H.261-vic$ cp h261-vic_video_pwplugin.so ~/ptlib/lib_linux_x86_64/device/videoinput/
接下去就算完全初步解决音视频的编解码以及驱动问题了
改写simple,根据 linux下h323plus简单使用,实际上原来的代码貌似我也还没尝试过
接下去便是运行了,理想情况下,以下命令行应该能够完美执行音视频通信功能的(实际上就是你想太多了)】
simple简单使用的作者也完全没有对音频的进行清楚的讲解,接下去就是个人对于音频设备加载的理解了
-
服务端: $./simph323 -n -l -v V4L2 -s Default
-
客户端: $./simph323 -n 服务端IP地址 -v V4L2 -s Default
在simple的代码中的373-380时对于声音设备的设置,如果不存在-s等声音的设置,就默认设备,也就是跟上一条设置一样使用default,但问题便在于默认的default设置又是安装设备排序,而不是说什么能用的,默认最前的可能是Null Audio,所以你的声音设置不能够使用,所以最好的方法是使用--sound-in和--sound-out设置清楚声音设备
-
if (!SetSoundDevice(args, "sound", PSoundChannel::Recorder))
-
return FALSE;
-
if (!SetSoundDevice(args, "sound", PSoundChannel::Player))
-
return FALSE;
-
if (!SetSoundDevice(args, "sound-in", PSoundChannel::Recorder))
-
return FALSE;
-
if (!SetSoundDevice(args, "sound-out", PSoundChannel::Player))
-
return FALSE;
如果不知道存在什么声音设备可用的话,可以直接使用--sound-in或者--sound-out程序运行便会报错,并提示你可用的声音设备存在什么选择
-
@ubuntu:~/h323plus/samples/simple/obj_linux_x86_64$ ./simph323 -n -l --sound-in
-
simple Version 1.27.0 by H323Plus on Unix Linux (4.15.0-30-generic-x86_64)
-
2018/08/14 19:59:49.278 0 (0) Version 1.27.0 by H323Plus on Unix Linux (4.15.0-30-generic-x86_64) with PTLib (v2.10.9 (svn:0)) at 2018/8/14 19:59:49.278
-
Device for sound-in ("") must be one of:
-
"Null Audio"
-
"Default"
-
"PulseAudio"
-
"alsa_input.pci-0000_02_02.0.analog-stereo"
-
"*.wav"
-
"Ensoniq AudioPCI"
-
le@ubuntu:~/h323plus/samples/simple/obj_linux_x86_64$ ./simph323 -n -l --sound-out
-
simple Version 1.27.0 by H323Plus on Unix Linux (4.15.0-30-generic-x86_64)
-
2018/08/14 19:59:58.888 0 (0) Version 1.27.0 by H323Plus on Unix Linux (4.15.0-30-generic-x86_64) with PTLib (v2.10.9 (svn:0)) at 2018/8/14 19:59:58.888
-
Device for sound-out ("") must be one of:
-
"alsa_output.pci-0000_02_02.0.analog-stereo"
-
"Null Audio"
-
"Default"
-
"PulseAudio"
-
"*.wav"
-
"Ensoniq AudioPCI"
-
"Ensoniq AudioPCI (1)"
接下去就是按照可用的声音设备设置即可
-
客户端: ./simph323 -n 服务端IP地址 --sound-in "alsa_input.pci-0000_02_02.0.analog-stereo" --sound-out "alsa_output.pci-0000_02_02.0.analog-stereo" -v V4L2
-
服务端: ./simph323 -n -l --sound-in "alsa_input.pci-0000_02_02.0.analog-stereo" --sound-out "alsa_output.pci-0000_02_02.0.analog-stereo" -v V4L2
可能存在的问题是摄像头的开启问题,首先如果是vm下的虚拟机ubuntu,在设备那里连接对应的usb摄像头,其次是对于摄像头使用的问题,可以在虚拟机运行cheese,查看摄像头是否可用,如果显示没有可用设备,那么便是摄像头没有加载上,如果存在黑屏,那么便是摄像头的USB接口版本不对,将2.0改为3.0,或者3.0改为2.0即可