96SEO 2026-02-19 20:09 17
比如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
文件名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等。
{//如果手动指定了轨道则取指定的(节目流有多个轨道可以指定某个)if
videoTracks.contains(videoTrack))
videoTrack;}//取出流获取对应的信息创建解码器int
formatCtx-streams[videoIndex];//如果主动设置过旋转角度则将旋转信息设置到流信息中以便保存那边也应用(不需要保存也旋转可以注释)if
{FFmpegHelper::setRotate(videoStream,
rotate);}//先获取旋转角度(如果有旋转角度则不能用硬件加速)this-getRotate();if
none;}//查找视频解码器(如果上面av_find_best_stream第五个参数传了则这里不需要)AVCodecID
FFmpegHelper::getCodecId(videoStream);if
false;}//初始化解码器FFmpegThreadHelper::initVideoCodec(videoCodec,
hardware);//创建视频解码器上下文videoCodecCtx
avcodec_alloc_context3(NULL);if
false;}//将视频流的参数拷贝给视频解码器上下文/以便能够按照对应流参数进行解码result
FFmpegHelper::copyContext(videoCodecCtx,
false;}//初始化硬件加速(也可以叫硬解码/如果当前格式不支持硬解则立即切换到软解码)if
!FFmpegThreadHelper::initHardware(this,
avcodec_find_decoder(codecId);}if
false;}//设置低延迟和加速解码等参数(设置max_lowres的话很可能画面采用最小的分辨率)if
videoCodec-max_lowres;videoCodecCtx-flags
AV_CODEC_FLAG_LOW_DELAY;videoCodecCtx-flags
AV_CODEC_FLAG_GLOBAL_HEADER;videoCodecCtx-flags2
AV_CODEC_FLAG2_FAST;}//打开视频解码器result
false;}//获取分辨率大小FFmpegHelper::getResolution(videoStream,
false;}//记录首帧开始时间和解码器名称videoFirstPts
videoStream-start_time;videoCodecName
FFmpegHelper::getFrameRate(videoStream,
videoStream-nb_frames;this-setProperty(frames,
%7).arg(videoIndex).arg(videoCodecName).arg(frameRate).arg(videoWidth).arg(videoHeight).arg(rotate).arg(frames);debug(0,
msg);//FFmpegUtil::getExtraData(videoCodecCtx);}return
FFmpegThreadHelper::initVideoCodec(AVCodecx
avcodec_find_decoder(codecId);videoCodecName
{return;}//264/265才能去启用系统层以外的硬解码if
hevc_qsv/hevc_cuvid/hevc_vaapi/h264_mediacodecQString
QString(%1_%2).arg(videoCodecName).arg(hardware);(*videoCodec)
avcodec_find_decoder_by_name(name.toUtf8().constData());//如果硬解码器分配失败则立即切换到软解码if
avcodec_find_decoder(codecId);}
FFmpegThreadHelper::initHardware(FFmpegThread
__arm__//发现嵌入式上低版本的库没有av_hwdevice_find_type_by_name函数
av_hwdevice_find_type_by_name(hwName);
av_hwdevice_find_type_by_name(hwName);
#endif//找到对应的硬解码格式thread-debug(0,
%2).arg(hardware).arg(type));FFmpegThreadHelper::hw_pix_fmt
FFmpegThreadHelper::find_fmt_by_hw_type(type,
(FFmpegThreadHelper::hw_pix_fmt
av_hwdevice_ctx_create(hw_device_ref,
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,
FFmpegThreadHelper::initVideoData(FFmpegThread
AV_PIX_FMT_YUV420P;yuvFrame-width
videoHeight;//如果发现画面斜了或者条纹状可以考虑修改这里的对齐值int
false;}//视频图像转换(转yuv420)(*yuvSwsCtx)
false;}//视频图像转换(转rgb)AVPixelFormat
AV_PIX_FMT_RGB24;(*imageSwsCtx)
av_image_get_buffer_size(imageFormat,
av_image_fill_arrays(imageFrame-data,
FFmpegHelper::getPixFormatString(srcFormat);QString
FFmpegHelper::getPixFormatString(dstFormat);QString
%3).arg(srcFormatString).arg(dstFormatString).arg(hardware);thread-debug(0,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback