ffmpeg本地TS和M3U8播放流程及调试过程

 本地TS播放过程

本地M3U8播放过程

 http工作流程

 

 http分两个步骤

1、获取m3u8文件,这个是在哪里开始读的?

2、获取data数据,这个是从http_read开始读,可以通过修改这里实现buffer数据和引擎对接

3、s->user_agent,s->off,s->end_off,s->seekable这些是什么时候赋值的?

从 http_get_line获取到

4、需要修改的几个地方

1)http_get_line->ffurl_read

获取header

这个就模拟,主要是拿到长度

2)http_buf_read->ffurl_read

获取真正数据

调试过程

1、demo测试

通过URL传m3u8索引文件夹,真正TS数据通过读取本地文件来获取

修改:

http_buf_read

 即可

2、m3u8通过buffer方式获取

先拿到m3u8数据

hls以及能解析得到playlist,但是获取第一个block数据后还会去获取m3u8的数据,也就是之前的m3u8的connect还没断开

通过log看到header少了Connection: close,以及一个回车,通过添加Connection: close解决了m3u8会多次连接的问题,但会出现

 导致这个原因是因为读完第一个block后,没继续读下个block?

去掉之前私有协议的seek逻辑,在ijk_mediasource_readAt函数里去掉if (pointer_pos != position )

这么修改后,能播放了,看到希望咯

3、播放10左右,就把索引表的所有TS读完了,啥情况?

是因为ffurl_read有阻塞?而ijk_mediasource_readAt没有阻塞?

下面分析ffurl_read

int ffurl_read(URLContext *h, unsigned char *buf, int size)
{if (!(h->flags & AVIO_FLAG_READ))return AVERROR(EIO);return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read);
}

 ffurl_read() -> retry_transfer_wrapper()

