音视频实战开源项目学习第二期!

news2024/11/23 15:52:19

前言:

大家好,今天继续分享音视频开源学习第二期,在前面的一期里面,我已经给大家演示了如何去跑起这个开源项目,包括源码下载;

音视频实战开源项目学习第一期!

今天继续来讲解这个开源项目。

不过在讲解这期内容之前,给大家分享这周和网友交流的一些音视频问题,也算是是一种经验积累和视野积累:

问题一:用vlc或者ffplay播放器拉流播放的时候,会出现一帧模糊(跟花屏有点不一样的显示):

7a752cca8da75cdbe5759bd1baaf47d0.png

问题二:解码花屏,问题出现在从摄像头rtsp拉流,然后给算法处理得到的frame,然后再次经过ffmpeg编码处理,再通过rtmp推流到流媒体服务上,然后拉流播放的时候,出现下面这种情况:

be08b27d4e26a35a50e815ca24924820.png

个人经验感想:

首先这个可以抓包分析是否掉帧了,如果出现掉帧肯定是会出现第一种现象或者可以通过ffplay播放的时候来查下看显示信息来查看;一般来说解码出现问题,详细来说有可能是编码端配置没有配置好,或者封装码流的时候,没封装好,比如到h264的pps或者sps信息找不到,那解码肯定不行的!这里我没说网络传输问题,这种情况也是有的!

我之前给大家分享跨距的问题,也就是你的分辨率没配置好,所谓没有配置好的意思是对于芯片内存访问像素点,不是按照他的内存对齐方式去访问,所以在播放的时候,会出现像很早之前的黑白电视那种画面一样!

当然向第二种那种实现,可能还要进行一个时间戳的转换!这个是技术点实现的细节问题!

当然大家在实际工作当中遇到这种解码的问题,看看还有哪些坑,欢迎来交流,一起进步!

ok下面开始分享本期内容:

一、rtsp_server的软件框架:

由于这个项目比较简单,但是其实也不简单,我一直在之前的文章或者直播里面给大家分享过,现在做rtsp这块的开发,在企业里面更多的是使用sdk提供的接口来开发,所以很多rtsp的实现小小细节你是不知道的,所以呢,这也是写这个系列开源项目的学习意义所在,当然后面会写更多的开源项目个人学习心得!

首先我们来看软件流程图,因为是第二期,我暂时没有把整个里面的流程划分出来,我想先一步步来,你可以跟着这个系列走,当然你学习的快,可以快我一步,哈哈哈哈!

bfd4d2fcc1c4651f6f42cc6c90707e8e.png

核心的在RtspServer类里面的类方法实现,当然里面还有父类的一些继承,后面我画流程图全部捋清楚分享给大家:

176592b0d99fba225bd9fd26c60d3da1.png

这是整个入口,看起来是不是非常简单,核心的RtspServer类里面封装了什么,不过在讲解这些东西之前,我在这里给大家分享点小建议,前提是你必须对rtsp里面的client和server会话交互以及发送码流还有sdp的处理,得有一些了解才行,不必死记硬背,特别是协议头和协议体那块,倒是写代码得时候,直接找到对应得那部分看就行,关于这些基础知识你可以看我之前得直播讲解rtsp基础知识讲解或者呢您也可以看一些网上写的博客去学习,等你有了这些基础,你再来看我现在分享的这个开源项目,那么学习起来就非常轻松了。

现在我们来单独来看类里面的封装了些什么:

634617cf8038c6e4ddf06c4d1a62dcdb.png 64261ff2eafcf4d7e9e982972a823330.png

这些代码,我已经写了注解,大家看的时候应该能够明白!

嗯,这期内容,我也不写太多,一步步来,争取每个环节,我们都弄的清清楚楚,明明白白!

这里给大家提示一下,如果对c++不熟悉的朋友,可以查找刚才代码中出现的容器:list、map!

最后:

这期的内容,我就简单分享到这里了,大家可以先按照我上面的思路,去把整个过程去梳理一下,比如说client和server之间要做什么东西,你可以把这块看成一个实际开发过程中的一个小需求去对待,相信对你绝对有提高!

好了,如果对这个系列感兴趣的朋友,可以加我微信交流学习,如果喜欢音视频推流开发实战项目的朋友,可以购买我的课程来学习,早学早掌握,工作也会更的心应手!课程内容我就不再展示了,如果用心,确实想学习的话,可以私聊我:

8bed33b8b6652e08eefc7363816d4867.png

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

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

相关文章

chatgpt赋能python:Python多行连一行:简便省事的代码优化方法

