@startuml
autonumber
box "Container" #LightGreen
participant Application
participant GStreamer_client
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant GStreamer_server
end box
Application -> GStreamer_client: gst_element_send_event(sink, gst_event_new_segment(position))
GStreamer_client --> Application:
GStreamer_client -> rialtoClient: setSourcePosition(sourceId, position)
rialtoClient -> rialtoServer: setSourcePosition(sourceId, position)
rialtoServer -> rialtoServer: Save requested position internally
opt Source Setup Finished
rialtoServer -> rialtoServer: Erase EOS info
rialtoServer -> rialtoServer: Trigger NeedData for source
end
rialtoServer --> rialtoClient:
rialtoClient --> GStreamer_client:
rialtoClient --> rialtoServer: HaveData()
note left
HaveData received as a response to
NeedMediaData sent in SetSourcePosition
or in FinishSetupSource scenario
end note
rialtoServer -> GStreamer_server: gst_segment_new()
GStreamer_server --> rialtoServer: segment
rialtoServer -> GStreamer_server: gst_segment_init(segment, GST_FORMAT_TIME)
GStreamer_server --> rialtoServer:
rialtoServer -> GStreamer_server: gst_segment_do_seek(segment, current_playback_rate, position)
GStreamer_server --> rialtoServer:
rialtoServer -> GStreamer_server: gst_baseapp_src_newget_segment(source, segmentcaps(appsrc)
GStreamer_server --> rialtoServer: caps
rialtoServer -> rialtoServer: buffer = nextBufferInQueue(appsrc)
rialtoServer -> GStreamer_server: gst_segmentsample_free(new(buffer, caps, segment)
GStreamer_server --> rialtoServer: sample
rialtoServer -> rialtoServerGStreamer_server: gst_app_src_push_sample(appsrc, sample)
GStreamer_server Erase EOS info--> rialtoServer:
rialtoServer -> GStreamer_server: gst_sample_unref(sample)
GStreamer_server --> rialtoServer:
rialtoServer -> Trigger NeedDataGStreamer_server: for source
rialtoServer gst_caps_unref(caps)
GStreamer_server --> rialtoServer:
rialtoServer -> GStreamer_server: gst_segment_free(segment)
GStreamer_server --> rialtoClientrialtoServer:
rialtoClientrialtoServer --> GStreamer_clientrialtoClient:
@enduml |