basic

未压缩的原始图像 YUV420 YUV420是描述色度采样的方式 NV12 NV12 属于 YUV420SP 格式,包含两个 Plane(平面): Y Plane:亮度数据,每个像素一个 Y 分量。 UV Plane:色度数据,U 和 V 交错存储,每个 2×2 像素块共用一组 UV。 描述Y/U/V 数据在内存里怎么排: ...

October 14, 2026 · 1 min

framebuffer

分辨率 显示分辨率 也就是vo输出分辨率,最终HDMI真正输出给显示器的分辨率 图形层分辨率 也就是framebuffer分辨率,应用程序实际绘图时使用的画布分辨率 图形层 framebuffer:1920 × 1080 ↓ VO 硬件缩放 ↓ HDMI 最终输出:3840 × 2160 视频层与图形层通常作为并行输入,由 VO 合成后输出,并非视频层先经过 framebuffer 图形层: ...

October 14, 2026 · 1 min

gb28181

GB28181协议 GB28181协议会话通道实际上使用的是SIP协议,并且在 SIP 的基础上规定了监控联网的标准化使用方式;具体厂商还可能增加私有扩展。SIP是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。SIP中一个比较重要的概念是用户代理(User Agent),指的是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话。SIP用户代理又可分为用户代理客户端UAC(User Agent Client)和用户代理服务端UAS(User Agent Server)。UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应。SIP协议会与许多其它的协议协同工作,如SIP报文内容发送会话描述协议(Session Description Protocol,SDP)4,SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。SIP的一个典型用途是:SIP会话传输一些简单的经过报文的实时传输协议流,RTP本身才是语音或视频的载体。在GB28181协议中,联网系统在进行视音频传输及控制时应建立两个传输通道: 会话通道和媒体流通道。会话通道用于在设备之间建立会话并传输系统控制命令; 媒体流通道用于传输视音频数据, 经过压缩编码的视音频流采用流媒体协议RTP/RTCP传输。GB28181协议中具体通信协议结构图如下图所示: ...

October 14, 2026 · 7 min

media_protocol

流媒体协议 RTSP 在上层发号施令(管控制),RTP 在底层埋头搬砖(运数据),RTCP 在旁边盯着质量(做监督) 三者关系: RTSP:控制播放、暂停和会话参数;RTP/RTCP 还可通过 RTSP 的 TCP 连接交错传输,不能理解为控制连接一定不承载媒体字节。 RTP:封装媒体载荷、时间戳和序列号,常运行于 UDP 之上,也可使用 TCP 等承载;RTP 本身不保证可靠、有序或按时送达。 RTCP:发送传输质量、同步和参与者信息;NACK 等反馈属于扩展机制,是否重传或调整码率由协议协商和实现决定。 传统 RTP/UDP 会话通常使用偶数 RTP 端口及相邻的奇数 RTCP 端口,但这是常见约定。SDP 可以明确协商 RTCP 端口,rtcp-mux 还允许两者共用同一端口: ...

October 14, 2026 · 6 min

v4l2

V4L2 框架核心概念 Video for Linux 2 (V4L2) 是 Linux 内核中处理视频设备的标准框架,用于统一管理摄像头、视频采集卡等设备。设计 V4L2 框架的核心目的(思想): 用户空间和内核空间分离:应用通过标准系统调用与内核交互 设备抽象:视频采集/输出通常使用 /dev/videoX;子设备等还可使用 /dev/v4l-subdevX 等节点 缓冲区队列管理:通过 vb2_queue 实现高效的零拷贝数据传输 struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[36]; void (*notify)(struct v4l2_subdev *sd, unsigned int notification, void *arg); struct v4l2_ctrl_handler *ctrl_handler; struct v4l2_prio_state prio; struct kref ref; void (*release)(struct v4l2_device *v4l2_dev); }; 获取当前的格式 ...

October 14, 2026 · 6 min

v4l2核心结构体

核心结构体 核心组件作用 组件 功能 video_device 设备节点注册(创建 /dev/videoX) v4l2_device 设备逻辑管理(电源 / 子设备协调) vb2_queue 缓冲区队列管理(核心创新点) v4l2_subdev 子设备抽象(传感器 / ISP 等) struct v4l2_buffer 用来描述"一块视频缓冲区"的所有元信息。它的常用字段大致有: ...

October 14, 2026 · 2 min

gstreamer

命令测试 播放视频 gst-play-1.0 --flags=3 \ --videosink="fpsdisplaysink video-sink=xvimagesink signal-fps-measurements=true text-overlay=false sync=false" \ --audiosink="alsasink device=hw:1,0" \ /root/nfs/test2.mp4 参数 flag 这个参数控制 playbin 开启哪些功能,本质上是一个 bit mask(位掩码) bit 0 = 1 VIDEO bit 1 = 2 AUDIO bit 2 = 4 TEXT / subtitle flag=3 意味着开启视频和音频,但不启用字幕 TEXT。

October 4, 2026 · 1 min

ffmpeg

ffmpeg-6.0编译 把x264/x265 全部去掉,同时保留 MP4 写文件和音频转 AAC 所需的组件 ./configure --prefix=/home/meian/work/MyProject/ffmpeg/ffmpeg-6.0/out_Jz --arch=mips --target-os=linux --enable-cross-compile --cross-prefix=mips-v720s229-linux-uclibc-gnu- --disable-asm --enable-pic --disable-debug --disable-programs --disable-ffmpeg --disable-ffprobe --disable-ffplay --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-symver --disable-iconv --disable-avfilter --disable-avdevice --disable-postproc --disable-indevs --disable-outdevs --disable-v4l2-m2m --disable-encoders --disable-decoders --disable-demuxers --disable-muxers --disable-parsers --disable-protocols --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-encoder=aac --enable-parser=h264 --enable-parser=hevc --enable-muxer=mp4 --enable-protocol=file --extra-libs="-lpthread -lm" 正常的编译 ...

September 30, 2026 · 1 min