首页 > 其他分享 >librtmp推流步骤介绍

librtmp推流步骤介绍

时间:2022-08-25 09:36:18浏览次数:133  
标签:packet 推流 步骤 ret break rtmp librtmp RTMP

一、概述

  案例:使用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;
}

 

标签:packet,推流,步骤,ret,break,rtmp,librtmp,RTMP
From: https://www.cnblogs.com/tony-yang-flutter/p/16623132.html

相关文章

  • Windows下使用ffmpeg录制摄像头+录屏+录系统音+录麦克风音,生成本地视频或推流
    实操:录屏:ffmpeg.exe-r1-fgdigrab-idesktop-vcodeclibx264out.mp4 录制麦克风声音和摄像头的视频:ffmpeg-fdshow-ivideo="USB2.0PCCAMERA"-fdshow-......
  • 【java】使用opencv获取摄像头并推流
    1、环境OSX12.5Java8vscode 2、脚本JavaCvCameraTest.javaimportjavax.swing.JFrame;importorg.bytedeco.ffmpeg.global.avcodec;importorg.bytedeco.java......
  • lvm 扩容步骤
    LVM知识扩展之lvm扩容(xfs)流程如下1:创建新的物理卷:pvcreate硬盘位置2:给卷组扩容:vgextend卷组名物理卷位置3:给逻辑卷扩容:lvextend-L+大小逻辑卷位置pvdisplay#查......
  • Linux移植三步骤
    Linux系统由U-boot、Linuxkernel、rootfs这三部分构成,移植顺序如下: 1、移植BootLoader代码,即U-Boot,用于启动Linux内核  2、移植Linux内核,Linuxkernel  3、......
  • modelsim 单独仿真步骤
    1.首先需要明确一点:modelsim与quartusii联合仿真时,利用quartusii可以在par-->simulation-->modelsim文件夹下面自动生成testbench模板,文件名为"工程名.vt",例如......
  • elementui步骤条页面开发案例
    <template><divid="bdy"><divclass="tbody"><el-steps:active="active"finish-status="success"><el-steptitle="创建项目"></el-step>......
  • ik分词器安装步骤
    1.在github中打开ik分词器  2.打开Release界面找到相应的发行版  3.下载相应的发行版(如果下载的是Sourcecode.zip则要进入项目目录,进行编译打包mvnclean=>......
  • 将本地项目托管到码云步骤
    初始化本地项目将本地项目交由git管理在项目根目录执行命令:gitinit将项目中所有文件添加到暂存区gitadd.将暂存区内容提交到仓库区gitcommit-m"initproject"......
  • vagrant ssh登录虚拟机步骤
    进入操作过vagrantinit的目录,即有vagrantfile的文件如果有非vagrant ssh登录的方式登录了virtualbox的,请退出后操作执行:vagrantup  --启动virtualbox选择网络适......
  • jmeter导出报告步骤
    第一步:执行完脚本,有聚合报告第二步:新建一个文件夹,再建一个后缀为.jtl的文件。在聚合报告页面,选择刚建的文件夹进行保存   第三步:选择工具-GenerateHTMLreport ......