Python多行连一行:简便省事的代码优化方法 在Python编程中,经常会遇到多行代码的情况,这不仅降低了代码的可读性,也增加了调试的难度。为了解决这个问题,Python提供了多行连一行(以反斜杠\结尾&#xff09…

Mocha AE:工具栏

Mocha AE 工具栏(经典模式)中的工具及视图选项。 保存 Save the project 保存项目 快捷键:Ctrl S 选取类工具 Pick Tool 选取工具 --Marquee Selection 矩形框选 --Lasso Selection 套索选取 Move inner and edge points 移动内部点和边缘…

YOLOv8 训练自己的数据集

本范例我们使用 ultralytics中的YOLOv8目标检测模型训练自己的数据集,从而能够检测气球。 #安装 !pip install -U ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple import ultralytics ultralytics.checks() 一,准备数据 公众号算法美食屋后…

JavaScript之DOM(九)

JavaScript之DOM 1、节点类型2、常用的属性与方法2.1、访问节点的常用方法2.2、增删改节点的常用方法2.3、class的常用方法2.4、css相关操作 DOM – Document Object Model (文档对象模型),是 JS 操作 HTML 文档的接口,它最大的特点就是将文档表示为节点…

CloudQuery一体化数据库SQL操作安全管控平台

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! CloudQuery一体化数据库SQL操作安全管控平台 导读 CloudQuery作为业界领先的面向企业的数据库安全解决方案,CloudQuery致力于打造一站式安全可靠的数据操…

【C++】右值引用和移动语义

1.左值和右值 在C中,每个表达式或者是左值,或者是右值。 左值(lvalue):可以出现在赋值表达式左侧的值,例如变量名a、数据成员a.m、下标表达式a[n]、解引用表达式*p等。左值可以被赋值和取地址。右值(rvalue):只能出现…

jdk动态代理源码分析

jdk动态代理源码分析 前言动态代理----demo 案例jdk动态代理源码创建代理对象获取类把二进制流生成文件 jdk 动态代理的原理 前言 上一篇中我们知道动态代理的使用, Javase 专题之 静态代理和动态代理 我们只知道其中的使用,但是原理是什么? 不明白原理只知皮毛不是我们的目的…

chatgpt赋能python:Python在原图上继续画的SEO

Python在原图上继续画的SEO Python是一种高级的多范式编程语言,它使用简单、易于阅读的语法以及丰富和强大的数据结构使其成为工程师的首选。Python已经成为了一种非常流行的编程语言,它用于多种应用领域,包括Web开发、数据科学、机器学习、…

区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRCNN-LSTM卷积神经…

注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】

目录 一、注解配置AOP 1. 开启注解支持 2. 在类和方法加入注解 3. 测试 4. 为一个类下的所有方法统一配置切点 二、原生Spring实现AOP 1. 引入依赖 2. 编写SpringAOP通知类 3. 编写配置类bean2.xml 4 测试 三、SchemaBased实现AOP 1. 配置切面 2. 测试 往期专栏…

音视频技术开发周刊 | 296

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 22字声明、近400名专家签署、AI教父Hinton与OpenAI CEO领头预警:AI可能灭绝人类! 这份声明一经发布,便迅速得到了多伦多大学计算机科学…

基于zookeeper的kafka中间件

一、Zookeeper 概述 1、Zookeeper 定义 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 2、Zookeeper 工作机制 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理…

昨天,小灰做了人生的第一次直播!

熟悉小灰的朋友们都知道,小灰是一个非常腼腆的人。虽然我比较擅长写东西,但完全不擅长口头表达,在公开场合讲话很容易紧张。 因此,对于网上直播,小灰在以前完全不敢想象。 但是,人终究需要成长的。就在昨天…

Disco Diffusion 快速入门

Disco Diffusion 快速入门 简介快速开始进阶使用修改prompt给定指导图像修改基础参数运行参数设置运行建议模型设置参数详情 简介 Disco Diffusion(DD)是一个CLIP指导的AI图像生成技术,简单来说,Diffusion是一个对图像不断去噪的…

路径规划 | 图解RRT-Connect算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 RRT-Connect基本原理2 RRT-Connect vs. RRT3 ROS C算法实现4 Python算法实现5 Matlab算法实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)…

chatgpt赋能python:Python实现奇数位偶数位互换的方法

Python实现奇数位偶数位互换的方法 Python是一种高级的、面向对象的编程语言,在当今的编程领域中具有广泛的应用。它被用于数据分析、机器学习、Web开发等众多领域,其简洁的语法和强大的库被开发者们广泛使用。本文将介绍Python中奇数位偶数位互换的方法…

驱动开发:内核实现SSDT挂钩与摘钩

在前面的文章《驱动开发:内核解析PE结构导出表》中我们封装了两个函数KernelMapFile()函数可用来读取内核文件,GetAddressFromFunction()函数可用来在导出表中寻找指定函数的导出地址,本章将以此为基础实现对特定SSDT函数的Hook挂钩操作&…

【Django 网页Web开发】07. 快捷的表单生成 Form与MoudleForm(保姆级图文)

目录 注意 正规写法是 ModelForm,下面文章我多实现效果url.py新建3个html文件数据库连接model.py 数据表1. 原始方法view.pytestOrgion.html 2. Form方法view.pytestForm.html 3. MoudleForm方法给字段设置样式面向对象的思路,批量添加样式错误信息的显示…

ASIC-WORLD Verilog(10)编写测试脚本Testbench的艺术

写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文&…

干货!来自北大、KAUST、斯坦福、达摩院的大模型前沿动态:表格推理、代码生成、MiniGPT-4、生成式推理...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! ChatGPT的发布使得国内外众多的研究机构掀起了一股AI热潮,而这也进一步推动了人们对大语言模型的深入研究。2023年4月26日,AI TIME举办的大模型专场四活动邀请了阿里巴巴达摩院NLP研究员…