首页| 论坛| 消息
主题:不好用捶我/历时十年磨一剑/视频播放组件/一个地址涵盖所有的需求/通过地址传入参数
liudianwu发表于 2025-06-25 13:52
## 一、前言说明
一个强大的视频播放组件,除了基础的功能外,还必须涵盖各种现场实际需求,比如希望按照tcp方式打开rtsp地址,希望按照指定帧率采集本地桌面等。提供各种需求对应的结构体参数,这些参数可以单个函数设置,也可以统一设置,还有个最方便的设计技巧就是,通过打开的url传入对应的参数,比如通过竖杠隔开,定义一套规范,哪个占位符对应哪个参数,这样就超级灵活了,用户只需要在对应占位符填入自己想要的参数即可,省去了各种代码解析。主要分三个大类,通用地址、本地设备、本地桌面。
通过一个地址涵盖所有的需求设个设计绝对是煞费苦心,耗费了相当多的时间去设计和打磨,终于形成最终的版本,经过大量的用户和实际现场测试,好评如潮,要的就是这种设计,专门为用户考虑,怎么方便怎么来。
### 1.1 特别提示
1. 由于编解码涉及到很多参数,一般都按照默认参数进行处理。
2. 部分用户有时候希望通过填入的播放地址就带上这些信息,比如通信协议、桌面采集的分辨率、编码保存是否转码、转码是否缩放原图等。
3. 各种参数设置有个优先级,优先取地址中带的,没有带则取结构体中的,还没有则取默认值。
4. 有些值会根据具体情况自动调整,比如本地设备采集没有硬解码,udp开头的视频流强制用udp协议,有些不支持硬解的格式自动将硬解码=none。
5. 对于需要在地址中指定参数,对应占位符不填的需要占位符留空,不可以跳过。
6. 占位符中填了对应参数的必须严格按照指定的格式要求,不按照则很可能导致解析失败。
7. 参数用英文竖杠 | 隔开。
8. **监控解码组件支持各种场景需求的格式,你能想到的情况都考虑到了,经过近十年的长期实战积累而成。强烈建议看完下面的格式要求。**
### 1.2 通用字段
1. **encode开头的参数表示是编码用的,也就是保存文件,只有当开启录像存储的时候才会用到,如果要重新编码,系统设置那边视频参数编码下拉框要选择自动,默认可能是不编码。**
2. encodeVideoRatio表示视频压缩比率,对应bit_rate的值,在不改变分辨率的情况下,通过调整这个参数来控制保存文件体积的大小。**如果值大于1,则表示关键帧间隔(也叫 I 帧间隔),比如50则关键帧间隔50,可以极大的提高压缩比并降低文件体积。默认保存视频用的间隔是原视频流的fps。目前不是很建议调整保存视频的关键帧间隔,可以小于fps,不建议大于fps,如果间隔超过了fps,这个可能会导致保存视频的时长不对。比如fps是25,关键帧间隔强制改成了50,则末尾可能会丢失1s。**
3. encodeVideoScale表示视频缩放值,1表示原始比例(默认值1),如果值float值,则相当于在原有分辨率按照这个值等比例缩放,比如encodeVideoScale=0.5,视频源分辨率是1920x720,则编码保存按照960x360这个分辨率保存。如果填的是640x480,则按照指定的这个分辨率强制缩放,可能会变形。这个在高分辨率的时候特别有用,比如采集的桌面分辨率很大,但是传输的时候受限于带宽,需要等比例压缩一下再传输,此时可以填0.5/0.2之类的值。
### 1.3 标准格式
1. **格式要求: url|transport|decodeType|encodeVideo|encodeVideoFps|encodeVideoRatio|encodeVideoScale。**
2. url表示媒体地址,比如 f:/1.mp3 d:/1.mp4 rtsp://192.168.0.100 等。
3. transport表示通信协议,可选 tcp/udp,一般用于rtsp视频流,很多时候在linux系统中必须指定tcp,rtsp摄像头才能正常采集。
4. decodeType表示解码策略,0-速度优先,1-质量优先,2-均衡处理,3-最快速度(不做音视频同步,收到就立马解码和显示)。
5. encodeVideo表示视频编码格式,0-不做处理,1-自动转码(源头是264就264/265就265),2-强制用264编码,3-强制用265编码。
6. encodeVideoFps表示编码帧率,默认取源头流的帧率,如果指定了则取指定的。
7. encodeVideoRatio见通用字段说明。
8. encodeVideoScale见通用字段说明。
### 1.4 本地设备
1. **格式要求:url|bufferSize|frameRate|codecName|encodeVideoRatio|encodeVideoScale。**
2. url表示媒体地址,采集摄像头统一约定 video=或者audio=开头。
3. bufferSize表示分辨率,可填1280x720这种,不填默认640x480。
4. frameRate表示帧率,不填默认25。
5. codecName表示解码器名称,有些本地摄像头可以指定解码器名称比如mjpeg/h264/raw,前提是要该设备支持该解码器。默认为空则不指定会自动处理。
6. encodeVideoRatio见通用字段说明。
7. encodeVideoScale见通用字段说明。
8. win系统如何查看设备名见本文档中 [打开本地摄像头](##13.7 打开本地摄像头)。
9. linux系统查看设备名直接执行命令 ls /dev/video *即可,一般对应的设备名是 /dev/video0。
10. 下面假定本地摄像头的设备名为 USB Video Device。
11. 写法1:video=USB Video Device,这种写法默认按照640x

浏览大图

浏览大图
下一页 (1/5)
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