有自媒体谁还做网站河北提供网站制作公司报价

news/2025/9/23 14:46:04/文章来源:
有自媒体谁还做网站,河北提供网站制作公司报价,wordpress修改背景,织梦系统做的网站打开慢介绍 工作开发中需要处理的文件很多并无音频#xff0c;针对这一场景#xff0c;这里分享工作中自己封装使用的类库。精简的代码实现了播放、暂停、停止、快进、快退、进度更新跳转播放功能。直接放代码#xff0c;方便后期复制使用。 代码 头文件 #ifndef VIDEOPLAYER_…介绍 工作开发中需要处理的文件很多并无音频针对这一场景这里分享工作中自己封装使用的类库。精简的代码实现了播放、暂停、停止、快进、快退、进度更新跳转播放功能。直接放代码方便后期复制使用。 代码 头文件 #ifndef VIDEOPLAYER_H #define VIDEOPLAYER_H#include QThread #include QDebug #include QImageextern C { #include libavformat/avformat.h #include libavcodec/avcodec.h #include libswscale/swscale.h #include libavutil/imgutils.h #include libavutil/time.h }class VideoDecoder : public QThread {Q_OBJECT public:explicit VideoDecoder(QObject *parent nullptr);~VideoDecoder();void startPlay(const QString path);void stopPlay();void pausePlay(bool pause);void seekPlay(int sec);signals:void sigDuration(int sec);void sigPlayPosition(int sec);void sigPlayFinished(int ret);void sigSendImage(const QImage image);protected:void run();private://运行标志volatile bool m_isRun false;//暂停状态volatile bool m_pause false;//进度跳转状态volatile bool m_seek false;//优化跳转速度volatile bool m_seekFilter false;//开始时间 ms单位int64_t m_startTime;//暂停时间 ms单位int64_t m_pauseTime;//跳转时间 ms单位int64_t m_seekTime;//文件路径QString m_filePath;//时长信息 秒int m_videoDuration; };#endif // VIDEOPLAYER_H 实现文件 #include videoplayer.hVideoDecoder::VideoDecoder(QObject *parent) : QThread(parent) {}VideoDecoder::~VideoDecoder() {quit();wait(); }void VideoDecoder::startPlay(const QString path) {m_filePath path;m_isRun true;m_pause false;m_seek false;this-start(); }void VideoDecoder::stopPlay() {m_pause false;m_seek false;m_isRun false; }void VideoDecoder::pausePlay(bool pause) {m_pause pause;if(pause){m_pauseTime av_gettime_relative() / 1000;}else{int offset av_gettime_relative() / 1000 - m_pauseTime;m_startTime offset;} }void VideoDecoder::seekPlay(int sec) {if(!m_isRun)return;if(m_videoDuration sec)sec - 2;m_seekTime sec * 1000;m_seekFilter true;m_seek true; }void VideoDecoder::run() {qDebug() VideoDecoder start m_filePath;std::string temp m_filePath.toStdString();AVFormatContext *inFmtCtx avformat_alloc_context();int ret avformat_open_input(inFmtCtx, temp.c_str(), NULL, NULL);if (ret 0){qDebug() open input error;return;}//获取流信息ret avformat_find_stream_info(inFmtCtx, NULL);if (ret 0){qDebug() find stream info error;return;}//获取视频流信息 目前只有视频流bool getVideo false;int videoIndex av_find_best_stream(inFmtCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);AVStream *videoStream NULL;AVCodec *videoDecoder NULL;AVCodecContext *videoDeCodecCtx NULL;if (videoIndex 0){videoStream inFmtCtx-streams[videoIndex];//初始化解码器videoDecoder avcodec_find_decoder(videoStream-codecpar-codec_id);videoDeCodecCtx avcodec_alloc_context3(videoDecoder);if(videoDeCodecCtx ! NULL){avcodec_parameters_to_context(videoDeCodecCtx, videoStream-codecpar);ret avcodec_open2(videoDeCodecCtx, videoDecoder, NULL);if(ret 0)avcodec_free_context(videoDeCodecCtx);elsegetVideo true;}}if(!getVideo){avformat_close_input(inFmtCtx);return;}AVFrame *swsFrame av_frame_alloc();SwsContext *swsCtx nullptr;uint8_t *videoData nullptr;//输出视频参数信息if(getVideo){int srcW videoStream-codecpar-width;int srcH videoStream-codecpar-height;AVPixelFormat format videoDeCodecCtx-pix_fmt;m_videoDuration inFmtCtx-duration / AV_TIME_BASE;emit sigDuration(m_videoDuration);int byte av_image_get_buffer_size(AV_PIX_FMT_RGB32, srcW, srcH, 1);videoData (uint8_t *)av_malloc(byte * sizeof(uint8_t));av_image_fill_arrays(swsFrame-data, swsFrame-linesize, videoData, (AVPixelFormat)AV_PIX_FMT_RGB32, srcW, srcH, 1);swsCtx sws_getContext(srcW, srcH, (AVPixelFormat)format, srcW, srcH, (AVPixelFormat)AV_PIX_FMT_RGB32, SWS_FAST_BILINEAR, NULL, NULL, NULL);}//开始时刻m_startTime av_gettime_relative() / 1000;int64_t ptsTime 0;int curPlayPos 0;AVPacket *packet av_packet_alloc();AVFrame *videoFrame av_frame_alloc();while(m_isRun){//暂停if(m_pause){QThread::msleep(200);continue;}//进度切换if(m_seek){//跳转的播放时刻 单位微秒int64_t timeStamp m_seekTime * 1000;if (inFmtCtx-start_time ! AV_NOPTS_VALUE)timeStamp inFmtCtx-start_time;//注seek若关键帧间隔大需避免延时timeStamp av_rescale_q(timeStamp, AVRational{1, AV_TIME_BASE}, videoStream-time_base);ret av_seek_frame(inFmtCtx, videoIndex, timeStamp, AVSEEK_FLAG_BACKWARD);if(ret 0){qDebug() av_seek_frame fail m_seekTime;}else{//清空内部帧队列if(videoDeCodecCtx)avcodec_flush_buffers(videoDeCodecCtx);//调整时钟int64_t offset m_seekTime - ptsTime;m_startTime - offset;}m_seek false;}//不断读取packetret av_read_frame(inFmtCtx, packet);if (ret AVERROR_EOF){m_isRun false;break;}if(packet-stream_index videoIndex){//编码数据进行解码ret avcodec_send_packet(videoDeCodecCtx, packet);if (ret 0){av_packet_unref(packet);continue;}ret avcodec_receive_frame(videoDeCodecCtx, videoFrame);if (ret 0){av_packet_unref(packet);continue;}//控制速度 ms单位ptsTime videoFrame-pts * av_q2d(videoStream-time_base) * 1000;if(m_seekFilter){//跳转播放时间不符合的帧直接丢弃 默认阈值200msint offset m_seekTime - ptsTime;if(0 offset || offset 200){m_seekFilter false;}else{av_frame_unref(videoFrame);av_packet_unref(packet);continue;}}qint64 elapsed av_gettime_relative() / 1000 - m_startTime;int64_t sleepMs ptsTime - elapsed;if(sleepMs 3){QThread::msleep(sleepMs);}//发送播放位置信息int sec ptsTime / 1000;if(sec ! curPlayPos){curPlayPos sec;emit sigPlayPosition(curPlayPos);}//将解码后的frame数据转换为Imagesws_scale(swsCtx, (const uint8_t *const *)videoFrame-data, videoFrame-linesize, 0, videoFrame-height, swsFrame-data, swsFrame-linesize);QImage image((uchar *)videoData, videoFrame-width, videoFrame-height, QImage::Format_RGB32);QImage copy image.copy();emit sigSendImage(copy);av_frame_unref(videoFrame);}av_packet_unref(packet);}//释放资源sws_freeContext(swsCtx);av_frame_free(swsFrame);av_free(videoData);av_packet_free(packet);av_frame_free(videoFrame);avcodec_free_context(videoDeCodecCtx);avformat_close_input(inFmtCtx);emit sigPlayFinished(0);qDebug() VideoDecoder end m_filePath;return; }

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

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

