Toybrick

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

chuyee

中级会员

积分
352
楼主
发表于 2019-3-2 06:54:45    查看: 12634|回复: 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...
回复

使用道具 举报

granis

注册会员

积分
73
板凳
发表于 2019-4-11 17:29:56 | 只看该作者
楼主视频保存解决了么?
回复

使用道具 举报

chuyee

中级会员

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

使用道具 举报

勇Z的心

注册会员

积分
94
5#
发表于 2019-8-1 14:26:19 | 只看该作者
@楼主,请问你解决了么?我们也遇到你这个一模一样的问题,你怎么解决的?
回复

使用道具 举报

勇Z的心

注册会员

积分
94
6#
发表于 2019-8-1 14:42:19 | 只看该作者
有技术支持来回答下么?   谢谢!!!
回复

使用道具 举报

cr7jj

中级会员

积分
456
7#
发表于 2020-3-9 15:01:44 | 只看该作者
勇Z的心 发表于 2019-8-1 14:42
有技术支持来回答下么?   谢谢!!!

我也遇到过同样的错误
mpi: mpp version: Without VCS info
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
这是什么原因呢?
回复

使用道具 举报

jefferyzhang

版主

积分
13574
8#
发表于 2020-3-10 14:36:27 | 只看该作者
gsteamer不属于我们维护的,你可以向github的项目里去提issues
https://github.com/rockchip-linux/gstreamer-rockchip
回复

使用道具 举报

Gang

注册会员

积分
91
9#
发表于 2023-7-18 16:08:01 | 只看该作者
github上找不到 https://github.com/rockchip-linux/gstreamer-rockchip 这个仓库被删掉了吗?
回复

使用道具 举报

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

本版积分规则

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


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