7

情况:

我想使用板载 H.264 编码器在我的 Raspberry Pi 512mb 上生成延时摄影。

输入:+300 JPEG 文件(2592 x 1944 像素),例如:http: //i.imgur.com/czohiki.jpg

输出:h264 视频文件(2592 x 1944 像素)

GStreamer 1.0.8 + omxencoder ( http://pastebin.com/u8T7mE18 )

树莓派版本:2013 年 6 月 17 日 20:45:38 版本 d380dde43fe729f043befb5cf775f99e54586cde (clean) (release)

内存:gpu_mem_512=400

Gstreamer 管道:

sudo gst-launch-1.0 -v multifilesrc location=GOPR%04d.JPG start-index=4711 stop-index=4750 caps="image/jpeg,framerate=(fraction)25/1" do-timestamp=true !omxmjpegdec !视频速率!视频/x-raw,帧率=1/5!视频转换!omxh264enc !“视频/x-h264,profile=high”!h264解析!队列最大大小字节=10000000!matroskamux !文件接收器位置=test.mkv --gst-debug=4

问题: Gstreamer 挂起并且没有生成输出。

--gst-调试=4:

0:00:01.027331700 2422 0x17824f0 INFO GST_EVENT gstevent.c:709:gst_event_new_segment: 创建段事件时间段 start=0:00:00.000000000, stop=99:99:99.999999999, rate=1.000000, applied_rate=0x, flags时间=0:00:00.000000000,基数=0:00:00.000000000,位置0:00:00.000000000,持续时间99:99:99.999999999

0:00:29.346875982 2422 0x17824f0 INFO basesrc gstbasesrc.c:2619:gst_base_src_loop: 在 gst_base_src_get_range() = eos 之后暂停

--gst-调试=5:

0:01:16.089222125 2232 0x1fa8f0 调试 basesrc gstbasesrc.c:2773:gst_base_src_loop: 暂停任务,原因 eos

0:01:16.095962979 2232 0x1fa8f0 调试 GST_PADS gstpad.c:5251:gst_pad_pause_task:暂停任务

0:01:16.107724723 2232 0x1fa8f0 调试任务 gsttask.c:662:gst_task_set_state: 将任务 0x2180a8 更改为状态 2

0:01:16.435800597 2232 0x1fa8f0 调试 GST_EVENT gstevent.c:300:gst_event_new_custom: 创建新事件 0x129f80 eos 28174

0:01:16.436191588 2232 0x1fa8f0 调试 GST_PADS gstpad.c:4628:gst_pad_push_event:事件 eos 已更新

0:01:16.436414584 2232 0x1fa8f0 调试 GST_PADS gstpad.c:3333:check_sticky: 推送所有粘性事件

0:01:16.436620579 2232 0x1fa8f0 调试 GST_PADS gstpad.c:3282:push_sticky: 已收到事件流启动

0:01:16.436816575 2232 0x1fa8f0 调试 GST_PADS gstpad.c:3282:push_sticky: 事件上限已收到

0:01:16.437001571 2232 0x1fa8f0 调试 GST_PADS gstpad.c:3282:push_sticky: 已收到事件段

0:01:16.440457495 2232 0x1fa8f0 调试 GST_EVENT gstpad.c:4771:gst_pad_send_event_unchecked:在时间 99:99:99.999999999 有事件类型 eos 事件:(NULL)

0:01:16.449986289 2232 0x1fa8f0 调试视频解码器 gstvideodecoder.c:1144:gst_video_decoder_sink_event:收到事件 28174,eos

0:01:16.462165024 2232 0x1fa8f0 调试 omxvideodec gstomxvideodec.c:2489:gst_omx_video_dec_drain:排水组件

0:01:16.463930986 2232 0x1fa8f0 调试 omx gstomx.c:1223:gst_omx_port_acquire_buffer:从端口 130 获取 video_decode 缓冲区

0:01:16.465537951 2232 0x1fa8f0 调试 omx gstomx.c:1334:gst_omx_port_acquire_buffer:video_decode 端口 130 有待处理的缓冲区

0:01:16.466576928 2232 0x1fa8f0 调试 omx gstomx.c:1353:gst_omx_port_acquire_buffer:从 video_decode 端口 130 获取缓冲区 0x21f938 (0xb2068550):0

0:01:16.468237892 2232 0x1fa8f0 调试 omx gstomx.c:1375:gst_omx_port_release_buffer: 将缓冲区 0x21f938 (0xb2068550) 释放到 video_decode 端口 130

0:01:16.470360846 2232 0x1fa8f0 调试 omx gstomx.c:1420:gst_omx_port_release_buffer:释放缓冲区 0x21f938 到 video_decode 端口 130:无 (0x00000000)

0:01:16.472046809 2232 0x1fa8f0 调试 omxvideodec gstomxvideodec.c:2544:gst_omx_video_dec_drain:等待组件耗尽

完整的控制台转储:https ://mega.co.nz/#!eI1ASBSY!R4mnuGqRH7M8dT4q6j03mBKsQ1A-7oCXU4stu50LnOw

问题:

  1. 我究竟做错了什么?

  2. 是否有另一种或更有效的方法可以从树莓派上的 JPEG 中创建高分辨率延时摄影?

4

2 回答 2

2

对死灵感到抱歉,但我认为这是试图以Raspberry Pi HW H264比其能力更高的分辨率使用编码器。它可以管理超过1080p30,并且具有2048像素的最大线长,因此您的源图像太大。

您可以尝试MJPEG哪个没有相同的限制。

于 2015-09-23T13:49:43.520 回答
0

我现在没有要测试的 Pi,但我怀疑一个可能的问题是您在同一进程中有两个 OMX 元素。GStreamer 只是包装 OMX 和 IIRC,OMX API 并不真正希望您同时运行两件事,尤其是在同一个进程中......

我会用 jpegdec 而不是 omxmjpegdec 来尝试它,管道更符合以下几点:

gst-launch-1.0 multifilesrc location="GOPR%04d.JPG "start-index=4711 stop-index=4750 !图片/JPEG,帧率=1/5!JPEG格式!视频转换!omxh264enc !h264解析!matroskamux !文件接收器位置=test.mkv

我认为在 Pi 上使用队列元素也没有任何意义。

于 2014-10-21T20:27:04.997 回答