相关文章

做网站哪里找程序员郑州网页开发的公司

前言之前我们讲了下载安装数据库,还有如何卸载(虽然直接重装系统就好)那么现在让我们来讲讲"""1、数据库与表的剩余操作编码配置、引擎介绍2、数据库字段的操作3、数据库的数据类型4、数据库字段的约束条件"""数据库的配置通过配置文…

网站后台更新图片网站建设 中企动力福州阀门

简介 应用在调用系统固件集成的C/C三方库时,可能会由于系统固件集成端与IDE的NDK中libc版本不一致导致调用失败,而且系统固件集成的C/C三方库对于应用的调式也很不友好,需要多方编译调试,很不方便。因此本文将通过在IDE上适配ope…

北京 建网站娱乐平台网站建设

Joe McKendrick在他的新博文中抛出问题,探讨 SOA的未来。\u0026#xD;\n面向服务架构的下一步是什么呢? 许多人看到它与其他方法的融合,因为单独SOA不足以构成商业案例(business case)——业务要求高效的客户服务&#x…

网站开发语言比较注册公司条件有哪些

来源:专知摘要:9月5日,工信部官网公示了2018年人工智能与实体经济深度融合创新项目名单。9月5日,工信部官网公示了2018年人工智能与实体经济深度融合创新项目名单。据了解,2018年人工智能与实体经济深度融合创新项目名…

深圳好看的网站建设哪家公司好wordpress本地安卓安装

