随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

librtmp推流步骤介绍

一、概述

  案例:使用nginx+rtmpdump搭建一个简单的流媒体服务器,使用rtmplib来实现推流

  librtmp推流步骤:

    

 

 

二、代码示例

复制代码
/**
 * 开始推理
 * @param args
 * @return
 */
void *run_start(void *args) {
    char *path = static_cast< char *>(args);
    RTMP *rtmp = 0;
    do {
        rtmp = RTMP_Alloc();//给RTMP申请内存
        if (!rtmp) {
            LOGE("alloc rtmp 失败");
            break;
        }
        //初始化
        RTMP_Init(rtmp);
        //设置推流url
        int ret = RTMP_SetupURL(rtmp, path);
        if (!ret) {
            LOGE("设置RTMP推流地址失败:%s", path);
            break;
        }
        //设置超时时间
        rtmp->Link.timeout = 5;
        //启用RTMP写入功能
        RTMP_EnableWrite(rtmp);
        //链接服务器
        ret = RTMP_Connect(rtmp, 0);
        if (!ret) {
            LOGE("链接服务器失败:%s", path);
            break;
        }
        //链接流
        ret = RTMP_ConnectStream(rtmp, 0);
        if (!ret) {
            LOGE("链接流失败:%s", path);
            break;
        }
        //记录一个推流的开始时间
        //记录一个开始时间
        start_time = RTMP_GetTime();
        //表示可以开始推流了
        readyPushing = 1;
        packets.setWork(1);//设置队列生效
        RTMPPacket *packet = 0;
        while (readyPushing) {
            packets.pop(packet);
            if (!readyPushing) {
                break;
            }
            if (!packet) {
                continue;
            }
            packet->m_nInfoField2 = rtmp->m_stream_id;
            //发送rtmp包 1:队列
            // 意外断网?发送失败,rtmpdump 内部会调用RTMP_Close
            // RTMP_Close 又会调用 RTMP_SendPacket
            // RTMP_SendPacket  又会调用 RTMP_Close
            // 将rtmp.c 里面WriteN方法的 Rtmp_Close注释掉
            ret = RTMP_SendPacket(rtmp, packet, 1);
            releasePacketCallback(packet);
            if (!ret) {
                LOGE("发送RTMP数据包失败");
                break;
            }

        }
        releasePacketCallback(packet);
    } while (0);
    //
    isStart = 0;
    readyPushing = 0;
    packets.setWork(0);
    packets.clear();
    if (rtmp) {
        RTMP_Close(rtmp);
        RTMP_Free(rtmp);
    }
    delete (path);
    return 0;
}
复制代码

 

posted on   飘杨......  阅读(682)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示