lv_ffmpeg学习及播放rtsp

lvgl8.3有ffmpeg支持

FFmpeg support

typedef struct {lv_img_t img;lv_timer_t * timer;lv_img_dsc_t imgdsc;bool auto_restart;struct ffmpeg_context_s * ffmpeg_ctx;
} lv_ffmpeg_player_t;typedef enum {LV_FFMPEG_PLAYER_CMD_START,LV_FFMPEG_PLAYER_CMD_STOP,LV_FFMPEG_PLAYER_CMD_PAUSE,LV_FFMPEG_PLAYER_CMD_RESUME,_LV_FFMPEG_PLAYER_CMD_LAST
} lv_ffmpeg_player_cmd_t;struct ffmpeg_context_s {AVFormatContext * fmt_ctx;AVCodecContext * video_dec_ctx;AVStream * video_stream;uint8_t * video_src_data[4];uint8_t * video_dst_data[4];struct SwsContext * sws_ctx;AVFrame * frame;AVPacket pkt;int video_stream_idx;int video_src_linesize[4];int video_dst_linesize[4];enum AVPixelFormat video_dst_pix_fmt;bool has_alpha;
};

1. lv_ffmpeg_player_create 调用构造函数创建播放器


//构造函数
lv_ffmpeg_player_constructor
{
// 主要创建用于刷新图像的定时器
player->timer = lv_timer_create(lv_ffmpeg_player_frame_update_cb,FRAME_DEF_REFR_PERIOD, obj);
}

2.lv_ffmpeg_player_set_src(player, "/userdata/lvgl_app/birds.mp4");

2.1 打开给定视频文件

    //打开文件, 寻找视频流及对应解码器 设置最终像素格式等参数player->ffmpeg_ctx = ffmpeg_open_file(path);//根据获得的视频流信息申请图像空间及ffmpeg需要的frame pktif(ffmpeg_image_allocate(player->ffmpeg_ctx) < 0) //将ffmpeg解码数据与lvgl图片刷新区域相关联player->imgdsc.data = ffmpeg_get_img_data(player->ffmpeg_ctx);lv_img_set_src(&player->img.obj, &(player->imgdsc));

3. lv_ffmpeg_player_set_cmd(player, LV_FFMPEG_PLAYER_CMD_START);开始播放

            //重新启动图像刷新定时器lv_timer_resume(timer);构造函数中创建// 主要创建用于刷新图像的定时器player->timer = lv_timer_create(lv_ffmpeg_player_frame_update_cb,FRAME_DEF_REFR_PERIOD, obj);

4.简单修改,实现播放rtsp流

    lv_obj_t * player = lv_ffmpeg_player_create(lv_scr_act());//lv_ffmpeg_player_set_src(player, "/userdata/lvgl_app/birds.mp4");lv_ffmpeg_player_set_src(player, "rtsp://admin:p@ssw0rd@192.168.51.210/h264/ch33/main/av_stream");//lv_ffmpeg_player_set_auto_restart(player, true);lv_ffmpeg_player_set_cmd(player, LV_FFMPEG_PLAYER_CMD_START);lv_obj_center(player);

4.1 关闭所有暂停及seek操作

            av_seek_frame(player->ffmpeg_ctx->fmt_ctx,0, 0, AVSEEK_FLAG_BACKWARD);lv_timer_pause(player->timer);

4.1 网络初始化

avformat_network_init();

4.2 设置帧率