前言 虽然不是搞分类的,但是还是看看多标签和多分类的区别。为了避免自己的错误理解, 当然是选择原谅他啊…….找正规文档看哇. 以下翻译分别来自scikit-learn.org和 维基 喂鸡百科 国际惯例,贴上来源: Multiclass and multilabel algorithms Multi-…

龙华新区网站制作网站技能培训

文章目录一、在线办公1. 待办任务1. 已办任务1. 已发任务二. 流程管理1. 运行中的流程1. 部署流程1. 流程管理1. 模型管理一、在线办公 目前主要是配合工作流模块使用,主要包括以下功能: 1. 待办任务 工作流节点处理人是当前登录用户的话,…

酒店网站建设注意什么广州免费拍卖公司

一 设计模式简介 二 面试总结 1 什么是单例模式?都有哪些地方用到单例? 内存中只会创建且仅创建一次对象的设计模式,保证一个类只有一个实例,并且提供一个访问该全局访问点。 应用场景: 网站的计数器,一般…

怎样给响应式网站提速做网站横幅技巧

随便玩玩之PostgreSQL 未经授权不得转载 第1章PostgreSQL简介 1.1什么是PostgreSQLPostgresql是数据库(软件)。The worlds most advanced open source database.世界上最先进的开源数据库。 1.2PostgreSQL的优势随便用、不要钱 比MySQL好,媲美…

免费设计app的网站建设app宣传推广方案

今天又来继续我们的字符串函数的文章,这也是最后一篇了。希望这两篇文章能让各位理解透字符串函数。 目录 strchr strtok sprintf和sscanf strchr strchr 是一个用于在字符串中查找特定字符首次出现位置的函数。以下是解析和模拟实现 strchr 函数的示例&…

书虫私藏的免费阅读渠道大公开!

兄弟们!是不是经常在网上翻来翻去,就为了找那些免费又好看的小说平台?每次想畅快看书却找不到合适的渠道,真的超让人着急!今天我就来给大家解决书荒的烦恼,花了不少心思整理出一批超好用的免费小说 APP 和网站�…

php在网站开发中的应用网络优化器

河北省最好的二本财经类大学有哪些2020-06-20 17:01:20文/刘思琪河北省是我国高考大省,2019年高考报名人数创近十年新高,报名人数达55.96万人。高考人数的增加会导致竞争更加激烈,那么对于分数不是很高的同学而言选择本省的一些高校是比较不错…

智能工厂革命:Gitee PPM如何重塑企业级软件开发新范式

智能工厂革命:Gitee PPM如何重塑企业级软件开发新范式 在数字化转型的浪潮席卷全球之际,软件开发行业正经历一场前所未有的生产方式变革。Gitee项目组合管理(PPM)系统作为这一变革的引领者,正在重新定义企业级软件开…

Jupyter Notebook的交互式编写环境方便py开发

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PyTorch图神经网络(三)

PyTorch图神经网络(三) 1.图注意力网络(GAT) ​ 之前提到的图卷积网络其实已经包含了图注意力网络的思想,他用节点的度来衡量节点的重要性,这样就会使得邻居较少的节点比其他节点更加重要。图注意力网络解决了这…

Spring中@Primary注解的作用及小demo演示

Spring中@Primary注解的作用及小demo演示一、@Primary注解的核心作用 @Primary是Spring框架中用于解决依赖注入歧义问题的注解,当容器中存在多个相同类型的Bean时,Spring无法自动决定注入哪一个,此时通过@Primary标…

站长工具seo综合查询张家界新娘抖音代运营协议合同范本

data [0.1869, 0.1900, 0.1878, 0.1847]; b bar(data); ch get(b,children); set(gca,XTickLabel,{非加权聚类欧氏距离类比,非加权聚类马氏距离类比,加权聚类欧氏距离类比,加权聚类马氏距离类比}) set(ch,FaceVertexCData,[1 1 1;1 1 1;1 1 1;1 1 1;])

网站运营主要做什么亚马逊雨林在地图上的位置

探索AI视频创新:Sora的奇迹 随着科技的不断演进,AI视频模型已经成为人工智能领域的一颗新星。在这场技术的风暴中,OpenAI的Sora模型以其杰出的性能和前瞻性的技术脱颖而出,正引领着AI视频领域的全新创新浪潮。 Sora的技术之光 …

建设网站一般要多少钱中国建设银行人才招聘

Runtime v2 为运行时作者集成 containerd 引入了一级 shim API。 containerd 作为守护进程,并不直接启动容器。相反,它充当更高级别的管理器 或枢纽的作用,以协调容器和内容的活动。被称作 "运行时"的程序真正来启动、停止和管理容…

三明做网站wordpress 百度云视频

命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系…

东莞做网站建设wordpress 安装出错

1.总结 目的:想要在故障恢复后不丢数据 输入端 保证可以重复发送数据如果是kafka,Flink负责维护offset,不用kafka维护设置kafka的隔离级别为:读已提交flink 开启检查点采用对齐或者不对齐的精确一次输出端 kafka 幂等事务两阶段…