纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Qt音视频开发12easyplayer内核

2月18日 拭朱砂投稿
  一、前言
  在视频监控行业经常看到两个厂家广告打得比较厉害,一个是青犀视频对应easyplayer,一个是大牛直播,两个最初都是sdk免费,并提供调用示例源码,后面大牛直播的sdk以及示例都无法运行,目前就剩下免费的easyplayer可以用,亲测下来确实免费可用不需要授权秘钥之类的,功能还行,支持各种音视频文件、本地摄像头、网络视频流等,就是在录制H265视频的时候不行,直接崩溃,估计官方放出的版本不支持,内部的版本肯定是支持的。
  easyplayer的设计总体上估计参照了mpv播放器的设计,所有属性做成了可读取和设置,通过调用EasyPlayerProSetparam设置属性,调用EasyPlayerProGetparam获取属性,参数传入对应枚举值EASYPARAMID即可,至于有哪些参数可以通过头文件枚举值查看,所有的参数可读取,不是所有的参数可设置。这种设计很巧妙和万能通用,不少优秀的库也都参照这种设计思路,这样后期增加功能只需要增加对应的枚举值即可。比如获取倍速调用EasyPlayerProGetparam(easyPlayer,EASYPARAMPLAYSPEED,speed);设置倍速调用EasyPlayerProSetparam(easyPlayer,EASYPARAMPLAYSPEED,value);看起来是不是很简洁通俗易懂。
  二、效果图
  includeeasyplayerthread。hincludevideohelper。hEasyPlayerThread::EasyPlayerThread(QObjectparent):VideoThread(parent){easyPlayerNULL;}voidEasyPlayerThread::setGeometry(){if(!easyPlayer){}设置波形频谱可视化效果intmode2;EasyPlayerProSetparam(easyPlayer,EASYPARAMVISUALEFFECT,mode);获取视频流编号intvideoId1;EasyPlayerProGetparam(easyPlayer,EASYPARAMVIDEOSTREAMCUR,videoId);获取音频流编号intaudioId1;EasyPlayerProGetparam(easyPlayer,EASYPARAMAUDIOSTREAMCUR,audioId);intwidthhwndWidgetwidth();intheighthwndWidgetheight();EasyPlayerProGetparam(easyPlayer,EASYPARAMVISUALEFFECT,mode);QStringtext空白;if(mode1){text波形;}elseif(mode2){text频谱;}debug(设置信息,QString(效果:1视频:2音频:3)。arg(text)。arg(videoId)。arg(audioId));设置了不显示可视化效果无视频无音频则不显示波形频谱if(modeEASYAUDIOVISUALEFFECTDISABLEvideoId0audioId0){EasyPlayerProResize(easyPlayer,0,0,0,width,height);EasyPlayerProResize(easyPlayer,1,0,0,width,height);}else{intpercent10;EasyPlayerProResize(easyPlayer,0,0,0,width,height(percent1)percent);EasyPlayerProResize(easyPlayer,1,0,height(percent1)percent,width,heightpercent);}}boolEasyPlayerThread::openVideo(){先检查地址是否正常(文件是否存在或者网络地址是否可达)if(!VideoHelper::checkUrl(this,videoType,videoUrl,connectTimeout)){}启动计时timer。start();安装事件过滤器识别尺寸变化if(videoModeVideoModeHwnd){hwndWidgetinstallEventFilter(this);}创建实例if(!easyPlayer){easyPlayerEasyPlayerProCreate();}创建失败则返回if(!easyPlayer){}准备参数QByteArrayurlDataVideoHelper::getRightUrl(videoType,videoUrl)。toUtf8();charurlurlData。data();HWNDwid(HWND)hwndWidgetwinId();EASYSTREAMLINKMODElinkMode(transporttcp?EASYSTREAMLINKTCP:EASYSTREAMLINKUDP);通过句柄的方式设置播放ifdefeasyplayerxeasyPlayerEasyPlayerProOpen(easyPlayer,url,wid,EASYVIDEORENDERTYPEGDI,EASYVIDEOMODESTRETCHED,linkMode,100,0);elseQStringkeyEasyPlayerisFr1ee!;intretEasyPlayerProAuthorize(key。toUtf8()。data());debug(剩余天数,QString(天数:1)。arg(ret));intparam1;EasyPlayerProSetparam(easyPlayer,EASYPARAMVDEVRENDERSHOW,m);easyPlayerEasyPlayerProOpen(easyPlayer,url,wid,EASYVIDEORENDERTYPEGDI,EASYVIDEOMODESTRETCHED,linkMode,100,0,10241024,10000000);endifisOemitrecorderStateChanged(RecorderStateStopped,fileName);lastTimeQDateTime::currentDateTime();inttimetimer。elapsed();debug(打开成功,QString(用时:1毫秒)。arg(time));只有获取到了宽高信息才算真正打开完成emitreceivePlayStart(time);returnisOk;}voidEasyPlayerThread::closeVideo(){先停止录制recordStop();搞个标志位判断是否需要调用父类的释放(可以防止重复调用)boolneedClose(easyPlayer);释放对象if(easyPlayer){EasyPlayerProClose(easyPlayer);EasyPlayerProRelease(easyPlayer);easyPlayerNULL;}if(needClose){VideoThread::closeVideo();}}voidEasyPlayerThread::readMediaInfo(){if(!easyPlayer){}if0EasyPlayerProGetparam(easyPlayer,EASYPARAMVIDEOWIDTH,videoWidth);EasyPlayerProGetparam(easyPlayer,EASYPARAMVIDEOHEIGHT,videoHeight);EasyPlayerProGetparam(easyPlayer,EASYPARAMVDEVFRAMERATE,frameRate);elseMediaInfomediaImemset(mediaInfo,0x00,sizeof(MediaInfo));EasyPlayerProGetparam(easyPlayer,EASYPARAMMEDIAINFO,mediaInfo);videoWidthmediaInfo。nWvideoHeightmediaInfo。nHframeRatemediaInfo。nFrameRendif纯音频则取父窗体的尺寸if(onlyAudio){QWidgetwidget(QWidget)hwndWidgetparent();videoWidthwidgetwidth();videoHeightwidgetheight();}if(videoWidth0videoHeight0){emitreceivePlayStart(timer。elapsed());QStringmsgQString(宽高:1x2帧率:3角度:4)。arg(videoWidth)。arg(videoHeight)。arg(frameRate)。arg(rotate);debug(媒体信息,msg);thissetGeometry();emitreceiveVolume(getVolume());}}qint64EasyPlayerThread::getDuration(){没有获取过才需要获取if(easyPlayerduration0getIsFile()){EasyPlayerProGetparam(easyPlayer,EASYPARAMMEDIADURATION,duration);emitreceiveDuration(duration);}}qint64EasyPlayerThread::getPosition(){qint64position0;if(easyPlayer){thisgetDuration();lastTimeQDateTime::currentDateTime();EasyPlayerProGetparam(easyPlayer,EASYPARAMMEDIAPOSITION,position);emitreceivePosition(position);如果设置了重复循环播放则快到了文件末尾重新设置位置即可if(duration0offset500){if(thisgetPlayRepeat()){QMetaObject::invokeMethod(this,setPosition,QARG(qint64,0));}else{thisstop2();}}}}voidEasyPlayerThread::setPosition(qint64position){文件才能指定播放位置(保存文件阶段不允许切换进度否则录制的文件错乱)if(easyPlayergetIsFile()!isRecord){EasyPlayerProSeek(easyPlayer,position);}}doubleEasyPlayerThread::getSpeed(){doublespeed1。0;if(easyPlayer){EasyPlayerProGetparam(easyPlayer,EASYPARAMPLAYSPEED,speed);speedspeed100;}}voidEasyPlayerThread::setSpeed(doublespeed){文件才能指定播放速度if(easyPlayergetIsFile()){intvaluespeed100;EasyPlayerProSetparam(easyPlayer,EASYPARAMPLAYSPEED,value);}}intEasyPlayerThread::getVolume(){声音范围是〔182,73〕需要转换成〔0,100〕intvolume0;if(easyPlayer){EasyPlayerProGetparam(easyPlayer,EASYPARAMAUDIOVOLUME,volume);volumeVideoHelper::getRangeValue(182,73,volume,0,100);}}voidEasyPlayerThread::setVolume(intvolume){emitreceiveVolume(volume);if(easyPlayer){volumeVideoHelper::getRangeValue(0,100,volume,182,73);EasyPlayerProSetparam(easyPlayer,EASYPARAMAUDIOVOLUME,volume);}}boolEasyPlayerThread::getMuted(){intmuted0;if(easyPlayer){EasyPlayerProGetparam(easyPlayer,EASYPARAMADEVMUTE,muted);}return(muted1);}voidEasyPlayerThread::setMuted(boolmuted){emitreceiveMuted(muted);if(easyPlayer){intvaluemuted?1:0;EasyPlayerProSetparam(easyPlayer,EASYPARAMADEVMUTE,value);}}voidEasyPlayerThread::pause(){if(easyPlayer!isPause){isPEasyPlayerProPause(easyPlayer);}}voidEasyPlayerThread::next(){if(easyPlayerisPause){isPEasyPlayerProPlay(easyPlayer);}}voidEasyPlayerThread::snap(constQStringsnapName){thissetSnapName(snapName);if(easyPlayer){intresultEasyPlayerProSnapshot(easyPlayer,snapName。toUtf8()。data(),0,0,200);if(result0){QMetaObject::invokeMethod(this,snapFinsh);}}}voidEasyPlayerThread::recordStart(constQStringfileName){thissetFileName(fileName);if(easyPlayer!isRecord){intresultEasyPlayerProRecord(easyPlayer,fileName。toUtf8()。data(),0);if(result0){isRemitrecorderStateChanged(RecorderStateRecording,fileName);debug(开始录制,QString(文件:1)。arg(fileName));}}}voidEasyPlayerThread::recordStop(){if(easyPlayerisRecord){intresultEasyPlayerProStoprecord(easyPlayer);if(result0){isRemitrecorderStateChanged(RecorderStateStopped,fileName);debug(结束录制,QString(文件:1)。arg(fileName));}}}
