0

我正在尝试将视频rtph265pay从一个元素中输入,appsrc以便 gstreamer-rtsp-server 框架可以提供一个流。

如果我给框架一个这样的管道,appsrc name=hevc ! h265parse ! rtph265pay name=pay0那么它就可以正常工作。如果我删除h265parse并调用框架setCaps()appsrc解析版本,video/x-h265,stream-format=hvc1,alignment=au,parsed=true则会退出整个应用程序而不会出现明显的错误消息。(经过更多实验后,它很可能会崩溃,因为它试图分配惊人的内存量并且失败了。我必须停用所有交换以确保我的机器保持交互)

** Message: activated deep-notify
0:00:03.860349781 11247 0x7f46cc0294a0 FIXME                default gstutils.c:3902:gst_pad_create_stream_id_internal:<appsrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:03.860568982 11247 0x7f46cc029770 FIXME                default gstutils.c:3902:gst_pad_create_stream_id_internal:<hevc:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
/GstPipeline:media-pipeline/GstRtpBin:rtpbin0: do-retransmission = false
/GstPipeline:media-pipeline/GstBin:bin0/GstAppSrc:hevc.GstPad:src: caps = "video/x-h265\,\ stream-format\=\(string\)hvc1\,\ alignment\=\(string\)au\,\ parsed\=\(boolean\)true"
/GstPipeline:media-pipeline/GstBin:bin0/GstRtpH265Pay:pay0.GstPad:sink: caps = "video/x-h265\,\ stream-format\=\(string\)hvc1\,\ alignment\=\(string\)au\,\ parsed\=\(boolean\)true"
trying to initialize log file /var/tmp/artillery-turtle-latency-2018-02-27_16.txt
/GstPipeline:media-pipeline/GstBin:bin0/GstRtpH265Pay:pay0.GstPad:src: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstBin:bin0.GstGhostPad:src_0: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstRtpBin:rtpbin0.GstGhostPad:send_rtp_sink_0.GstProxyPad:proxypad2: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstRtpBin:rtpbin0/GstRtpSession:rtpsession0.GstPad:send_rtp_src: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstRtpBin:rtpbin0.GstGhostPad:send_rtp_src_0: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstTee:tee0.GstTeePad:src_0: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstQueue:queue0.GstPad:sink: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstQueue:queue0.GstPad:src: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstQueue:queue0.GstPad:src: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstAppSink:appsink0.GstPad:sink: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"
/GstPipeline:media-pipeline/GstAppSink:appsink0.GstPad:sink: caps = "application/x-rtp\,\ media\=\(string\)video\,\ payload\=\(int\)96\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)H265\,\ ssrc\=\(uint\)2832925622\,\ timestamp-offset\=\(uint\)619621697\,\ seqnum-offset\=\(uint\)9508"

我已经在测试管道的identity silent=false任一侧安装了测试管道,h265parse以试图了解它在做什么,但我不确定哪个差异是重要的。

/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity0: last-message = chain   ******* (identity0:sink) (51472 bytes, dts: none, pts: 0:00:06.875000000, duration: 0:00:00.041666000, offset: -1, offset_end: -1, flags: 00000000 , meta: none) 0x7f53dc0637c0
/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity0: last-message = chain   ******* (identity0:sink) (12665 bytes, dts: none, pts: 0:00:06.916666000, duration: 0:00:00.041666000, offset: -1, offset_end: -1, flags: 00000000 , meta: none) 0x7f53dc0bcd90
/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity0: last-message = chain   ******* (identity0:sink) (12583 bytes, dts: none, pts: 0:00:06.958333000, duration: 0:00:00.041666000, offset: -1, offset_end: -1, flags: 00000000 , meta: none) 0x7f53dc071bf0

相对

/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity1: last-message = chain   ******* (identity1:sink) (51473 bytes, dts: none, pts: 0:00:06.833333000, duration: none, offset: 2722840, offset_end: -1, flags: 00002000 delta-unit , meta: none) 0x7f53dc071ae0
/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity1: last-message = chain   ******* (identity1:sink) (12666 bytes, dts: none, pts: 0:00:06.875000000, duration: none, offset: 2774312, offset_end: -1, flags: 00002000 delta-unit , meta: none) 0x7f53dc10e400
/GstPipeline:media-pipeline/GstBin:bin0/GstIdentity:identity1: last-message = chain   ******* (identity1:sink) (12584 bytes, dts: none, pts: 0:00:06.916666000, duration: none, offset: 2786977, offset_end: -1, flags: 00002000 delta-unit , meta: none) 0x7f53dc1119b0

我可以看到的差异包括:

  • 它增加了一个字节(不知道为什么,或者什么)
  • 它将 PTS 移动 -1/24 (单帧周期)
  • 它删除了持续时间
  • 它将偏移量设置为一个值,该值似乎是修改后字节数的总和(并不奇怪)
  • 它设置了一个标记为 delta-unit 的标志

如何调整发送到 的缓冲区,appsrc以便不再需要 的开销h265parse?我已经非常接近了,但是该h265parse元素的文档可以描述为介于稀薄和不存在之间的某个地方(gst-plugins-bad 元素列表中甚至没有该元素的文档链接)。

4

0 回答 0