linux下h323plus简单使用

最近使用H323Plus,以前从未接触过,网上有些许资料,但是对于从0开始学习H323Plus的人理解有些困难,我作为初学者,在此介绍从编译到Demo实现简单文字,音频,视频聊天的方法,供初学者借鉴,关于原理,结构等请参考网上其他资料。

  • 编译
  • 环境变量
  • simple编译运行
  • 视频编码插件
  • simple视频聊天

编译

下载PTLib和H.323 Plus Core,官方网站很容易下载:http://www.h323plus.org/source/。

我下载这两个库后存放到目录/home/zht/h323plus/下,文件夹名分别为ptlib和h323core,下面是初步的编译命令:

    $cd h323plus/ptlib
    $./configure --prefix=$HOME/usr
    $make && make install
在编译h323core之前,需要添加一个环境变量:
    export PKG_CONFIG_PATH=$HOME/usr/lib/pkgconfig
然后进行h323core的编译:
    $cd ~/h323plus/h323core
    $./configure --prefix=$HOME/usr
    $make && make install
我编译的版本中,h323core的make步骤有个问题,出现下面的错误:
    /home/zht/h323plus/h323core/openh323u.mak:67: /home/zht/usr/make/ptbuildopts.mak: No such file or directory
    /home/zht/h323plus/h323core/openh323u.mak:96: /home/zht/usr/make/ptlib.mak: No such file or directory
    make: *** No rule to make target `/home/zht/usr/make/ptlib.mak'.  Stop.
我的方法是修改openh323u.mak文件中的PTLIBDIR=/home/zht/usr为PTLIBDIR=/home/zht/h323plus/ptlib,这种方法虽然不一定标准,但是编译对结果确实没有问题。我尝试将ptlib.mak拷贝到/home/zht/usr下,但是后面对编译仍然有问题,所以使用了这种方法。这个错误可能是我代码对原因,如遇到可照此解决,如未遇到忽略即可。

环境变量

算上在编译h323core之前添加的一个环境,.bash_profile下面应该有如下环境变量,程序可正常运行:
    export PKG_CONFIG_PATH=$HOME/usr/lib/pkgconfig
    export OPENH323DIR=$HOME/h323plus/h323core
    export PTLIBDIR=$HOME/h323plus/ptlib
    export LD_LIBRARY_PATH=$HOME/usr/lib

simple编译运行

此时可以编译h323core下的一个示例程序:
    $cd ~/h323plus/h323core/samples/simple
    $make
运行需要找两台linux机器,分别运行命令:
服务端:    $./obj_linux_x86_64/simph323 -n -l -v FakeVideo
客户端:    $./obj_linux_x86_64/simph323 -n 服务端IP地址 -v FakeVideo
此时输入内容回车可以在对端显示,由于此示例必须有视频支持,所以在命令中加了假的视频-v FakeVideo。如果linux的音频和麦克可以正常使用,使用下面的命令可以进行音频通话:
服务端:    $./obj_linux_x86_64/simph323 -n -l -v FakeVideo -s Default
客户端:    $./obj_linux_x86_64/simph323 -n 服务端IP地址 -v FakeVideo -s Default

视频编码插件

研究h323plus的代码不难发现,代码中有大量plugin相关文件,我开始也总是找不到视频编码相关的内容,原来需要单独编译插件,然后放到相应目录。
    $cd ~/h323plus/h323core/plugins/
    $./configure
    $make
按照默认编译了H261编码的插件,将h261-vic_video_pwplugin.so放在/home/zht/usr/lib/ptlib-2.12.8/目录下的子文件夹下,simple启动时会自动检索该目录下所有编码插件,看其目录结构可知,最好放在其下的devices/videoinput下,这下面都是视频相关的编码插件。这时候启动,能力列表会增加H.261-CIF{sw} <3>这个能力。simple程序中的OpenVideoChannel函数才有执行的可能性。

simple视频聊天

接下来就是开始视频聊天功能,关键处理就在SimpleH323EndPoint::OpenVideoChannel中,经过各种尝试,总结后进行如下3个修改即可打开视频设备开始向对端发送视频数据:
1)将Open放到设置格式以前
2)将设置对SetFrameSize修改为SetFrameSizeConverter
3)添加Start方法,此3步经过修改后如下:
      if (!device->Open(deviceName, TRUE)) {
         PTRACE(1, "Failed to open the video device \"" << deviceName << '"');
         return FALSE;
      }
      if (!device->SetFrameSizeConverter(codec.GetWidth(), codec.GetHeight()) ||
          !device->SetFrameRate(codec.GetFrameRate()) ||
          !device->SetColourFormatConverter("YUV420P")) {
           PTRACE(1, "Failed to configure the video device \"" << deviceName << '"');
           return FALSE;
      }
      if (!device->Start()) {
          PTRACE(1, "Failed to open the video device \"" << deviceName << '"');
          cout<<"41"<<endl;
          return FALSE;
      }
修改完成后,编译simple,使用下面的命令运行:
服务端:    $./obj_linux_x86_64/simph323 -n -l -v V4L2 -s Default
客户端:    $./obj_linux_x86_64/simph323 -n 服务端IP地址 -v V4L2 -s Default
此时摄像头是开启的,但是接收端并没有效果,是因为视频的输出设备没有,又是一段时间苦找,并且结合网上简单对拾取摄像头然后显示对例子,发现了SDL对用途,并且在ptlib中就有关于SDL的使用,于是返回头去重新编译ptlib,前提是linux系统安装了SDL的支持,可以使用yum install命令安装SDL.x86_64,SDL-devel.x86_64。ptlib和h323core并不需要全部重新编译,重新configure配置ptlib,添加SDL支持,然后make && make install即可。
    $cd ~/h323plus/ptlib/
    $./configure --prefix=$HOME/usr --enable-SDL
    $make && make install
    $cd ~/h323plus/h323core/
    $rm lib/libh323_x86_64_*
    $make && make install
代码中需要添加头文件:
    #include <ptclib/vsdl.h>
然后如果是接收视频数据时,将device重新赋值:
  PVideoDevice * device = isEncoding ? (PVideoDevice *)PVideoInputDevice::CreateDeviceByName(deviceName)
                                 : (PVideoDevice *)PVideoOutputDevice::CreateDeviceByName(deviceName);
  if(!isEncoding){
      PVideoOutputDevice_SDL *vfile = new PVideoOutputDevice_SDL();
      device = (PVideoDevice *)vfile;
  }
重新编译运行,但命令改为如下:
服务端:    $./obj_linux_x86_64/simph323 -n -l -v V4L2 -s Default
客户端:    $./obj_linux_x86_64/simph323 -n 服务端IP地址 -v V4L2 -s Default
即可显示视频。

本文经过实践后,总结所写,难免有没遇到的情况发生,但是总体方法应该无误,希望能给研究h323plus的新手有所帮助。经过改写的simple在优快云资源http://download.youkuaiyun.com/detail/carl_cheer/8664131


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值