Toybrick

python sdk 多路解码出错

MWM

中级会员

积分
257
发表于 2022-8-12 16:38:32    查看: 2045|回复: 8 | [复制链接]    打印 | 显示全部楼层
  1. > thread-15 got frame. use = 0.053311 s
  2. > thread-17 got frame. use = 0.053342 s
  3. > thread-16 got frame. use = 0.053319 s
  4. > thread-13 got frame. use = 0.057605 s
  5. > thread-5 got frame. use = 0.053264 s
  6. > thread-2 got frame. use = 0.057661 s
  7. > thread-22 got frame. use = 0.053360 s
  8. > thread-11 got frame. use = 0.053379 s
  9. > thread-18 got frame. use = 0.053744 s
  10. > thread-10 got frame. use = 0.053248 s
  11. > thread-6 got frame. use = 0.060539 s
  12. > thread-14 got frame. use = 0.072897 s
  13. > thread-1 got frame. use = 0.053793 s
  14. > thread-9 got frame. use = 0.057637 s
  15. > thread-24 got frame. use = 0.055093 s
  16. > thread-0 got frame. use = 0.028877 s
  17. > thread-3 got frame. use = 0.050691 s
  18. > thread-4 got frame. use = 0.070230 s
  19. > thread-7 got frame. use = 0.080159 s
  20. > thread-26 got frame. use = 0.000015 s
  21. [08/12 07:14:24.064] T/: decode_get_frame get info changed found

  22. [08/12 07:14:24.064] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  23. [08/12 07:14:24.080] T/: decode_get_frame get info changed found

  24. [08/12 07:14:24.080] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  25. [08/12 07:14:24.103] T/: decode_get_frame get info changed found

  26. [08/12 07:14:24.103] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  27. [08/12 07:14:24.113] T/: decode_get_frame get info changed found

  28. [08/12 07:14:24.113] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  29. > thread-0 got frame. use = 0.073034 s
  30. [08/12 07:14:24.139] T/: decode_get_frame get info changed found

  31. [08/12 07:14:24.139] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  32. [08/12 07:14:24.148] T/: decode_get_frame get info changed found

  33. [08/12 07:14:24.148] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  34. [08/12 07:14:24.159] T/: decode_get_frame get info changed found

  35. [08/12 07:14:24.159] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  36. [08/12 07:14:24.164] T/: decode_get_frame get info changed found

  37. [08/12 07:14:24.164] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  38. [08/12 07:14:24.186] T/: decode_get_frame get info changed found

  39. [08/12 07:14:24.186] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  40. [08/12 07:14:24.186] T/: decode_get_frame get info changed found

  41. [08/12 07:14:24.186] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  42. [08/12 07:14:24.212] T/: decode_get_frame get info changed found

  43. [08/12 07:14:24.212] T/: decoder require buffer w:h [1280:720] stride [1280:720] size 1843200

  44. Segmentation fault
复制代码



发现只要超过12路同时进行解码就会出现Segmentation fault。不是应该能达到32路吗?
麻烦帮忙看下是什么问题。





回复

使用道具 举报

jefferyzhang

版主

积分
12848
发表于 2022-8-12 17:26:56 | 显示全部楼层
本帖最后由 jefferyzhang 于 2022-8-12 17:28 编辑

python没办法达到那么多路的,python是有GIL全局解释锁,相当于只有一个核在跑,python的多线程因为全局解释锁其实都只有单核在执行。
那你32路要达到30fps意味着每路只有1ms时间处理,想都知道不可能,未来python版本据说是会去掉这个GIL,可以等等看。

如果要做32路,目前只有用c/c++写才可能达到
回复

使用道具 举报

MWM

中级会员

积分
257
 楼主| 发表于 2022-8-13 09:00:21 | 显示全部楼层
本帖最后由 MWM 于 2022-8-13 09:04 编辑
jefferyzhang 发表于 2022-8-12 17:26
python没办法达到那么多路的,python是有GIL全局解释锁,相当于只有一个核在跑,python的多线程因为全局解 ...

好的。谢谢了。顺便问下有没有c++的demo。因为平时都是用python。

以及python 的demo在哪里下载,


同时发现sdk的文档有些错误我给你标出来
6.2.4  [size=8.77908pt]ret, frame = rtsp.readv([size=8.77908pt]1920[size=8.77908pt], [size=8.77908pt]1080[size=8.77908pt], toy.FMT_RGB888) 是read

6.3.4 [size=8.77908pt]rtsps = toy.RtspWriter([size=8.77908pt]"/live"[size=8.77908pt], toy.Encoder.H_264, [size=8.77908pt]554[size=8.77908pt]) 没有[size=11.7054px]Encoder成员。应该是toy.FMT_H264






回复

使用道具 举报

jefferyzhang

版主

积分
12848
发表于 2022-8-13 09:02:18 | 显示全部楼层
MWM 发表于 2022-8-13 09:00
好的。谢谢了。顺便问下有没有c++的demo。因为平时都是用python。

以及python 的demo在哪里下载,

c++ RK提供的很多硬件处理库,比如硬件编解码的mpp; 图像处理的rga;
你要自己组合起来用。
回复

使用道具 举报

MWM

中级会员

积分
257
 楼主| 发表于 2022-8-13 09:05:15 | 显示全部楼层
jefferyzhang 发表于 2022-8-13 09:02
c++ RK提供的很多硬件处理库,比如硬件编解码的mpp; 图像处理的rga;
你要自己组合起来用。 ...

好的。谢谢了。python的demo在哪里下有吗.我现在是对着文档自己写的
回复

使用道具 举报

jefferyzhang

