FireBreath开发实时播放接口(Yate + SIP + FFMPEG + SDL)


    当时真的是需要这样的一个博文来指导做这个功能模块,可惜网上FireBreath的资料很少,本身对C++的不是很熟悉,所以一路上是不断尝试和摸索,好在马马虎虎的将这个模块实现了,现在记录下来。

   首先说明一点,我们的Yate的 SIP Server和终端的SIP Client以及Android的上面的SIP Client还有Windows PC终端的SIP Client和Linux PC终端的SIP Client都实现了。

   所以大家的是建议借助这个现有的条件去实现web service实时播放的功能。

   加上刚对FireBreath认识,尝试在这上面调用SIP,RTP,FFMPEG以及SDL。

   期间遇到的问题,断断续续在其他的文章里面有一些记录了,不知道为什么,RTP好像用不了,收包的时候导致插件直接挂掉了。后来直接使用的UDP,去掉了前面的12个字节。

   通过FireBreath注册了3个接口给界面的JS调用,SipRegister();SipInvite();SipBye();

   其余的功能就是在这三个函数下面启动的线程去完成的,在SipRegister里面调用一个接受SIP Message的线程SipMonitor;在SipMonitor里面接受到200OK的时候,也就是EXOSIP ANSWER里面创建了AudioRecv、VideoRecv、AudioPlay和VideoPlay的线程;

   SipInvite就是发送Invite消息,请求获取实时视频数据;

   SipBye是发送Bye消息,请求挂断本次视频请求;

   在AudioRecv和VideoRecv线程里面进行收取AudioData和VideoData,并将他们写入环形缓冲区AudioCirBuf和VideoCirBuf;

    在AudioPlay和VideoPlay线程里面将环形缓冲区AudioCirBuf和VideoCirBuf的数据取出来通过FFMPEG解码,通过SDL播放出来;

    至此大概框架就出现了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值