static inline int retry_transfer_wrapper(URLContext *h, uint8_t *buf,int size, int size_min,int (*transfer_func)(URLContext *h,uint8_t *buf,int size))
{int ret, len;int fast_retries = 5;int64_t wait_since = 0;len = 0;while (len < size_min) {//如果len小于size_min,则循环,这里size_min=1if (ff_check_interrupt(&h->interrupt_callback))//检查是否结束return AVERROR_EXIT;ret = transfer_func(h, buf + len, size - len);//拉取数据if (ret == AVERROR(EINTR))//出错,继续continue;if (h->flags & AVIO_FLAG_NONBLOCK)return ret;if (ret == AVERROR(EAGAIN)) {//从新再来ret = 0;if (fast_retries) {//初始值5,尝试5次,5次后fast_retries--;} else {//睡眠方式尝试if (h->rw_timeout) {if (!wait_since)wait_since = av_gettime_relative();else if (av_gettime_relative() > wait_since + h->rw_timeout)return AVERROR(EIO);}av_usleep(1000);//开始睡眠1000us}} else if (ret < 1)return (ret < 0 && ret != AVERROR_EOF) ? ret : len;if (ret) {fast_retries = FFMAX(fast_retries, 2);wait_since = 0;}len += ret;}return len;
}

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

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

相关文章

Python tkinter (2) —— Button标签

Python的标准Tk GUI工具包的接口 目录 Button 简单示例 设置按钮宽高 设置响应事件 匿名函数调用事件 退出按钮 总结 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Button Button标签在窗口中显示按钮的控件。 简单示例 实现一个…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

go语言(十六)----tag

package mainimport ("fmt""reflect" )type resume struct {Name string info:"name" doc:"我的名字"Sex string info:"sex" }func findTag(str interface{}) {t : reflect.TypeOf(str).Elem()for i : 0;i < t.NumField…

前端面试题-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法

前端面试题-js部分-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法 JS数据类型有哪些值类型和引用类型的区别数组的常用方法哪些方法会改变原数组 字符串常用方法对象常用方法怎么判断是对象还是数组 JS数据类型有哪些 数据类型类型描述Number基本类型&#…

Day24_77 组合

77 组合 组合无序&#xff0c;排列有序。1~n个数中选k个数组合&#xff0c;k不确定&#xff0c;组合的方式。 &#xff08;图片来自代码随想录&#xff09;确定回溯法的三部曲&#xff1a; 递归函数的返回值和参数&#xff1a;集合n中取k个数&#xff0c;&#xff0c;每次从…

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理&#xff0c;个人感觉word文档中由于包含大量样式信息&#xff0c;批处理时总感觉有顾虑。一者担心影响了文档的格式&#xff0c;误修改了文档的样式&#xff0c;那后果……

【操作系统】实验五 添加内核模块

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

使用trace工具分析Mysql如何选择索引

背景说明 工作中,可能会遇到执行一个SQL,明明有索引,但是采用explain分析后发现执行结果并未走索引。甚至还有部分SQL语句相同就只是查询条件不一样也会出现有的走索引,有的不走索引情况。比如: 我的示例环境有个employees表,并有个idx_name_age_position的联合索引…

纯命令行在Ubuntu中安装qemu的ubuntu虚拟机,成功备忘

信息总体还算完整&#xff0c;有个别软件更新了名字&#xff0c;所以在这备忘一下 1. 验证kvm是否支持 ________________________________________________________________ $ grep vmx /proc/cpuinfo __________________________________________________________________…

40G QSFP+ ER4光模块:高效稳定的数据传输解决方案

随着网络技术的不断发展&#xff0c;数据传输的速度和效率成为了网络流畅度和稳定性的关键因素。40G QSFP ER4光模块作为最新一代的光纤传输模块&#xff0c;凭借其高速度、高效率、长距离传输等特点&#xff0c;正逐渐在数据中心、企业网络等领域得到广泛应用。 一、40G QSFP…

离线编译 onnxruntime-with-tensortRT

记录为centos7的4090开发机离线编译onnxruntime的过程&#xff0c;因为在离线的环境&#xff0c;所以踩了很多坑。 https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html 这里根据官网的推荐安装1.15 版本的onnx 因为离线环境&#xff0c;所以很…

1. Matplotlib的Figure基础概念

1. Matplotlib的Figure基础概念 一 **角色和作用**二 **类比&#xff1a;**三 **基本使用示例** Matplotlib是一个用于绘制二维图形的Python库&#xff0c;广泛应用于数据可视化领域。其灵活性和强大的功能使得用户能够轻松创建各种类型的图表&#xff0c;包括折线图、散点图、…

RectMask2D的合批情况验证

1.经过实际测试&#xff0c;RectMask2D在裁剪区域完全相同且位置完全重合的情况下能够合批 但是当RectMask2D位置不重合时&#xff0c;就不能合批 注意&#xff0c;虽然此处被RectMask2D裁剪了&#xff0c;但是有部分是被渲染的&#xff0c;在计算深度时属于需要渲染…

Labview for循环精讲

本文详细介绍Labview中For循环的使用方法&#xff0c;从所有细节让你透彻的看明白For循环是如何使用的&#xff0c;如果有帮助的话记得点赞加关注~ 1. For循环结构 从最简单的地方讲起&#xff0c;一个常用的for循环结构是由for循环结构框图、循环次数、循环计数(i)三部分组成…

动静态库的理解、制作、使用。

一.动静态库的理解。 1.什么是库&#xff1f; 代码是无穷无尽的&#xff0c;当程序猿在写一些项目时&#xff0c;未必所有代码亲历亲为&#xff0c;他们可以在网上寻找大佬写过的一些有关需求的代码&#xff0c;这些代码可以让他们拿过来直接使用&#xff0c;而省去了许多精力…

回归问题波士顿房价预测

线性回归API sklearn.linear_model.LinearRegression(fit_interceptTrue) 正规方程优化参数&#xff1a;fit_intercept&#xff0c;是否计算偏置属性&#xff1a;LinearRegression.coef_ &#xff08;回归系数&#xff09; LinearRegression.intercept_&#xff08;偏置&…

STL第四讲

第四讲 万用Hash Function 左侧的是设计为类并重载调用运算符&#xff0c;右侧是一般函数的形势&#xff1b; 但是右侧形势在创建容器时更麻烦&#xff1b; 具体例子&#xff1a; 第三种形势&#xff1a;struct hash 偏特化形式 tuple 自C03引入&#xff1b; 关于源码解读的…

ASCB1系列一体式智能微型断路器 智慧空开-安科瑞 蒋静

1. 概述 ASCB1系列智能微型断路器(一体式)&#xff08;以下简称智能微型断路器&#xff09;应用于户内建筑物及类似场所的工业、商业、民用建筑及基础设施等领域低压终端配电网络。智能微型断路器对用电线路的关键电气参数&#xff0c;如电压、电流、功率、温度、漏电、能耗等…

北美“水务巨头”遭遇勒索软件攻击,账单支付系统被破坏

近日&#xff0c;威立雅北美公司披露了一起勒索软件攻击事件&#xff0c;此次攻击影响了其市政水务部门的部分系统&#xff0c;并破坏了其账单支付系统。 在发现攻击后&#xff0c;该公司立即采取了防御措施&#xff0c;并暂时关闭了部分系统&#xff0c;以避免漏洞造成更大的…

Broadcom交换芯片56620架构

文章目录 架构1.系统逻辑视图2.逻辑芯片视图3.芯片框图4.MIIM&#xff08;Medium Independent Interface Management&#xff09;5.交换结构6.CAP 架构 1.系统逻辑视图 Ingress Chip作用&#xff1a; 解析报文128字节的头部&#xff08;MMU&#xff08;Memory Management Uni…