srt转rtmp(mpegts -> flv)

news2024/11/27 18:48:08

一、使用ffmpeg拉流srt转rtmp推流过程中遇到音视频问题

1、音频

    虽然从mpegts到flv都是AAC格式,但是mpegts多了ADTS头,在flvenc的时候会报错误:

    Malformed AAC bitstream detected: use the audio bitstream filter 'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)

    修复方式:添加avstreamfilter:aac_adtstoasc

        const AVBitStreamFilter *filter = NULL;
        filter = av_bsf_get_by_name("aac_adtstoasc");
        if (!filter) {
            TLOGE(m_e2eId.c_str(), "Unknown bitstream filter\n");
            return;
        }
        ret = av_bsf_alloc(filter, &m_bsfAacContext);
        if (ret < 0) {
            TLOGE(m_e2eId.c_str(), "Error allocating a bitstream filter context\n");
            return;
        }

-----------------------------------------------------

        if (stream->codecID == AV_CODEC_ID_AAC && m_bsfAacContext != nullptr) {
                int ret;
                ret = av_bsf_send_packet(m_bsfAacContext, &opkt);
                if (ret < 0) {
                    TLOGE(m_e2eId.c_str(), "av_bsf_send_packet failed");
                    return ret;
                }
                ret = av_bsf_receive_packet(m_bsfAacContext, &opkt);
                if (ret < 0) {
                    TLOGE(m_e2eId.c_str(), "av_bsf_receive_packet failed");
                    return ret;
                }
            }

2、视频

    视频会多出nalu类型为9的AUD,去除方法为使用avstreamfilter:h264_metadata

 

        const AVBitStreamFilter *filter = NULL;
        filter = av_bsf_get_by_name("h264_metadata");
        if (!filter) {
            TLOGE(m_e2eId.c_str(), "Unknown bitstream filter\n");
            return;
        }
        ret = av_bsf_alloc(filter, &m_bsfH264Context);
        if (ret < 0) {
            TLOGE(m_e2eId.c_str(), "Error allocating a bitstream filter context\n");
            return;
        }
        av_opt_set_int(m_bsfH264Context->priv_data, "aud", 2, 0); // 2 REMOVE
-----------------------------------------------------------------
            if (stream->codecID == AV_CODEC_ID_H264 && m_bsfH264Context != nullptr) {
                int ret;
                ret = av_bsf_send_packet(m_bsfH264Context, &opkt);
                if (ret < 0) {
                    TLOGE(m_e2eId.c_str(), "av_bsf_send_packet failed");
                    return ret;
                }
                ret = av_bsf_receive_packet(m_bsfH264Context, &opkt);
                if (ret < 0) {
                    TLOGE(m_e2eId.c_str(), "av_bsf_receive_packet failed");
                    return ret;
                }
            }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA克隆

更多精彩 先案例后讲解&#xff0c;这里是代码教父&#xff0c;今天讲解JAVA中的clone 目录 什么是clone如何实现clone 浅克隆深克隆小结 什么时候使用cloneclone 相关类库的实现分析 什么是clone 在Java中&#xff0c;克隆&#xff08;Clone&#xff09;指的是创建一个现有对…

linux命令与shell编程

文章目录 一、概念linux内存嵌入式嵌入式层次图判断小端和大端 二、linux系统操作命令ls查看cd 命令pwd命令touch 创建文件mkdir 创建目录chmod 修改权限man命令cp 拷贝mv 移动rm命令cat命令echo 命令tty命令->查看当前终端号clear 命令ldd命令 ->查看文件依赖哪些库prin…

make makefile

文章目录 make是一个命令makefile or Makefile是一个当前目录下的文件使用&#xff1a;生成可执行文件清理 作用依赖关系依赖方法make会自动推导makefile中的依赖关系栈式结构为什么清理的时候要make 加上clean?make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖…

Python第二天之容器学习