版主

积分
12848
发表于 2022-8-13 09:15:31 | 显示全部楼层
MWM 发表于 2022-8-13 09:05
好的。谢谢了。python的demo在哪里下有吗.我现在是对着文档自己写的

python sdk的文档里每个章节都带有sample code呀,而且他是沿用opencv命名方式,
这都要再写demo,那这个python sdk的api设计的就太失败了。
回头有空我发几个帖子做几个经典例子。
回复

使用道具 举报

MWM

中级会员

积分
257
 楼主| 发表于 2022-8-13 09:18:46 | 显示全部楼层
jefferyzhang 发表于 2022-8-13 09:15
python sdk的文档里每个章节都带有sample code呀,而且他是沿用opencv命名方式,
这都要再写demo,那这个 ...

哈哈。也是就是。不过有用例还是会好。

对了后面会不会考虑加入直接读取本地文件进行编解码,而不通过第三方比如ffmpeg插件进行管道啥的.
回复

使用道具 举报

jefferyzhang

版主

积分
12848
发表于 2022-8-13 09:22:58 | 显示全部楼层
MWM 发表于 2022-8-13 09:18
哈哈。也是就是。不过有用例还是会好。

对了后面会不会考虑加入直接读取本地文件进行编解码,而不通过第 ...

你看下python sdk文档,是支持pipe输入的。里头都有demo写法了。
但是这个是有局限的,pipe没办法多路传输,并且没办法传递时间戳
回复

使用道具 举报

MWM

中级会员

积分
257
 楼主| 发表于 2022-8-13 09:42:10 | 显示全部楼层
本帖最后由 MWM 于 2022-8-13 09:45 编辑
jefferyzhang 发表于 2022-8-13 09:22
你看下python sdk文档,是支持pipe输入的。里头都有demo写法了。
但是这个是有局限的,pipe没办法多路传 ...   
有看到[size=14.6318pt]6.4 PipeCapture,这个貌似需要借助这个ffmpeg-python包。
好像需要依赖ffmpeg最新的固件貌似没有安装ffmpeg。我自己安装了跑好像会报错
  1. root@debian:/# ffmpeg: /lib/aarch64-linux-gnu/libOpenCL.so.1: no version information available (required by /lib/aarch64-linux-gnu/libavfilter.so.7)
  2. ffmpeg: /lib/aarch64-linux-gnu/libOpenCL.so.1: no version information available (required by /lib/aarch64-linux-gnu/libavfilter.so.7)
  3. ffmpeg: /lib/aarch64-linux-gnu/libOpenCL.so.1: no version information available (required by /lib/aarch64-linux-gnu/libavutil.so.56)
  4. ffmpeg: /lib/aarch64-linux-gnu/libOpenCL.so.1: no version information available (required by /lib/aarch64-linux-gnu/libavutil.so.56)
  5. ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers
  6.   built with gcc 10 (Debian 10.2.1-6)
  7.   configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  8.   libavutil      56. 51.100 / 56. 51.100
  9.   libavcodec     58. 91.100 / 58. 91.100
  10.   libavformat    58. 45.100 / 58. 45.100
  11.   libavdevice    58. 10.100 / 58. 10.100
  12.   libavfilter     7. 85.100 /  7. 85.100
  13.   libavresample   4.  0.  0 /  4.  0.  0
  14.   libswscale      5.  7.100 /  5.  7.100
  15.   libswresample   3.  7.100 /  3.  7.100
  16.   libpostproc    55.  7.100 / 55.  7.100
  17. Input #0, h264, from '/home/toybrick/1080.h264':
  18.   Duration: N/A, bitrate: N/A
  19.     Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080, 25 fps, 25 tbr, 1200k tbn, 50 tbc
  20. Output #0, h264, to 'pipe:':
  21.   Metadata:
  22.     encoder         : Lavf58.45.100
  23.     Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080, q=2-31, 25 fps, 25 tbr, 25 tbn, 25 tbc
  24. Stream mapping:
  25.   Stream #0:0 -> #0:0 (copy)
  26. Press [q] to stop, [?] for help
  27. av_interleaved_write_frame(): Broken pipe
  28. Error writing trailer of pipe:: Broken pipe
  29. frame=    1 fps=0.0 q=-1.0 Lsize=      84kB time=00:00:00.04 bitrate=17273.0kbits/s speed= 563x
  30. video:84kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
  31. Conversion failed!
  32. root@debian:/# ls ffmpeg: /lib/aarch64-linux-gnu/libOpenCL.so.1:
  33. ls: cannot access 'ffmpeg:': No such file or directory
  34. ls: cannot access '/lib/aarch64-linux-gnu/libOpenCL.so.1:': No such file or directory
  35. root@debian:/# /usr/lib/x86_64-linux-gnu/libOpenCL.so
  36. bash: /usr/lib/x86_64-linux-gnu/libOpenCL.so: No such file or directory
复制代码

代码如下
  1. import toybrick as toy
  2. import cv2
  3. import ffmpeg


  4. process1 = (
  5.     ffmpeg
  6.     .input('/home/toybrick/1080.h264')
  7.     # .output('-', format='h264', codec='copy')
  8.     .output('-', format='h264', codec='copy')
  9.     .run_async(pipe_stdout=True)
  10. )

  11. disp = toy.Display("File", 1920, 1080, True)
  12. pipe = toy.PipeCapture(process1, toy.FMT_H264)
  13. pipe.start()

  14. while True:
  15.     ret, frame = pipe.read(1920, 1080)
  16.     if frame is None:
  17.         time.sleep(0.01)
  18.         continue
  19.     disp.imshow(frame)
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表