iOS基于Audio Queues,Speex,Rtmp的Voip客户端


项目地址:https://github.com/illuspas/SayHey

说明
rtmp://192.168.0.10/live 为流媒体服务器地址及apppath
sample左侧为发布流名称,右侧为播放流名称,如果一样,则自己播自己发布的流
两台设备发布不同的流名称,并且播放对方的流名称,则可实现网络语音对讲.

注:本例及Android版SayHi皆为采集播放、编解码、传输功能库及演示程序。完整的voip还应该包括用户系统,回话管理,消息收发等,这都不在本例研究范畴。
商业版流媒体服务端可以选择fms,wowza,evostreamer
开源版:red5nginx-rtmp-modulesrs
用户与回话管理可以搭配OpenFire(XMPP协议)实现。
使用Node.js+Socket.io也是不错的选择,目前撸主有个项目就是使用这套方案,扩展性,定制性都非常强。跨平台支持优势尤其体现在web上都完全超越openfire。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: iOS基于Audio Queues,Speex,Rtmp的Voip客户端

22 评论

  1. 下载的demo编译报错啊,是Undefined symbols for architecture i386:
    "_RTMPPacket_Alloc", referenced from:
    _send_pkt in RtmpClient.o
    "_RTMPPacket_Free", referenced from:
    _send_pkt in RtmpClient.o这样的错误,请楼主帮忙解决一下,谢谢了

  2. 你好,借用你的这个程序进行rtmp音频接收播放。现在遇到一个问题:音频时间播放时间长会出现没有声音的现象。但是数据接收仍然在接收。不知道你遇到没有,有啥解决方案么?

  3. 要开发一个ios应用与pc浏览器上的flash程序连接进行视频通信,请问,根据您这个示例,可以做出来吗?

  4. 问题找到了,请复查下 AudioRecoder.m 57行,请斟酌下runloopmode , 如果是defaultmode,则我滑动视图,推流会中断

  5. 用flash语言发布的rtmp音频流,我用这个demo接受直播流是断断续续的,而且声音也不清晰,这个改怎么解决啊

      1. 我改你的这个demo该怎么改,as开发的已经是弄好了的,需要我这边改,

      2. 就是我做的是上课时老师和学生音频讲课和回答问题,就需要用rtmp协议,你的这个demo刚刚好,就是as开发(flash)的发布音频流,我这边接收听不清,断断续续的,然后我这边发布音频流,as开发的接收也是断断续续听不清,研究了好多天了也没有改好,用你的这个demo该怎么改,谢谢!!

        1. 解码部分 speex如果遇到一包多帧 采用下面的方法解码
          static int decode_frame_spx(nm_av_opt* opt, uint8_t* inData, uint32_t inDataSize, uint8_t** outData) {
          hdn_adc_spx_t* s = (hdn_adc_spx_t*)opt->handle;
          int consumed = 0;
          if (speex_bits_remaining(&s->bits) < 5 || speex_bits_peek_unsigned(&s->bits, 5) == 0xF) {
          speex_bits_read_from(&s->bits, (char*)inData, inDataSize);
          consumed = inDataSize;
          }
          if(speex_decode_int(s->dec_state, &s->bits, s->output_buffer) == 0 ) {
          *outData = malloc(opt->buffer_size);
          memcpy(*outData, s->output_buffer, opt->buffer_size);
          return consumed;
          } else {
          return -1;
          }
          }

          外边调用判断consumed 是否 == inDataSize 了,没有的话继续传这一包的数据进来解码。
          ps:这是我一段商用版本的代码,不能直接用在这个项目,但解决方法就在此,多阅读speex文档你就清楚了。

  6. 您好!就是demo在运行时手机锁屏,然后打开会崩掉,请问一下是啥原因呀!

  7. 你好,我用你这个demo推流语音聊天的时候为什么声音是出现在听筒而不是麦克风

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据