【发布时间】:2018-02-10 17:32:08
【问题描述】:
所以我一直在做我的一个项目,我想让无人机自主飞行。无人机创建了一个 WiFi,我从我的 PC 连接到该 WiFi。 视频流来自 UDP 连接,采用原始 h264 格式。我使用 gstreamer 来显示流:
gst-launch-1.0 udpsrc port=5555 ! h264parse ! avdec_h264 ! videoconvert ! autovideosink sync=false
这非常适合观看直播。但我需要的是流的每个图像的 3D RGB 数组。所以我试图通过将解码后的 h264 转换为 RGB 来将其从 gstreamer 管道中取出。
gst-launch-1.0 udpsrc port=5555 ! h264parse ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,format=RGB ! tcpclientsink host=NETCAT_TCPLISTENER port=8888
nc -lnvp 8888 > rgb.txt
但我很难弄清楚转储的含义。 wiki 也没有真正帮助我。 https://gstreamer.freedesktop.org/documentation/design/mediatype-video-raw.html
+--+--+--+ +--+--+--+
|R0|G0|B0| |R1|G1|B1| ...
+--+--+--+ +--+--+--+
Component 0: R
depth: 8
pstride: 3
offset: 0
Component 1: G
depth: 8
pstride: 3
offset: 1
Component 2: B
depth 8
pstride: 3
offset: 2
Image
default rstride: RU4 (width * 3)
default size: rstride (image) * height
这是一个示例 hexdump 的 sn-p:
hexdump rgb.txt
.
.
.
0000100 232d 2b4c 4c21 212b 2b4c 4b21 202a 2a4b
0000110 4b20 202a 2a4b 4b20 202a 2a4a 4922 2129
0000120 2a45 4523 232a 2a42 4122 2129 2941 4021
0000130 2028 263e 3e1e 1e26 253d 3d1d 1d25 243c
0000140 3b1c 1b23 233b 3a1b 1a22 2137 3719 1921
0000150 2032 3217 1720 202f 2f16 1620 202f 2f16
0000160 1620 1f2e 2e15 151f 1e2d 2d14 141e 1d2c
0000170 2c13 131d 1d2c 2c13 131d 1d27 2714 141d
0000180 1b20 2014 141b 1c1c 1c13 131c 1c1c 1c13
0000190 131c 1b1b 1b12 121b 1a1a 1a11 111a 1919
00001a0 1910 1019 1919 1910 1019 181a 1a10 1018
00001b0 171c 1c10 1017 171c 1c10 1017 171c 1c10
00001c0 1017 171c 1c10 1017 171c 1c10 1017 171c
00001d0 1c10 1017 171c 1c10 1017 171c 1c10 1017
00001e0 191b 1b11 1119 1a1a 1a11 111a 1a1a 1a11
00001f0 111a 1a1a 1a11 111a 1a1a 1a11 111a 1a1a
0000200 1a11 111a 1a1a 1b11 121b 1b1b 1c12 131c
0000210 1d1d 1f14 161f 1f1f 2016 1720 2020 2017
0000220 1720 2020 2017 1720 2020 2017 1720 2020
0000230 2017 1720 2020 2017 1720 2020 2017 1720
0000240 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
0000250 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
0000260 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
0000270 2020 2017 1720 2020 2017 1720 2020 2017
0000280 1720 2020 2017 1720 2020 2017 1720 2020
0000290 2017 1720 2020 2017 1720 2020 2017 1720
00002a0 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
00002b0 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
00002c0 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
00002d0 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
00002e0 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
00002f0 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
0000300 1d1d 1d14 141d 1d1d 1d14 141d 1d1d 1d14
0000310 141d 1d1d 1d14 141d 1d1d 1d14 141d 1d1d
0000320 1d14 141d 1d1d 1d14 141d 1d1d 1d14 141d
0000330 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
0000340 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
0000350 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
0000360 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
0000370 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
0000380 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
0000390 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
00003a0 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
00003b0 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
00003c0 1f1f 1f16 161f 1f1f 1f16 161f 1f1f 1f16
00003d0 161f 1f1f 1f16 161f 1f1f 1f16 161f 1f1f
00003e0 1f16 161f 1f1f 1f16 161f 1f1f 1f16 161f
00003f0 1d1d 1d14 141d 1d1d 1d14 141d 1d1d 1d14
0000400 141d 1d1d 1f14 161f 1f1f 1f16 161f 1f1f
0000410 2016 1720 2020 2017 1720 2020 2017 1720
0000420 2121 2118 1821 2121 2118 1821 2121 2118
0000430 1821 2121 2118 1821 2121 2118 1821 2121
0000440 1517 ff13 1517 ff13 1517 ff13 1517 ff13
.
.
.
所以我的问题是:如何解释 video/x-raw,format=RGB 函数的 RGB 转储? (我的目标:为了编写一个解析器,它返回一个流的每一帧的 3D RGB 数组。)
【问题讨论】:
-
假设您的图片为 640x480 像素。您可能可以使用 ImageMagick 将其制作成这样的 JPEG
convert -depth 8 -size 640x480 RGB:rgb.txt -auto-level result.jpg -
它只是表示第一个字节是红色,下一个是绿色,下一个是蓝色。然后重复第二个像素。
-
@MarkSetchell
convert -depth 8 -size 640x480 RGB:rgb.txt-auto-level result.jpg 生成图片,但它们只是充满了噪音。在我看来,那里没有任何意义,但感谢您的回答。我想进一步了解你的第二个陈述。让我们看最后一行。1517 ff13 1517 ff13 1517 ff13 1517 ff13。这些是十六进制值。十六进制的 1517 是十进制的 5399。但是RGB是[255,255,255]的十进制格式。我应该如何处理这些大数字? -
您能否添加前几行的转储,或共享整个二进制文件,并告诉我您的图像尺寸?
-
每个像素取 2 个字母/数字。 15=> 红色是最大 255 中的 21。 17=> 如果最大为 255,则为绿色 23。 ff=> 蓝色是 255。
标签: colors gstreamer rgb h.264 video-processing