Gstreamer 在从 Raspberry pi 上的 JPEG 生成游戏中时光倒流时挂起

标签 gstreamer raspberry-pi video-processing openmax

情况:

我想使用板载 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(干净)(发布)

内存: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 ! videorate ! video/x-raw,framerate=1/5 ! videoconvert ! omxh264enc ! "video/x-h264,profile=high" ! h264parse ! queue max-size-bytes=10000000 ! matroskamux ! filesink location=test.mkv --gst-debug=4



问题:
Gstreamer 挂起,不生成任何输出。

--gst-debug=4:

0:00:01.027331700 2422 0x17824f0 INFO GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1.000000, applied_rate=1.000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999

0:00:29.346875982 2422 0x17824f0 INFO basesrc gstbasesrc.c:2619:gst_base_src_loop: pausing after gst_base_src_get_range() = eos



--gst-debug=5:

0:01:16.089222125 2232 0x1fa8f0 DEBUG basesrc gstbasesrc.c:2773:gst_base_src_loop: pausing task, reason eos

0:01:16.095962979 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:5251:gst_pad_pause_task: pause task

0:01:16.107724723 2232 0x1fa8f0 DEBUG task gsttask.c:662:gst_task_set_state: Changing task 0x2180a8 to state 2

0:01:16.435800597 2232 0x1fa8f0 DEBUG GST_EVENT gstevent.c:300:gst_event_new_custom: creating new event 0x129f80 eos 28174

0:01:16.436191588 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:4628:gst_pad_push_event: event eos updated

0:01:16.436414584 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:3333:check_sticky: pushing all sticky events

0:01:16.436620579 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:3282:push_sticky: event stream-start was already received

0:01:16.436816575 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:3282:push_sticky: event caps was already received

0:01:16.437001571 2232 0x1fa8f0 DEBUG GST_PADS gstpad.c:3282:push_sticky: event segment was already received

0:01:16.440457495 2232 0x1fa8f0 DEBUG GST_EVENT gstpad.c:4771:gst_pad_send_event_unchecked: have event type eos event at time 99:99:99.999999999: (NULL)

0:01:16.449986289 2232 0x1fa8f0 DEBUG videodecoder gstvideodecoder.c:1144:gst_video_decoder_sink_event: received event 28174, eos

0:01:16.462165024 2232 0x1fa8f0 DEBUG omxvideodec gstomxvideodec.c:2489:gst_omx_video_dec_drain: Draining component

0:01:16.463930986 2232 0x1fa8f0 DEBUG omx gstomx.c:1223:gst_omx_port_acquire_buffer: Acquiring video_decode buffer from port 130

0:01:16.465537951 2232 0x1fa8f0 DEBUG omx gstomx.c:1334:gst_omx_port_acquire_buffer: video_decode port 130 has pending buffers

0:01:16.466576928 2232 0x1fa8f0 DEBUG omx gstomx.c:1353:gst_omx_port_acquire_buffer: Acquired buffer 0x21f938 (0xb2068550) from video_decode port 130: 0

0:01:16.468237892 2232 0x1fa8f0 DEBUG omx gstomx.c:1375:gst_omx_port_release_buffer: Releasing buffer 0x21f938 (0xb2068550) to video_decode port 130

0:01:16.470360846 2232 0x1fa8f0 DEBUG omx gstomx.c:1420:gst_omx_port_release_buffer: Released buffer 0x21f938 to video_decode port 130: None (0x00000000)

0:01:16.472046809 2232 0x1fa8f0 DEBUG omxvideodec gstomxvideodec.c:2544:gst_omx_video_dec_drain: Waiting until component is drained



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

问题:
  • 我究竟做错了什么?
  • 是否有另一种或更有效的方法可以在树莓派上从 JPEG 创建高分辨率延时摄影?
  • 最佳答案

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

    你可以试试 MJPEG没有相同的限制。

    关于Gstreamer 在从 Raspberry pi 上的 JPEG 生成游戏中时光倒流时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234107/

    相关文章:

    c++ - gtkmm 和 gstreamermm 测试代码抛出运行时错误

    Android 通过 udp 发送 mpegts 流

    websocket - Raspberry Pi 上的 Tornado 使用 websockets 以及监控串口 Arduino 通信

    java - 如何控制 JVM 使用的内存?

    c++ - Media Foundation - 如何在 MFT(Media Foundation Transform)中更改帧大小

    audio - Gstreamer 复制 2 声道音频

    python - 从句柄获取窗口 xid 以在 Python 中绘制 GStreamer 视频

    raspberry-pi - LIRC 发送 : could not connect to socket irsend: No such file or directory

    python - 如何使用 `imageio` 在视频中寻找帧?

    android - ffmpeg 棕褐色效果对视频