Toybrick

标题: gstreamer-rockchip保存h264视频最后部分出错以及无法获得frame# [打印本页]

作者: chuyee    时间: 2019-3-2 06:54
标题: gstreamer-rockchip保存h264视频最后部分出错以及无法获得frame#
本帖最后由 chuyee 于 2019-3-2 09:00 编辑

1. 通过dnf安装gstreamer-rockchip和mpp
  1. $ sudo dnf install gstreamer-rockchip librockchip_rga librockchip_rtsp librockchip_vendor librockchip_isp librockchip_drm librockchip_mpp librockchip_rga-devel librockchip_rtsp-devel librockchip_vendor-devel librockchip_mpp-tests librockchip_drm-devel librockchip_mpp-devel
复制代码
2. 验证gstreamer plugins
  1. $ gst-inspect-1.0 |grep rockchip
  2. rockchipmpp:  mppjpegdec: Rockchip's MPP JPEG image decoder
  3. rockchipmpp:  mppjpegenc: Rockchip Mpp JPEG Encoder
  4. rockchipmpp:  mpph264enc: Rockchip Mpp H264 Encoder
  5. rockchipmpp:  mppvideodec: Rockchip's MPP video decoder
复制代码
3. 使用opencv C++ API打开并保存视频文件
VideoCapture cap("/home/toybrick/Downloads/input.mp4");
printf("frame count: %d\n", cap.get(CV_CAP_PROP_FRAME_COUNT));
VideoWriter video("output.avi", CV_FOURCC('X', '2', '6', '4'), 30, Size(640, 480));
    while (cap.isOpened()) {
    cap >> frame;
  video.write(frame);
}

4. 运行以上程序得到的console信息

  1. Failed to query video capabilities: Inappropriate ioctl for device
  2. libv4l2: error getting capabilities: Inappropriate ioctl for device
  3. VIDEOIO ERROR: V4L: device /home/toybrick/input.mp4: Unable to query number of channels
  4. mpi: mpp version: Without VCS info
  5. mpp_rt: NOT found ion allocator
  6. mpp_rt: found drm allocator
  7. mpp: deprecated block control, use timeout control instead
  8. warning: GStreamer: unable to query duration of stream (/builddir/build/BUILD/opencv-3.4.1/modules/videoio/src/cap_gstreamer.cpp:904)
  9. warning: Cannot query video position: status=1 value=0 duration=-1
  10. (/builddir/build/BUILD/opencv-3.4.1/modules/videoio/src/cap_gstreamer.cpp:952)
  11. frame count: -1
  12. mpi: mpp version: Without VCS info
  13. h264e_api: h264e_config MPP_ENC_SET_RC_CFG bps 1555200 [1458000 : 1652400]
  14. **
  15. ERROR:gstmppvideoenc.c:115:gst_mpp_video_enc_stop: assertion failed: (g_atomic_int_get (&self->active) == FALSE)
  16. Aborted (core dumped)
复制代码


这里面有两个问题,都应该很容易复现:
1. mpph264enc plugin assert. 这个会导致视频最后几帧无法写入。
2. CV_CAP_PROP_FRAME_COUNT读出来的frame count = -1。这会导致程序无法确定输入视频的长度(duration)。


作者: chuyee    时间: 2019-3-7 01:42
Anyone can help? It's very easy to reproduce...
作者: granis    时间: 2019-4-11 17:29
楼主视频保存解决了么?
作者: chuyee    时间: 2019-4-16 01:45
没有啊,视频基本是可以保存,但是由于最后mpp encoding crash会丢几帧。而且拿不到duration啊,没人能解决吗?
作者: 勇Z的心    时间: 2019-8-1 14:26
@楼主,请问你解决了么?我们也遇到你这个一模一样的问题,你怎么解决的?
作者: 勇Z的心    时间: 2019-8-1 14:42
有技术支持来回答下么?   谢谢!!!
作者: cr7jj    时间: 2020-3-9 15:01
勇Z的心 发表于 2019-8-1 14:42
有技术支持来回答下么?   谢谢!!!

我也遇到过同样的错误
mpi: mpp version: Without VCS info
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
这是什么原因呢?
作者: jefferyzhang    时间: 2020-3-10 14:36
gsteamer不属于我们维护的,你可以向github的项目里去提issues
https://github.com/rockchip-linux/gstreamer-rockchip
作者: Gang    时间: 2023-7-18 16:08
github上找不到 https://github.com/rockchip-linux/gstreamer-rockchip 这个仓库被删掉了吗?




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3