1.List 容器无非就增删改查 1.添加 name_list [aaa,bbb,ccc,ddd] name_list.append(b1) name_list.insert(1,xxx) print(name_list)append 是在后面追加 而insert是自己定义下表插入 name_list [aaa,bbb,ccc,ddd] name_list2 [qqq,222,111] name_list.extend(name_list…

python 面向对象编程

文章目录 前言如何理解面向对象编程在 python 中如何使用面向对象编程定义类创建对象self添加和获取对象属性添加属性类外添加属性类中添加属性 访问属性类外访问属性类中访问属性 魔法方法__ init __() 方法__ str __()方法__ del __() 方法 前言 大家好&#xff0c;前面我们…

吐血整理,自动化测试Yaml框架配置文件-深入详解(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 YAML详解 YAML它…

上位机智能通信统一解决方案OPC应用

上位机应用开发中的通信需求 通信过程/通信协议多样性 通信统一化处理方案&#xff1a;OPC&#xff08;Open Platform Communications&#xff09;、OPC UA&#xff08;OPC Unified Architecture&#xff09; 基于西门子1500PLC的OPC服务器对接 internal class Program{stati…

BTP Integration Suite学习笔记 - (Unit1) Developing with SAP Integration Suite

今天决定跟着SAP官方资源系统学习一遍BTP Itegration Suite。找到两个Learning Journey: SAP Integration Suite Foundation 和 Solution Integration on SAP BTP。还有一个更大的roadmap,Integration Suite的官方内容在这里都可以链接到。 认证暂时只找到了一个比较基础的&…

干撸Spring,太难了!阿里P8级别「Spring源码全解析」带你起飞

有朋友跟我反映说&#xff0c;最近想详细学习Spring源码&#xff0c;可网上查到的文章都很一般&#xff0c;有没有大牛分享自己Spring实践与源码结合的方法&#xff1f; 干撸Spring&#xff0c;太难了&#xff01;难到你不知道从哪下手&#xff01; 为什么 Spring 天天用&…

云和DevOps如何帮助加速数字化转型?

1.云和 DevOps&#xff1a;概述 数字化转型已成为寻求在现代时代蓬勃发展的企业的一项关键举措。为了加速这一转型&#xff0c;组织正在利用云计算的力量并采用DevOps实践。云计算提供可扩展且灵活的基础架构&#xff0c;而 DevOps 则支持协作和持续交付的文化。本文将探讨云和…

ETHERCAT转PROFIBUS网关连接ethercat网线接口定义

远创智控YC-DP-ECT&#xff0c;是自主研发的一款PROFIBUS从站功能的通讯网关&#xff0c;它的主要功能是将ETHERCAT设备接入到PROFIBUS网络中。 YC-DP-ECT这个小小的网关可不简单&#xff0c; 连接到PROFIBUS总线中做为从站使用&#xff0c;连接到ETHERCAT总线中做为从站使用…

实现企业安全云转型的思考

如今大部分企业都在开展数字化数字化转型&#xff0c;云计算一直在其中起着主导地位&#xff0c;因而组织面临着双重挑战&#xff1a;如何将业务无缝迁移至云上&#xff0c;并确保这种转型的安全。 虽然云的使用保证了可扩展性、成本效率和生产力的提高&#xff0c;但上云过程…

【C++顺序容器】deque的成员函数和非成员函数

目录 deque 1. deque的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 空间配置器 2. deque的非成员函数 deque deque&#xff08;通常发音为 &…

告别VLAN孤岛,两招让你轻松实现互访

实际网络中&#xff0c;经常会有VLAN之间互访的需求。 很多网工通常会选择一些方法&#xff0c;来实现不同VLAN间主机的相互访问&#xff0c;比如说Vlanif、单臂路由。 今天就教你轻松实现VLAN间互访。 01-通过子接口实现 VLAN 间的互访 在二层交换环境下&#xff0c;一个VLA…

线程是什么

目录 一、教材观点 二、简述进程是如何运行的 简述进程切换原理&#xff1a; 三、线程是什么 线程底层是如何被管理的 四、重讲线程概念理解 一、教材观点 教材观点&#xff1a; 线程是一个执行分支&#xff0c;执行分支更细&#xff0c;调度成本更低。线程是进程内部的…

Android SystemServer 启动流程分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、SystemServer 启动的服务有哪些二、SystemServer启动总体流程概述三、SystemServer 如何启动&#xff0c;是谁启动的&#xff1f;四、 SystemServe…

解决哈希冲突

1、HashMap引入了链式寻址法来解决hash冲突&#xff0c;冲突的key&#xff0c;HashMap把这些key组成一个单向链表&#xff0c;然后采用尾插法把key保存到链表的尾部。 使用二次扰动函数&#xff08;hash函数&#xff09;来降低哈希冲突的概率&#xff0c;使数据平均分布。 pu…

【VUE】Unterminated template literal:拼接字符串包括<script></script>时报错误

vue拼接字符串包括时报错误提示Unterminated template literal vue拼接字符串包括script标签时报错误提示Unterminated template literal解决方法加反斜杠就可以&#xff0c;在script结束标签里边加反斜杠<\/script> 代码 htmlData: <div id"b0e5c00cc51e4a4…

svg图标颜色随父元素变换

给svg加上一下样式 fill: currentColor;注&#xff1a;为什么有的svg设置了fill: currentColor;还是一样不生效&#xff1f; 用电脑自带的txt或者代码开发工具&#xff08;如&#xff1a;HbuilderX&#xff09;打开svg文件 全局搜索 fill 把fill指定颜色去掉 保存就OK了

存储函数,存储过程的应用

查看触发器 mysql> show triggers \G *************************** 1. row ***************************Trigger: student_insert_triggerEvent: INSERTTable: studentStatement: BEGINupdate student_total set totaltotal1;ENDTiming: AFTERCreated: 2023-07-11 16:13:51…