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

来源:互联网 发布:lol玩家数量 知乎 编辑:程序博客网 时间:2024/06/05 07:22


    当时真的是需要这样的一个博文来指导做这个功能模块,可惜网上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
原创粉丝点击