您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页librtmp改成异步

librtmp改成异步

来源:爱问旅游网
一 一般推流客户端模型
推流客户端分为两个线程,一个线程采集数据,放到缓冲区,另一个线程发送rtmp消息,一个rtmp消息
是一个flv tag,也就是一帧。
如果推送线程阻塞卡住,会导致公共数据缓冲区满,从而导致数据帧不连续,
由于h2帧之间是前后依赖参考的,所以直接会导致播放异常。


二 解决办法
把librtmp改成异步,发送失败马上重新初始化rtmp链接,
从头开始推送数据。

三 附上代码
int RTMP_SwitchToNonBlocking(RTMP *r)
{
    //http mode do not open the non-blocking.
if (r->m_sb.sb_socket != -1 && !(r->Link.protocol & RTMP_FEATURE_HTTP)){
int val = 0;
    int fd_ = r->m_sb.sb_socket;


    if ((val = fcntl(fd_,F_GETFL,0)) < 0)
    {
        return -1;
    }


    val |= O_NONBLOCK;
    if (fcntl(fd_,F_SETFL,val) == -1)
    {
        return -1;
    }
r->m_switchToNonBlock = 1;
return 1;
}


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务