lv_res_t lv_ffmpeg_player_set_src(lv_obj_t * obj, const char * path)
{if(period > 0) {LV_LOG_INFO("frame refresh period = %d ms, rate = %d fps",period, 1000 / period);lv_timer_set_period(player->timer, period);}else {LV_LOG_WARN("unable to get frame refresh period");
#if rtsplv_timer_set_period(player->timer, (1/25)*1000);
#endif}}

4.3 设置参数

struct ffmpeg_context_s * ffmpeg_open_file(const char * path){//3.设置打开媒体文件的相关参数AVDictionary *options = NULL;av_dict_set(&options, "buffer_size", "6M", 0); // 设置 buffer_size 为 2MB//以tcp方式打开,如果以udp方式打开将tcp替换为udpav_dict_set(&options, "rtsp_transport", "tcp", 0);//设置超时断开连接时间,单位微秒,3000000表示3秒av_dict_set(&options, "stimeout", "1000000", 0);//设置最大时延,单位微秒,1000000表示1秒av_dict_set(&options, "max_delay", "1000000", 0);//自动开启线程数av_dict_set(&options, "threads", "auto", 0);// 设置分析持续时间//av_dict_set(&options, "analyzeduration", "1000000", 0);// 设置探测大小av_dict_set(&options, "probesize", "5000000", 0);if(avformat_open_input(&(ffmpeg_ctx->fmt_ctx), path, NULL, &options) < 0) {LV_LOG_ERROR("Could not open source file %s", path);goto failed;}//修改解码帧颜色格式ffmpeg_ctx->video_dst_pix_fmt = AV_PIX_FMT_RGBA ;
}

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

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

相关文章

RAG实战:构建基于本地大模型的智能问答系统

RAG实战&#xff1a;构建基于本地大模型的智能问答系统 引言 在当今AI快速发展的时代&#xff0c;如何构建一个既智能又可靠的问答系统是一个重要课题。本文将介绍如何使用RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;结合本地大模型&#xff0c;构建一个高效的智…

OAuth 2.0

简介 OAuth 是一种开放标准的授权协议或框架&#xff0c;它提供了一种安全的方式&#xff0c;使第三方应用程序能够访问用户在其他服务上的受保护资源&#xff0c;而无需共享用户的凭证&#xff08;如用户名和密码&#xff09;。OAuth 的核心思想是通过“授权令牌”来代替直接…

IntelliJ IDEA 远程调试

IntelliJ IDEA 远程调试 在平时开发 JAVA 程序时&#xff0c;在遇到比较棘手的 Bug 或者是线上线下结果不一致的情况下&#xff0c;我们会通过打 Log 或者 Debug 的方式去定位并解决问题&#xff0c;两种方式各有利弊&#xff0c;今天就简要介绍下如何通过远程 Debug 的情况下…

美国辅料查询之FDA批准药用辅料数据库(IID数据库)

药用辅料的性质很大程度上决定了制剂的性质&#xff0c;每一种新的药用辅料的问世&#xff0c;都会为制剂技术的发展带来新的机遇&#xff0c;每一种药用辅料都可能让制剂研发员开发出新剂型药物&#xff0c;所以在药物制剂研发过程中&#xff0c;药用辅料的信息调研是不可或缺…

YOLOv10目标检测-训练自己的数据

yolov10 https://github.com/THU-MIG/yolov10?tabreadme-ov-file 1. 数据集 模型的建立需要收集图片并且进行标注。YOLOv10标注的文件格式如下&#xff08;每张图片对应一个标签文件&#xff09;&#xff1a; 0 0.441753 0.815461 0.061021 0.042763 1 0.395895 0.759868 …

Redis学习(五)优惠券秒杀2——分布式锁

Redis学习&#xff08;五&#xff09;优惠券秒杀2 一、分布式锁-redission二、快速入门三、redission可重入锁原理四、redission锁的MutiLock原理 一、分布式锁-redission 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程…

Flink调优----资源配置调优与状态及Checkpoint调优

目录 第 1 章 资源配置调优 1.1 内存设置 1.1.1 TaskManager 内存模型 1、内存模型详解 2、案例分析 1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源 1.2.1 使用 DefaultResourceCalculator 策略 1.2.2 使用 DominantResourceCalculator 策略 1.2.3 使用 DominantRes…

Docker怎么关闭容器开机自启,批量好几个容器一起操作?

环境&#xff1a; WSL2 docker v25 问题描述&#xff1a; Docker怎么关闭容器开机自启&#xff0c;批量好几个容器一起操作&#xff1f; 解决方案&#xff1a; 在 Docker 中&#xff0c;您可以使用多种方法来关闭容器并配置它们是否在系统启动时自动启动。以下是具体步骤和…

模型的量化(Quantization)

文章目录 一、浮点数格式&#xff1a;FP64, FP32, FP16, BFLOAT16, TF32之间的相互区别1、关于浮点数2、常见的浮点数格式 二、量化&#xff08;Quantization&#xff09;1、基本概念2、量化的实现8bit量化4bit量化 三、QLora四、大语言模型量化方法对比&#xff1a;GPTQ、GGUF…

勤云远程稿件处理系统 SQL注入漏洞复现(XVE-2024-18393)

0x01 产品简介 勤云远程稿件处理系统(又称勤云采编系统)是北京勤云科技发展有限公司研发的一款产品,是一款全网络版期刊采编管理系统,旨在解决从投稿到稿件发表整个过程的信息化管理问题。该系统集成了搜索引擎、云计算等先进技术,为编辑部、作者和审稿人提供了便捷、高效…

谷歌Gemini与Anthropic Claude对比测试引发争议:AI竞赛暗流涌动

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

vLLM (2) - 架构总览

系列文章目录 vLLM (1) - Qwen2推理&部署 vLLM (2) - 架构总览 vLLM (3) - Sequence & SequenceGroup vLLM (4) - LLMEngine上篇 vLLM (5) - LLMEngine下篇 vLLM (6) - Scheduler & BlockSpaceManager 文章目录 系列文章目录前言一、官方资料二、原理简述三、架构…

QT从入门到精通(三)——实现文件列表遍历的图像浏览器

使用 Qt 实现文件列表遍历的图像浏览器 在本篇博客中将介绍如何使用 Qt 框架创建一个简单的图像浏览器应用程序。该应用程序能够选择文件夹&#xff0c;遍历其中的图像文件&#xff0c;并显示这些图像。我们将重点关注如何使用 Qt 的文件对话框和 OpenCV 库来处理图像。 1. 项…

强化特种作业管理,筑牢安全生产防线

在各类生产经营活动中&#xff0c;特种作业由于其操作的特殊性和高风险性&#xff0c;一直是安全生产管理的重点领域。有效的特种作业管理体系涵盖多个关键方面&#xff0c;从作业人员的资质把控到安全设施的配备维护&#xff0c;再到特种设备的精细管理以及作业流程的严格规范…

数据库管理-第274期 Oracle Enterprise Manager 24ai新特性一览(20241223)

数据库管理274期 2024-12-23 数据库管理-第274期 Oracle Enterprise Manager 24ai新特性一览&#xff08;20241223&#xff09;1 增强的企业管理联邦2 新的导航菜单3 EM仪表盘增强4 使用远程代理进行监控5 0停机监控6 新的作业系统控制台7 Oracle Key Vault支持8 自治数据库的引…

将Minio设置为Django的默认Storage(django-storages)

这里写自定义目录标题 前置说明静态文件收集静态文件 使用django-storages来使Django集成Minio安装依赖settings.py测试收集静态文件测试媒体文件 前置说明 静态文件 Django默认的Storage是本地&#xff0c;项目中的CSS、图片、JS都是静态文件。一般会将静态文件放到一个单独…

嵌入式单片机中蓝牙模块的详解

蓝牙模块的使用 蓝牙模块的特点可以看到蓝牙模块采用的TI公司设计的CC2541芯片,主要面向低功耗蓝牙通信方案,该模块的工作频段为2.4GHz,这个频段属于国际通用频段。 注意:蓝牙集成了一个状态指示灯,LED灯如果均匀慢速闪烁,就表示蓝牙未连接,如果LED灯常亮,表示蓝牙已连接…

互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;无人机技术已经广泛应用于各个领域&#xff0c;为我们的生活带来了诸多便利。而在动植物保护工作中&#xff0c;无人机的应用更是为这一领域注入了新的活力。EasyDSS&#xff0c;作为一款集视频处理、分发、存储于一体的综…

VMware虚拟机超详细安装Linux教程(最新版)

文章目录 前言一、下载二、安装VMware三、安装Linux&#xff08;操作系统&#xff09; 前言 VMware虚拟机的简单介绍&#xff1a; VMware虚拟机是一种功能强大且灵活的虚拟化解决方案&#xff0c;可以在Windows和Mac操作系统上运行。使用VMware虚拟机&#xff0c;可以在一个物…

YOLO原理讲解

一、YOLO的输入参数介绍 打标签后会生成一系列参数&#xff0c;包含&#xff1a; 置信度、预测框的位置&#xff08;中心点的位置、高度宽度&#xff09;、类别&#xff08;标签1、标签2、标签3......&#xff09; 二、处理图像和标签 首先YOLO会把图像均分为19*19个格子 &a…