当前位置: 首页 > news >正文

网站会员功能书画网站的建设目标

网站会员功能,书画网站的建设目标,搜狗输入法下载安装,中国建设银行官网站和字币预约一、前言 之前做的监控系统#xff0c;已经实现了在windows上硬解码比如dxva2和d3d11va#xff0c;后续又增加了linux上的硬解vdpau的支持#xff0c;这几种方式都是跨系统的硬解实现方案#xff0c;也是就是如果都是windows系统#xff0c;无论X86还是ARM都通用#xf…一、前言 之前做的监控系统已经实现了在windows上硬解码比如dxva2和d3d11va后续又增加了linux上的硬解vdpau的支持这几种方式都是跨系统的硬解实现方案也是就是如果都是windows系统无论X86还是ARM都通用在系统层面屏蔽了实现细节按照规范来写就行这种方式叫跨硬件但是不跨系统无论是英特尔显卡还是英伟达显卡都一样无需区分具体用的什么显卡。后面还有跨系统但是不跨硬件的策略典型的就是针对英伟达显示代码可以跨系统但是不支持其他显卡。现在随着越来越多的嵌入式板子尤其是RK3588默认有个RKMPP的硬解用户在这个场景下的需求也越来越多于是也要增加支持。 最早监控系统开发就已经考虑好了模块化的方式采用一个个core组件模块来实现这样一旦某个组件模块更新了代码只需要替换这个组件的代码就行一般就是一个pri带一个目录同理监控内核ffmpeg模块也是如此于是抽空将对RKMPP硬解的支持也加入了其中这其中的关键并不是使用硬解解码部分后面捣鼓下来发现关键是要编译一个支持RKMPP硬解的ffmpeg库就行https://github.com/nyanmisaka/ffmpeg-rockchip把这个库替换掉然后硬解名称选择RKMPP即可整个硬解流程和之前的dxva2/d3d11va一模一样然后解码后的数据发给opengl绘制数据格式一般是NV12。打完收工非常完美。 二、效果图 三、相关地址 国内站点https://gitee.com/feiyangqingyun国际站点https://github.com/feiyangqingyun个人作品https://blog.csdn.net/feiyangqingyun/article/details/97565652文件地址https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码01jf 文件名bin_video_demo/bin_video_system。 四、功能特点 支持各种本地音视频文件和网络音视频文件格式包括mp3、aac、wav、wma、mp4、mkv、rmvb、wmv、mpg、flv、asf等。支持各种网络音视频流网络摄像头协议包括rtsp、rtmp、http等。支持本地摄像头设备推流可指定分辨率、帧率、格式等。支持本地桌面采集推流可指定屏幕索引、采集区域、起始坐标、帧率等也支持指定窗口标题进行采集。可实时切换预览视频文件可切换音视频文件播放进度切换到哪里就推流到哪里。预览过程中可以切换静音状态和暂停推流。可指定重新编码推流任意源头格式可选强转264或265格式。可转换分辨率推流设置等比例缩放或者指定分辨率进行转换。推流的清晰度、质量、码率都可调可以节约网络带宽和拉流端的压力。音视频文件自动循环不间断推流。音视频流有自动掉线重连机制重连成功自动继续推流。支持各种流媒体服务程序包括但不限于mediamtx、ZLMediaKit、srs、LiveQing、nginx-rtmp、EasyDarwin、ABLMediaServer。通过配置文件自动加载对应流媒体程序的协议和端口自动生成推流地址和各种协议的拉流地址。可以通过配置文件自己增加流媒体程序。可选rtmp、rtmp格式推流推流成功后支持多种格式拉流包括但不限于rtsp、rtmp、hls、flv、ws-flv、webrtc等。在软件上推流成功后可以直接单击网页预览实时预览推流后拉流的画面多画面网页展示。软件界面上可单击对应按钮动态添加文件和目录可手动输入地址。推拉流实时性极高延迟极低延迟时间大概在100ms左右。极低CPU资源占用4路主码流推流只需要占用0.2%CPU。理论上常规普通PC机器推100路毫无压力主要性能瓶颈在网络。可以推流到外网服务器然后通过手机、电脑、平板等设备播放对应的视频流。每路推流都可以手动指定唯一标识符方便拉流/用户无需记忆复杂的地址没有指定则按照策略随机生成hash值。也支持自动按照指定标识后面加数字的方式递增命名。比如设置标识为字母v策略为标识递增则每添加一个对应的推流码命名依次是v1、v2、v3等。根据推流协议自动转码格式默认策略按照选择的推流协议比如rtsp支持265而rtmp不支持如果是265的文件而选择rtmp推流则自动转码成264格式再推流。音视频同步推流在拉流和采集的时候就会自动处理好同步同步后的数据再推流。表格中实时显示每一路推流的分辨率和音视频数据状态灰色表示没有输入流黑色表示没有输出流绿色表示原数据推流红色表示转码后的数据推流。自动重连视频源自动重连流媒体服务器保证启动后推流地址和打开地址都实时重连只要恢复后立即连上继续采集和推流。根据不同的流媒体服务器类型自动生成对应的rtsp、rtmp、hls、flv、ws-flv、webrtc拉流地址用户可以直接复制该地址到播放器或者网页中预览查看。添加的推流地址等信息自动存储到文件可以手动打开进行修改默认启动后自动加载历史记录。可以指定生成的网页文件保存位置方便作为网站网页发布可以直接在浏览器中输入网址进行访问发布后可以直接在局域网其他设备比如手机或者电脑打开对应网址访问。可选是否开机启动、后台运行等。网络推流添加的rtsp地址可勾选是否隐藏地址中的用户信息。自带设备推流模块自动识别本地设备包括本地的摄像头和桌面可以手动选择不同的是视频和音频采集设备进行推流。自带文件点播模块添加文件后用户可以拉取地址点播用户端可以任意切换播放进度。支持各种浏览器谷歌chromium、微软edge、火狐firefox等、各种播放器vlc、mpv、ffplay、potplayer、mpchc等打开请求。文件点播模块实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。文件点播模块采用纯QTcpSocket通信不依赖流媒体服务程序核心源码不到500行注释详细功能完整。支持任意Qt版本Qt4、Qt5、Qt6支持任意系统windows、linux、macos、android、嵌入式linux等。 五、相关代码 bool FFmpegThread::initVideo() {//找到视频流索引videoIndex av_find_best_stream(formatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);if (videoIndex 0) {//有些没有视频流所以这里不用返回videoIndex -1;debug(0, 无视频流, );} else {//如果手动指定了轨道则取指定的(节目流有多个轨道可以指定某个)if (videoTrack 0 videoTracks.contains(videoTrack)) {videoIndex videoTrack;}//取出流获取对应的信息创建解码器int result -1;AVStream *videoStream formatCtx-streams[videoIndex];//如果主动设置过旋转角度则将旋转信息设置到流信息中以便保存那边也应用(不需要保存也旋转可以注释)if (rotate ! -1) {FFmpegHelper::setRotate(videoStream, rotate);}//先获取旋转角度(如果有旋转角度则不能用硬件加速)this-getRotate();if (rotate ! 0) {hardware none;}//查找视频解码器(如果上面av_find_best_stream第五个参数传了则这里不需要)AVCodecID codecId FFmpegHelper::getCodecId(videoStream);if (codecId AV_CODEC_ID_NONE) {debug(result, 无视解码, );return false;}//初始化解码器FFmpegThreadHelper::initVideoCodec(videoCodec, codecId, videoCodecName, hardware);//创建视频解码器上下文videoCodecCtx avcodec_alloc_context3(NULL);if (!videoCodecCtx) {debug(result, 创建视解, );return false;}//将视频流的参数拷贝给视频解码器上下文/以便能够按照对应流参数进行解码result FFmpegHelper::copyContext(videoCodecCtx, videoStream, false);if (result 0) {debug(result, 视频参数, );return false;}//初始化硬件加速(也可以叫硬解码/如果当前格式不支持硬解则立即切换到软解码)if (hardware ! none !FFmpegThreadHelper::initHardware(this, videoCodec, videoCodecCtx, hardware)) {hardware none;videoCodec avcodec_find_decoder(codecId);}if (!videoCodec) {return false;}//设置低延迟和加速解码等参数(设置max_lowres的话很可能画面采用最小的分辨率)if (!getIsFile()) {//videoCodecCtx-lowres videoCodec-max_lowres;videoCodecCtx-flags | AV_CODEC_FLAG_LOW_DELAY;videoCodecCtx-flags | AV_CODEC_FLAG_GLOBAL_HEADER;videoCodecCtx-flags2 | AV_CODEC_FLAG2_FAST;}//打开视频解码器result avcodec_open2(videoCodecCtx, videoCodec, NULL);if (result 0) {debug(result, 打开视解, );return false;}if (videoCodecCtx-pix_fmt AV_PIX_FMT_NONE) {debug(0, 格式为空, );return false;}//获取分辨率大小FFmpegHelper::getResolution(videoStream, videoWidth, videoHeight);//如果没有获取到宽高则返回if (videoWidth 0 || videoHeight 0) {debug(0, 无分辨率, );return false;}//记录首帧开始时间和解码器名称videoFirstPts videoStream-start_time;videoCodecName videoCodec-name;frameRate FFmpegHelper::getFrameRate(videoStream, formatName);qint64 frames videoStream-nb_frames;this-setProperty(frames, frames);QString msg QString(索引: %1 解码: %2 帧率: %3 宽高: %4x%5 角度: %6 帧数: %7).arg(videoIndex).arg(videoCodecName).arg(frameRate).arg(videoWidth).arg(videoHeight).arg(rotate).arg(frames);debug(0, 视频信息, msg);//FFmpegUtil::getExtraData(videoCodecCtx);}return true; }void FFmpegThreadHelper::initVideoCodec(AVCodecx **videoCodec, AVCodecID codecId, QString videoCodecName, QString hardware) {//获取默认的解码器(*videoCodec) avcodec_find_decoder(codecId);videoCodecName (*videoCodec)-name;bool otherHardware (hardware ! none hardware ! dxva2 hardware ! d3d11va);if (!otherHardware) {return;}//264/265才能去启用系统层以外的硬解码if (videoCodecName ! h264 videoCodecName ! hevc) {hardware none;return;}//指定硬解码器名称 h264_qsv/h264_cuvid/h264_vaapi hevc_qsv/hevc_cuvid/hevc_vaapi/h264_mediacodecQString name QString(%1_%2).arg(videoCodecName).arg(hardware);(*videoCodec) avcodec_find_decoder_by_name(name.toUtf8().constData());//如果硬解码器分配失败则立即切换到软解码if (!(*videoCodec)) {(*videoCodec) avcodec_find_decoder(codecId);} }bool FFmpegThreadHelper::initHardware(FFmpegThread *thread, AVCodecx *videoCodec, AVCodecContext *videoCodecCtx, const QString hardware) { #if (FFMPEG_VERSION_MAJOR 2)//根据名称自动寻找硬解码enum AVHWDeviceType type;QByteArray hwData hardware.toUtf8();const char *hwName hwData.constData(); #ifdef __arm__//发现嵌入式上低版本的库没有av_hwdevice_find_type_by_name函数 #if (FFMPEG_VERSION_MAJOR 4)return false; #elsetype av_hwdevice_find_type_by_name(hwName); #endif #elsetype av_hwdevice_find_type_by_name(hwName); #endif//找到对应的硬解码格式thread-debug(0, 硬件加速, QString(名称: %1 数值: %2).arg(hardware).arg(type));FFmpegThreadHelper::hw_pix_fmt FFmpegThreadHelper::find_fmt_by_hw_type(type, videoCodec);if (FFmpegThreadHelper::hw_pix_fmt -1) {thread-debug(0, 加速失败, );return false;}int result -1;//创建硬解码设备AVBufferRef *hw_device_ref;result av_hwdevice_ctx_create(hw_device_ref, type, NULL, NULL, 0);if (result 0) {thread-debug(result, 创建硬解, av_hwdevice_ctx_create);return false;}//解码器格式赋值为硬解码videoCodecCtx-get_format FFmpegThreadHelper::get_hw_format;videoCodecCtx-hw_device_ctx av_buffer_ref(hw_device_ref);av_buffer_unref(hw_device_ref);thread-debug(result, 初始硬解, QString(成功: %1).arg(hardware));return true; #elsereturn false; #endif }bool FFmpegThreadHelper::initVideoData(FFmpegThread *thread, AVFrame *yuvFrame, AVFrame *imageFrame, SwsContext **yuvSwsCtx, SwsContext **imageSwsCtx, quint8 **imageData,AVPixelFormat srcFormat, AVPixelFormat dstFormat, int videoWidth, int videoHeight, const QString hardware, int flags) {//设置属性以便该帧对象正常yuvFrame-format AV_PIX_FMT_YUV420P;yuvFrame-width videoWidth;yuvFrame-height videoHeight;//如果发现画面斜了或者条纹状可以考虑修改这里的对齐值int align (hardware none ? 4 : 16);//分配视频数据(转yuv420)int result av_frame_get_buffer(yuvFrame, align);if (result 0) {thread-debug(result, 视频转换, av_frame_get_buffer);return false;}//视频图像转换(转yuv420)(*yuvSwsCtx) sws_getContext(videoWidth, videoHeight, srcFormat, videoWidth, videoHeight, AV_PIX_FMT_YUV420P, flags, NULL, NULL, NULL);if (!yuvSwsCtx) {thread-debug(result, 视频转换, sws_getContext);return false;}//视频图像转换(转rgb)AVPixelFormat imageFormat AV_PIX_FMT_RGB24;(*imageSwsCtx) sws_getContext(videoWidth, videoHeight, srcFormat, videoWidth, videoHeight, imageFormat, flags, NULL, NULL, NULL);if (!imageSwsCtx) {thread-debug(result, 视频转换, sws_getContext);return false;}//分配视频帧数据(转rgb)align 4;int imageSize av_image_get_buffer_size(imageFormat, videoWidth, videoHeight, align);(*imageData) (quint8 *)av_malloc(imageSize * sizeof(quint8));result av_image_fill_arrays(imageFrame-data, imageFrame-linesize, (*imageData), imageFormat, videoWidth, videoHeight, align);if (result 0) {thread-debug(result, 视频转换, av_image_fill_arrays);return false;}QString srcFormatString FFmpegHelper::getPixFormatString(srcFormat);QString dstFormatString FFmpegHelper::getPixFormatString(dstFormat);QString msg QString(源头: %1 目标: %2 硬解: %3).arg(srcFormatString).arg(dstFormatString).arg(hardware);thread-debug(0, 视频转换, msg);return true; }
文章转载自:
http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn
http://www.morning.xxiobql.cn.gov.cn.xxiobql.cn
http://www.morning.zcqtr.cn.gov.cn.zcqtr.cn
http://www.morning.khdw.cn.gov.cn.khdw.cn
http://www.morning.rrdch.cn.gov.cn.rrdch.cn
http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn
http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn
http://www.morning.sblgt.cn.gov.cn.sblgt.cn
http://www.morning.fqklt.cn.gov.cn.fqklt.cn
http://www.morning.cfqyx.cn.gov.cn.cfqyx.cn
http://www.morning.nuejun.com.gov.cn.nuejun.com
http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn
http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn
http://www.morning.sryyt.cn.gov.cn.sryyt.cn
http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn
http://www.morning.rdnpg.cn.gov.cn.rdnpg.cn
http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn
http://www.morning.dkbgg.cn.gov.cn.dkbgg.cn
http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn
http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn
http://www.morning.lqlfj.cn.gov.cn.lqlfj.cn
http://www.morning.nrtpb.cn.gov.cn.nrtpb.cn
http://www.morning.yrbp.cn.gov.cn.yrbp.cn
http://www.morning.yrhd.cn.gov.cn.yrhd.cn
http://www.morning.gynls.cn.gov.cn.gynls.cn
http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn
http://www.morning.flchj.cn.gov.cn.flchj.cn
http://www.morning.xhddb.cn.gov.cn.xhddb.cn
http://www.morning.youyouling.cn.gov.cn.youyouling.cn
http://www.morning.zwndt.cn.gov.cn.zwndt.cn
http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn
http://www.morning.sdamsm.com.gov.cn.sdamsm.com
http://www.morning.xlndf.cn.gov.cn.xlndf.cn
http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn
http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn
http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn
http://www.morning.slysg.cn.gov.cn.slysg.cn
http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn
http://www.morning.zffps.cn.gov.cn.zffps.cn
http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn
http://www.morning.fsjcn.cn.gov.cn.fsjcn.cn
http://www.morning.xstfp.cn.gov.cn.xstfp.cn
http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn
http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn
http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn
http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com
http://www.morning.xylxm.cn.gov.cn.xylxm.cn
http://www.morning.ntzfj.cn.gov.cn.ntzfj.cn
http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn
http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn
http://www.morning.npbnc.cn.gov.cn.npbnc.cn
http://www.morning.grtwn.cn.gov.cn.grtwn.cn
http://www.morning.ljmbd.cn.gov.cn.ljmbd.cn
http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn
http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn
http://www.morning.dztp.cn.gov.cn.dztp.cn
http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com
http://www.morning.htbgz.cn.gov.cn.htbgz.cn
http://www.morning.knsmh.cn.gov.cn.knsmh.cn
http://www.morning.xjkr.cn.gov.cn.xjkr.cn
http://www.morning.czqqy.cn.gov.cn.czqqy.cn
http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn
http://www.morning.qrsrs.cn.gov.cn.qrsrs.cn
http://www.morning.twpq.cn.gov.cn.twpq.cn
http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn
http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn
http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn
http://www.morning.mkbc.cn.gov.cn.mkbc.cn
http://www.morning.fyglg.cn.gov.cn.fyglg.cn
http://www.morning.qqhmg.cn.gov.cn.qqhmg.cn
http://www.morning.yjmns.cn.gov.cn.yjmns.cn
http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn
http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn
http://www.morning.rykn.cn.gov.cn.rykn.cn
http://www.morning.xppj.cn.gov.cn.xppj.cn
http://www.morning.rxpp.cn.gov.cn.rxpp.cn
http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn
http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn
http://www.morning.wxccm.cn.gov.cn.wxccm.cn
http://www.morning.fllx.cn.gov.cn.fllx.cn
http://www.tj-hxxt.cn/news/268275.html

