Toybrick

gstreamer-rockchip保存h264视频最后部分出错以及无法获得frame#

chuyee

中级会员

积分
352
楼主
发表于 2019-3-2 06:54:45    查看: 9753|回复: 8 | [复制链接]    打印 | 显示全部楼层
本帖最后由 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

中级会员

积分
352
沙发
 楼主| 发表于 2019-3-7 01:42:31 | 显示全部楼层
Anyone can help? It's very easy to reproduce...
回复

使用道具 举报

chuyee

中级会员

积分
352
板凳
 楼主| 发表于 2019-4-16 01:45:38 | 显示全部楼层
没有啊,视频基本是可以保存,但是由于最后mpp encoding crash会丢几帧。而且拿不到duration啊,没人能解决吗?
回复

使用道具 举报

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

本版积分规则

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


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