投诉 评论 转载

小鹏展示终极飞行跑车西媒外观出众功能强大西班牙《阿贝赛报》网站近日报道称,小鹏近期推出终极飞行超级跑车,计划将于2024年上市。报道称,在当前的汽车市场上,各家公司已不再争着要抢先推出飞行汽车,而是尽管媒体上充……Windows10大更新来了微软让人略失望大家应该还记得,之前微软曾表示,将从WindowsUpdate中剥离可选更新(OptionalUpdates),以便于Windows10用户管理驱动程序,每月功能更新和每月非安……天舟五号搭载的空间燃料电池太空在轨实验成功完成新华社北京11月26日电(文陈、郑莎)近日,由航天科技集团五院529厂承担的天舟五号燃料电池搭载载荷项目顺利完成了在轨实验任务。前期,529厂组织由电能源传输与控制、流体……与青春期的孩子不要斗气,学学这位妈妈的做法2022育儿季孩子的青春期,可能在很多父母的心里,它等同于叛逆期。虽然青春人人喜欢,可青春期的孩子,却不是那么讨人喜欢。要想和青春期的孩子好好相处,引导他们顺利迈进成人的世界,……高速公路充电桩覆盖面不足?多部门出手缓解里程焦虑中国商报(记者陈文丽)近日,交通运输部联合国家能源局、国家电网有限公司、中国南方电网有限责任公司印发的《加快推进公路沿线充电基础设施建设行动方案》(以下简称行动方案)提出,要加……装Win10卡到这个页面老外无语国人笑了对于很多国内用户来书,在使用很多网络服务时都要求填写手机号等,可能我们已经适应了这一要求,但老外却有些不舒服。这一次,用户爆料称,Windows10最新的内部预览版本Bu……真是胆大固定IP疯狂盗版Windows微软怒对于微软来说,软件盗版是他们最头疼问题,而这个情况在国内又极为严重,Windows和Office是绝对的重灾区。据CNET报道称,微软正式起诉了一个盗版者,他们已经追踪了……外媒辣评中国新四大发明居然有它俩!造纸术、印刷术、指南针、火药是中国古代的四大发明,而如今世界各国都认同中国有新四大发明,那就是高铁、网购、手机支付、共享单车。新西兰网站scoop今天也谈论了中国新四大发……什么是发物?癌症患者能吃韭菜吗?医生告诉你真相导语:人们常说民以食为天,但是在我们的日常生活里,总是有一些人打趣道人生最大的难题就是今天吃什么。虽然这仅仅只是一句玩笑话,但是也显现出了大家对于饮食选择的复杂性。其实不……Qt音视频开发12easyplayer内核一、前言在视频监控行业经常看到两个厂家广告打得比较厉害,一个是青犀视频对应easyplayer,一个是大牛直播,两个最初都是sdk免费,并提供调用示例源码,后面大牛直播的……泰国游预订量激增20倍!销售暴增超1000!这个春节,它们卖春节渐近,消费市场活力满满。今年年货消费有哪些新特点?各地餐厅年夜饭预订情况如何?哪些城市是旅游过年热门目的地?90后00后已成年货消费主力军来自电商平台的销售数据……美媒预测篮网新赛季夺冠!5大理由出炉这是杜欧时代最强阵容北京时间8月29日,美媒FadeawayWorld预测篮网将拿到202223赛季的NBA总冠军,并列出了5大理由。这支休赛期闹剧不断的球队,真的能捧起新赛季的冠军奖杯吗?让我们……
现场进公园条件放宽,防护更严!佩戴N95口罩的人多了原神3。6下半四星名单泄露!草神新剧情称散兵为阿帽?如果有一天你变得非常有钱,你最想做的是什么,要实现童年的梦贴好膘,病不扰,常吃1红1白3黑,润燥营养精神好为什么半夜睡醒嘴又苦又干?小心是这几种疾病到来了黄瓜最好不跟这些食物一起吃,大家应该注意一下马斯克嘲笑扎克伯格他学我血糖过高,脚部先知?若出现这3个迹象,最好别乱用热水泡脚又是一年三伏天跟寒气彻底说byebye牙齿松动,出血等,肾和胃应关注一二这花被誉为药铺小神仙,初冬绝不能错过!清热润肠,还能缓解感冒取快递看视频看到花29。9元充100元话费?已有多人被骗!吉利汽车公开汽车过水坑的行人防溅水提醒相关专利论恶心,谁比得过你啊?学下棋三年级作文我的爸爸如何在iPhone,iPad或iPodTouch上完成复制和今年的616父亲节,这些经典文案助你向父炫爱《鬼谷四友志》的主要内容是什么赏析怎样识别街头残棋诈骗户外电子驱蚊器好用吗企业辞退员工有哪些补偿要不了多久,短信验证码或许就要被淘汰了想说造句用想说造句大全

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形