How to get RTCP sender report from rtspsrc element?

이병헌 byunghun.lee at fainders.ai
Tue Aug 31 15:50:17 UTC 2021


Wow... I felt like I met a light in the middle of sea
Really really thanks to your considerate answer..

I wish you blessings, thanks.

2021년 9월 1일 (수) 오전 12:33, Ben Rush <ben at ben-rush.net>님이 작성:

>
>
> On Tue, Aug 31, 2021 at 8:49 AM 이병헌 <byunghun.lee at fainders.ai> wrote:
>
>> Awesome, thanks!!!
>> You saved me
>>
>> And.. If you okay, and if you have, can you recommand me some papers or
>> document to understand more deep about gstreamer?
>> I tried myself with gstreamer official document in website, but in some
>> cases, I got a feeling that stucked at a wall of knowledge...
>>
>
> Yeah. I wouldn't say much of what I've encountered in using GStreamer is
> complicated; I would say it's overwhelming in the sense that there's so
> much to piece together in order to get done what you want to get done. I
> often find myself having to dive into the source code to understand what
> you want to do: most of the "documentation" I find are actually examples or
> code snippets on GitHub.
>
> As an example, take the information I just gave you. How does one go about
> figuring this out?
>
> I started with understanding the GObject system when I started learning
> GStreamer. It's the paradigm upon which GStreamer's codebase is built. It
> can, itself, be confusing at times to look at if you come from the
> C++/C#/etc world. If you don't understand how to query properties, set
> properties, register for events, clean up resources, etc. with the GObject
> type system, you're going to be constantly confused when looking at
> GStreamer code. So, start there. Google for the GObject type system and
> follow the examples and walk through it. It's not hard, it's just different
> to look at.
>
> Then understand the basics of how pipelines are constructed. Some good
> documentation:
> https://gstreamer.freedesktop.org/documentation/tutorials/basic/dynamic-pipelines.html?gi-language=c.
> Now that you understand the GObject type system, you can understand the
> nature of this code a bit better. Understand concepts about bins and pads
> and elements and how they tie together and are constructed. One way that's
> really good to understand this is to understand how to generate pipeline
> graphs:
> https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c#getting-pipeline-graphs
> .
>
> Next it's about understanding the "objects" that relate to your problem.
> You're dealing with RTP. So, Google "RTP GStreamer". The first link that
> popped up is:
> https://gstreamer.freedesktop.org/documentation/additional/rtp.html?gi-language=c.
> Now, focus on the objects / components involved. Some examples include:
> rtpbin, rtpmanager, rtpsession, etc. These objects are going to relate to
> elements in the pipeline that gets built. Using the GObject system, you can
> query these elements, get their properties, set their properties, etc.
>
> That's how I discovered "internal-session" on the GstRTPSession object: it
> got the RTPSession object, which has a signal ("event") for getting the
> RTCP packets. All of this was the result of crawling the documentation,
> looking at sample code on github by finding a couple of snippets here and
> there until I pull together a more complete picture.
>
> ...and there may be a better way to do it too. That's the other thing.
> There's often several ways to get to the end goal.
>
> One final word: if you're on Windows, be forewarned. At times things don't
> work as expected there. A lot of (very good) work has been done by some
> smart people to get it there, but the focus is still very clearly on Linux
> by many.
>
>
>> Anyway whether you recommand it to me or not,
>> Thank you.
>>
>>
>> 2021년 8월 31일 (화) 오후 10:19, Ben Rush <ben at ben-rush.net>님이 작성:
>>
>>> Hello
>>>
>>> On Tue, Aug 31, 2021 at 1:30 AM 이병헌 via gstreamer-devel <
>>> gstreamer-devel at lists.freedesktop.org> wrote:
>>>
>>>> Hi.
>>>> I’m new on gstreamer, and I have some problem with this issue for many
>>>> days..
>>>>
>>>> I need to get absolute timestamp from multiple rtsp camera.
>>>> And with some effort, I got to know that I can get absolute timestamp
>>>> from "RTCP SR(sender report)” in RTSP packets
>>>> But I can not find the proper way to get RTCP SR from rtspsrc element
>>>> or rtpbin in gstreamer document..
>>>> And actually I can not understand well about rtpbin’s role
>>>> So my questions are
>>>>
>>>> 1. How to get RTCP SR with rtspsrc element or rtpbin element
>>>>
>>>
>>> With your pipeline, get the GstRTPSession:
>>>
>>> rtpSession = gst_bin_get_by_name(GST_BIN(_pipeline->pipeline),
>>> "rtpsession0");
>>>
>>> Get the internal RTPSession from it:
>>>
>>> GstElement* internalRtpSession;
>>> g_object_get(rtpSession, "internal-session", &internalRtpSession, NULL);
>>>
>>> Connect to on-receiving-rtcp:
>>>
>>> g_signal_connect(internalRtpSession, "on-receiving-rtcp",
>>> G_CALLBACK(on_rtcp_callback), NULL);
>>>
>>> Iterate over the RTCP packets in the buffer:
>>>
>>> GstRTCPBuffer rtcpBuffer = GST_RTCP_BUFFER_INIT;
>>> gst_rtcp_buffer_map(buffer, GST_MAP_READ, &rtcpBuffer);
>>> GstRTCPPacket rtcpPacket;
>>> if (gst_rtcp_buffer_get_first_packet(&rtcpBuffer, &rtcpPacket))
>>> {
>>> while (gst_rtcp_packet_move_to_next(&rtcpPacket))
>>> {
>>> GstRTCPType type = gst_rtcp_packet_get_type(&rtcpPacket);
>>>
>>>>
>>>> 2. If I connect devices into rtpbin element, then does rtpbin sync
>>>> sources from multiple device automatically?
>>>> I mean, suppose If there are two rtsp camera CAM_1 CAM_2, and if I send
>>>> PLAY request in same time on my client
>>>> And if there have network delay, so client get packets of PLAY request
>>>> of CAM_1 10 seconds more later than CAM_2
>>>> Then does rtpbin element sync that 10 seconds automatically?
>>>>
>>>
>>> I'm not sure.
>>>
>>>
>>>>
>>>> Thanks for reading.
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20210901/87104726/attachment.htm>


More information about the gstreamer-devel mailing list