相关文章:

  • 云南专业网站优化做一个app大概要多少钱
  • 网络工程的定义企业网站优化系统
  • 成都网站建设 3e网站建设万网域名管理平台
  • 如何网上注册公司流程百度ocpc如何优化
  • 公众号中做微网站急切网在线制作
  • 网站一直不被收录常州建设企业网站
  • 西部数码网站管理助手2深圳龙华网站公司
  • 合肥网站建设5k5售后服务网点建设是指网站
  • 建立网站的技术路径北京公司注册网址
  • 网站建设与维护试题东营市公共资源交易网
  • 做网站聊城重庆天气专业网站建设
  • 做书封面的模板下载网站wordpress如何不显示评论
  • 网站建设 天猫 保证金检测网站是否为WordPress
  • vue做社区网站网站建设与维护成绩查询
  • 汕尾招聘 网站建设合伙人公司的网站都是谁在维护
  • 购物网站前端浮动特效怎么做dw个人网站制作教程
  • 电子商城网站制作公司wordpress配置文件在哪
  • 做暧暧视频免费网站机加工订单网
  • 物流网站合肥刚刚通报阳性
  • 一个专门做标题的网站求个没封的a站2022
  • 高端旅游的网站建设网络科技公司怎么挣钱
  • win7用自己ip做网站自己有服务器如何建设微网站
  • 建立网站 域名 服务器吗海外网站测速
  • 期货融网站建设高效的宝安网站推广
  • 甘肃省城乡和建设厅网站网站开发从入门到实战
  • 公司网站上荣誉墙怎么做如何做x响应式网站
  • 深圳做网站的公工程公司年会发言稿
  • 青岛微信网站制作微信开发网站制作
  • 微电影网站源码深圳广告公司排名
  • 咨询公司网站模板网站上的图文介绍怎么做的