diff --git a/rusttechx-2024/Makefile b/rusttechx-2024/Makefile new file mode 100644 index 0000000..15a2dc4 --- /dev/null +++ b/rusttechx-2024/Makefile @@ -0,0 +1,11 @@ +all: + make slide slideshow + +slide: + pandoc -t beamer rusttechx.md --filter pandoc-plot -f markdown-implicit_figures -V colorlinks=true -V linkcolor=blue -V urlcolor=red -o rusttechx-2024.pdf + +slideshow: + pandoc -t beamer rusttechx.md --filter pandoc-plot -f markdown-implicit_figures -i -V colorlinks=true -V linkcolor=blue -V urlcolor=red -o rusttechx-2024-slideshow.pdf + +view: + zathura --mode=presentation rusttechx-2024.pdf & diff --git a/rusttechx-2024/playbin-hls.svg b/rusttechx-2024/playbin-hls.svg new file mode 100644 index 0000000..169491d --- /dev/null +++ b/rusttechx-2024/playbin-hls.svg @@ -0,0 +1,3189 @@ + + + + + + +pipeline + +<GstPlayBin3> +playbin +[=] -> [>] +uri="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +current-uri="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +audio-sink=(GstAutoAudioSink) audiosink +video-sink=(GstAutoVideoSink) videosink +sample=((GstSample*) 0x6087fe2162a0) + +cluster_playsink_0x6087fe3fb6d0 + +GstPlaySink +playsink +[>] +flags=video+audio+text+soft-volume+buffering+deinterlace+soft-colorbalance +sample=((GstSample*) 0x6087fe1ce840) +video-sink=(GstAutoVideoSink) videosink +audio-sink=(GstAutoAudioSink) audiosink +send-event-mode=first + + +cluster_playsink_0x6087fe3fb6d0_sink + + +cluster_tbin_0x751f484e8f30 + +GstBin +tbin +[>] + + +cluster_tbin_0x751f484e8f30_sink + + +cluster_tbin_0x751f484e8f30_src + + +cluster_subqueue_0x751f484eed30 + +GstQueue +subqueue +[>] +max-size-buffers=3 +max-size-bytes=0 +silent=TRUE + + +cluster_subqueue_0x751f484eed30_sink + + +cluster_subqueue_0x751f484eed30_src + + +cluster_suboverlay_0x751f484ecac0 + +GstSubtitleOverlay +suboverlay +[>] + + +cluster_suboverlay_0x751f484ecac0_sink + + +cluster_suboverlay_0x751f484ecac0_src + + +cluster_pre_colorspace_0x751ef0015680 + +GstVideoConvert +pre-colorspace +[>] +qos=TRUE + + +cluster_pre_colorspace_0x751ef0015680_sink + + +cluster_pre_colorspace_0x751ef0015680_src + + +cluster_post_colorspace_0x751ef0016210 + +GstVideoConvert +post-colorspace +[>] +qos=TRUE + + +cluster_post_colorspace_0x751ef0016210_sink + + +cluster_post_colorspace_0x751ef0016210_src + + +cluster_renderer_0x751ef0010830 + +GstTextOverlay +renderer +[>] +valignment=bottom +wait-text=FALSE +text-x=399 +text-y=484 +text-width=161 +text-height=29 + + +cluster_renderer_0x751ef0010830_sink + + +cluster_renderer_0x751ef0010830_src + + +cluster_vqueue_0x751f484e9250 + +GstQueue +vqueue +[>] +current-level-buffers=1 +current-level-bytes=835584 +current-level-time=16666667 +max-size-buffers=3 +max-size-bytes=0 +max-size-time=0 +silent=TRUE + + +cluster_vqueue_0x751f484e9250_sink + + +cluster_vqueue_0x751f484e9250_src + + +cluster_abin_0x751f484ce5c0 + +GstBin +abin +[>] + + +cluster_abin_0x751f484ce5c0_sink + + +cluster_aconv_0x751f484d1490 + +GstPlaySinkAudioConvert +aconv +[>] +use-converters=TRUE +volume-element=(GstVolume) volume + + +cluster_aconv_0x751f484d1490_sink + + +cluster_aconv_0x751f484d1490_src + + +cluster_resample_0x751f484e3050 + +GstAudioResample +resample +[>] + + +cluster_resample_0x751f484e3050_sink + + +cluster_resample_0x751f484e3050_src + + +cluster_conv_0x751f484df540 + +GstAudioConvert +conv +[>] + + +cluster_conv_0x751f484df540_sink + + +cluster_conv_0x751f484df540_src + + +cluster_identity_0x751f484d6fb0 + +GstIdentity +identity +[>] +signal-handoffs=FALSE + + +cluster_identity_0x751f484d6fb0_sink + + +cluster_identity_0x751f484d6fb0_src + + +cluster_aqueue_0x751f484ce870 + +GstQueue +aqueue +[>] +current-level-buffers=16 +current-level-bytes=131072 +current-level-time=341333328 +silent=TRUE + + +cluster_aqueue_0x751f484ce870_sink + + +cluster_aqueue_0x751f484ce870_src + + +cluster_audiosink_0x751f484be2e0 + +GstAutoAudioSink +audiosink +[>] +filter-caps=audio/x-raw + + +cluster_audiosink_0x751f484be2e0_sink + + +cluster_audiosink_actual_sink_pulse_0x751f484c9360 + +GstPulseSink +audiosink-actual-sink-pulse +[>] +enable-last-sample=FALSE +device="bluez_output.00_02_5B_00_FF_0C.1" +current-device="bluez_output.00_02_5B_00_FF_0C.1" +device-name="DX3 Pro+" + + +cluster_audiosink_actual_sink_pulse_0x751f484c9360_sink + + +cluster_vbin_0x751f48464560 + +GstBin +vbin +[>] + + +cluster_vbin_0x751f48464560_sink + + +cluster_vconv_0x751f48468ff0 + +GstPlaySinkVideoConvert +vconv +[>] +use-converters=TRUE + + +cluster_vconv_0x751f48468ff0_sink + + +cluster_vconv_0x751f48468ff0_src + + +cluster_scale_0x751f4849a5e0 + +GstVideoScale +scale +[>] +qos=TRUE + + +cluster_scale_0x751f4849a5e0_sink + + +cluster_scale_0x751f4849a5e0_src + + +cluster_conv_0x751f48497280 + +GstVideoConvert +conv +[>] +qos=TRUE + + +cluster_conv_0x751f48497280_sink + + +cluster_conv_0x751f48497280_src + + +cluster_identity_0x751f4846aa30 + +GstIdentity +identity +[>] +signal-handoffs=FALSE + + +cluster_identity_0x751f4846aa30_sink + + +cluster_identity_0x751f4846aa30_src + + +cluster_vqueue_0x751f484658d0 + +GstQueue +vqueue +[>] +current-level-buffers=3 +current-level-bytes=2506752 +current-level-time=50000000 +max-size-buffers=3 +max-size-bytes=0 +max-size-time=0 +silent=TRUE + + +cluster_vqueue_0x751f484658d0_sink + + +cluster_vqueue_0x751f484658d0_src + + +cluster_videosink_0x751f48449620 + +GstAutoVideoSink +videosink +[>] +filter-caps=video/x-raw + + +cluster_videosink_0x751f48449620_sink + + +cluster_videosink_actual_sink_xvimage_0x751f484502c0 + +GstXvImageSink +videosink-actual-sink-xvimage +[>] +max-lateness=5000000 +qos=TRUE +last-sample=((GstSample*) 0x6087fe2162a0) +processing-deadline=15000000 +device-name="glamor textured video" +double-buffer=FALSE +colorkey=526352 +window-width=960 +window-height=540 + + +cluster_videosink_actual_sink_xvimage_0x751f484502c0_sink + + +cluster_vdbin_0x751f484a5ad0 + +GstBin +vdbin +[>] + + +cluster_vdbin_0x751f484a5ad0_sink + + +cluster_vdbin_0x751f484a5ad0_src + + +cluster_deinterlace_0x751f484b9690 + +GstDeinterlace +deinterlace +[>] + + +cluster_deinterlace_0x751f484b9690_sink + + +cluster_deinterlace_0x751f484b9690_src + + +cluster_vdconv_0x751f4849e1e0 + +GstVideoConvert +vdconv +[>] +qos=TRUE + + +cluster_vdconv_0x751f4849e1e0_sink + + +cluster_vdconv_0x751f4849e1e0_src + + +cluster_audiotee_0x751f68097230 + +GstTee +audiotee +[>] +num-src-pads=1 + + +cluster_audiotee_0x751f68097230_sink + + +cluster_audiotee_0x751f68097230_src + + +cluster_streamsynchronizer0_0x6087fe3fbd80 + +GstStreamSynchronizer +streamsynchronizer0 +[>] + + +cluster_streamsynchronizer0_0x6087fe3fbd80_sink + + +cluster_streamsynchronizer0_0x6087fe3fbd80_src + + +cluster_uridecodebin3_0x6087fe3e1160 + +GstURIDecodeBin3 +uridecodebin3 +[>] +uri="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +current-uri="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +use-buffering=TRUE +caps=video/x-raw(ANY); audio/x-raw(ANY); text/x-raw(ANY); subpicture/x-dvd; subpictur… + + +cluster_uridecodebin3_0x6087fe3e1160_src + + +cluster_urisourcebin0_0x6087fe16c660 + +GstURISourceBin +urisourcebin0 +[>] +uri="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +source=(GstSoupHTTPSrc) souphttpsrc0 +statistics=application/x-urisourcebin-stats, minimum-byte-level=(uint)0, maximum-byte-level… +parse-streams=TRUE + + +cluster_urisourcebin0_0x6087fe16c660_src + + +cluster_hlsdemux2_0_0x751f90049360 + +GstHLSDemux2 +hlsdemux2-0 +[>] +current-bandwidth=67203771 +current-level-time-video=11333333333 +current-level-time-audio=17493333060 + + +cluster_hlsdemux2_0_0x751f90049360_sink + + +cluster_hlsdemux2_0_0x751f90049360_src + + +cluster_parsebin2_0x751f680b8ee0 + +GstParseBin +parsebin2 +[>] + + +cluster_parsebin2_0x751f680b8ee0_sink + + +cluster_parsebin2_0x751f680b8ee0_src + + +cluster_subparse0_0x751f6826de30 + +GstSubParse +subparse0 +[>] + + +cluster_subparse0_0x751f6826de30_sink + + +cluster_subparse0_0x751f6826de30_src + + +cluster_typefind_0x751f680b9490 + +GstTypeFindElement +typefind +[>] +caps=application/x-subtitle-vtt, parsed=(boolean)false + + +cluster_typefind_0x751f680b9490_sink + + +cluster_typefind_0x751f680b9490_src + + +cluster_parsebin1_0x751f68165830 + +GstParseBin +parsebin1 +[>] + + +cluster_parsebin1_0x751f68165830_sink + + +cluster_parsebin1_0x751f68165830_src + + +cluster_aacparse0_0x751f68296340 + +GstAacParse +aacparse0 +[>] + + +cluster_aacparse0_0x751f68296340_sink + + +cluster_aacparse0_0x751f68296340_src + + +cluster_id3demux0_0x751f68291b30 + +GstID3Demux +id3demux0 +[>] + + +cluster_id3demux0_0x751f68291b30_sink + + +cluster_id3demux0_0x751f68291b30_src + + +cluster_typefind_0x751f68172480 + +GstTypeFindElement +typefind +[>] +caps=application/x-id3 + + +cluster_typefind_0x751f68172480_sink + + +cluster_typefind_0x751f68172480_src + + +cluster_track_main_video_0_period0_0x751f68095650 + +GstBin +track-main-video-0-period0 +[>] + + +cluster_track_main_video_0_period0_0x751f68095650_sink + + +cluster_parsebin0_0x751f680104d0 + +GstParseBin +parsebin0 +[>] + + +cluster_parsebin0_0x751f680104d0_sink + + +cluster_parsebin0_0x751f680104d0_src + + +cluster_capsfilter0_0x751f680a1b30 + +GstCapsFilter +capsfilter0 +[>] +caps=video/x-h264, profile=(string){ constrained-baseline, baseline, main, high, prog… + + +cluster_capsfilter0_0x751f680a1b30_sink + + +cluster_capsfilter0_0x751f680a1b30_src + + +cluster_h264parse0_0x751f6809c7d0 + +GstH264Parse +h264parse0 +[>] + + +cluster_h264parse0_0x751f6809c7d0_sink + + +cluster_h264parse0_0x751f6809c7d0_src + + +cluster_tsdemux1_0x751f6806df80 + +GstTSDemux +tsdemux1 +[>] +parse-private-sections=TRUE +ignore-pcr=TRUE + + +cluster_tsdemux1_0x751f6806df80_sink + + +cluster_tsdemux1_0x751f6806df80_src + + +cluster_typefind_0x751f68010b60 + +GstTypeFindElement +typefind +[>] +caps=video/mpegts, systemstream=(boolean)true, packetsize=(int)188 + + +cluster_typefind_0x751f68010b60_sink + + +cluster_typefind_0x751f68010b60_src + + +cluster_track_text_English_period0_0x751f90058b30 + +GstBin +track-text-English-period0 +[>] + + +cluster_track_text_English_period0_0x751f90058b30_sink + + +cluster_track_audio_English_period0_0x751f90056e40 + +GstBin +track-audio-English-period0 +[>] + + +cluster_track_audio_English_period0_0x751f90056e40_sink + + +cluster_typefindelement0_0x6087fe410f10 + +GstTypeFindElement +typefindelement0 +[>] +caps=application/x-hls + + +cluster_typefindelement0_0x6087fe410f10_sink + + +cluster_typefindelement0_0x6087fe410f10_src + + +cluster_souphttpsrc0_0x6087fe40e680 + +GstSoupHTTPSrc +souphttpsrc0 +[>] +automatic-eos=FALSE +location="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_ex… +user-id=NULL +user-pw=NULL +proxy-id=NULL +proxy-pw=NULL +ssl-use-system-ca-file=FALSE + + +cluster_souphttpsrc0_0x6087fe40e680_src + + +cluster_decodebin3_0_0x6087fe3e3560 + +GstDecodebin3 +decodebin3-0 +[>] +caps=video/x-raw(ANY); audio/x-raw(ANY); text/x-raw(ANY); subpicture/x-dvd; subpictur… + + +cluster_decodebin3_0_0x6087fe3e3560_sink + + +cluster_decodebin3_0_0x6087fe3e3560_src + + +cluster_vah264dec0_0x751f480a88a0 + +GstVaH264Dec +vah264dec0 +[>] +device-path="/dev/dri/renderD128" + + +cluster_vah264dec0_0x751f480a88a0_sink + + +cluster_vah264dec0_0x751f480a88a0_src + + +cluster_avdec_aac0_0x751f540abdb0 + +avdec_aac +avdec_aac0 +[>] + + +cluster_avdec_aac0_0x751f540abdb0_sink + + +cluster_avdec_aac0_0x751f540abdb0_src + + +cluster_identity2_0x751f5c00b240 + +GstIdentity +identity2 +[>] +drop-allocation=TRUE + + +cluster_identity2_0x751f5c00b240_sink + + +cluster_identity2_0x751f5c00b240_src + + +cluster_identity1_0x751f5c008120 + +GstIdentity +identity1 +[>] +drop-allocation=TRUE + + +cluster_identity1_0x751f5c008120_sink + + +cluster_identity1_0x751f5c008120_src + + +cluster_identity0_0x751f5c004da0 + +GstIdentity +identity0 +[>] +drop-allocation=TRUE + + +cluster_identity0_0x751f5c004da0_sink + + +cluster_identity0_0x751f5c004da0_src + + +cluster_multiqueue0_0x6087fe3f2080 + +GstMultiQueue +multiqueue0 +[>] +max-size-buffers=0 +max-size-time=280999997 +sync-by-running-time=TRUE +use-interleave=TRUE +min-interleave-time=166666666 + + +cluster_multiqueue0_0x6087fe3f2080_sink + + +cluster_multiqueue0_0x6087fe3f2080_src + + + +legend + +Legend +Element-States: [~] void-pending, [0] null, [-] ready, [=] paused, [>] playing +Pad-Activation: [-] none, [>] push, [<] pull +Pad-Flags: [b]locked, [f]lushing, [b]locking, [E]OS; upper-case is set +Pad-Task: [T] has started task, [t] has paused task + + + +_proxypad3_0x751f68097ea0 + +proxypad3 +[>][bfb] + + + +audiotee_0x751f68097230_sink_0x751f68097560 + +sink +[>][bfb] + + + +_proxypad3_0x751f68097ea0->audiotee_0x751f68097230_sink_0x751f68097560 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +playsink_0x6087fe3fb6d0_audio_sink_0x751f68097bb0 + +audio_sink +[>][bfb] + + + +playsink_0x6087fe3fb6d0_audio_sink_0x751f68097bb0->_proxypad3_0x751f68097ea0 + + + + + +_proxypad4_0x751f68098690 + +proxypad4 +[>][bfb] + + + +streamsynchronizer0_0x6087fe3fbd80_sink_0_0x751f4849dc20 + +sink_0 +[>][bfb] + + + +_proxypad4_0x751f68098690->streamsynchronizer0_0x6087fe3fbd80_sink_0_0x751f4849dc20 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +playsink_0x6087fe3fb6d0_video_sink_0x751f68098310 + +video_sink +[>][bfb] + + + +playsink_0x6087fe3fb6d0_video_sink_0x751f68098310->_proxypad4_0x751f68098690 + + + + + +_proxypad5_0x751f68098da0 + +proxypad5 +[>][bfb] + + + +streamsynchronizer0_0x6087fe3fbd80_sink_2_0x751f484f2f00 + +sink_2 +[>][bfb] + + + +_proxypad5_0x751f68098da0->streamsynchronizer0_0x6087fe3fbd80_sink_2_0x751f484f2f00 + + +text/x-raw +              format: pango-markup + + + +playsink_0x6087fe3fb6d0_text_sink_0x751f680989a0 + +text_sink +[>][bfb] + + + +playsink_0x6087fe3fb6d0_text_sink_0x751f680989a0->_proxypad5_0x751f68098da0 + + + + + +_proxypad35_0x751f484f19c0 + +proxypad35 +[>][bfb] + + + +vqueue_0x751f484e9250_sink_0x751f484e9740 + +sink +[>][bfb] + + + +_proxypad35_0x751f484f19c0->vqueue_0x751f484e9250_sink_0x751f484e9740 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +tbin_0x751f484e8f30_sink_0x751f484f1750 + +sink +[>][bfb] + + + +tbin_0x751f484e8f30_sink_0x751f484f1750->_proxypad35_0x751f484f19c0 + + + + + +tbin_0x751f484e8f30_src_0x751f484f24b0 + +src +[>][bfb] + + + + +_proxypad36_0x751f484f20c0 + +proxypad36 +[>][bfb] + + + +subqueue_0x751f484eed30_sink_0x751f484ef080 + +sink +[>][bfb] + + + +_proxypad36_0x751f484f20c0->subqueue_0x751f484eed30_sink_0x751f484ef080 + + +text/x-raw +              format: pango-markup + + + +tbin_0x751f484e8f30_text_sink_0x751f484f1d40 + +text_sink +[>][bfb] + + + +tbin_0x751f484e8f30_text_sink_0x751f484f1d40->_proxypad36_0x751f484f20c0 + + + + + +_proxypad37_0x751f484f2860 + +proxypad37 +[>][bfb] + + + +_proxypad37_0x751f484f2860->tbin_0x751f484e8f30_src_0x751f484f24b0 + + + + + +vbin_0x751f48464560_sink_0x751f4849d4c0 + +sink +[>][bfb] + + + +tbin_0x751f484e8f30_src_0x751f484f24b0->vbin_0x751f48464560_sink_0x751f4849d4c0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +subqueue_0x751f484eed30_src_0x751f484ef510 + +src +[>][bfb][T] + + + + +suboverlay_0x751f484ecac0_subtitle_sink_0x751f484ee380 + +subtitle_sink +[>][bfb] + + + +subqueue_0x751f484eed30_src_0x751f484ef510->suboverlay_0x751f484ecac0_subtitle_sink_0x751f484ee380 + + +text/x-raw +              format: pango-markup + + + +_proxypad34_0x751f484ee780 + +proxypad34 +[>][bfb] + + + +suboverlay_0x751f484ecac0_subtitle_sink_0x751f484ee380->_proxypad34_0x751f484ee780 + + + + + +_proxypad33_0x751f484ede60 + +proxypad33 +[>][bfb] + + + +pre_colorspace_0x751ef0015680_sink_0x751ef0015a60 + +sink +[>][bfb] + + + +_proxypad33_0x751f484ede60->pre_colorspace_0x751ef0015680_sink_0x751ef0015a60 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +suboverlay_0x751f484ecac0_video_sink_0x751f484eda60 + +video_sink +[>][bfb] + + + +suboverlay_0x751f484ecac0_video_sink_0x751f484eda60->_proxypad33_0x751f484ede60 + + + + + +suboverlay_0x751f484ecac0_src_0x751f484ed140 + +src +[>][bfb] + + + + +renderer_0x751ef0010830_text_sink_0x751ef0012b80 + +text_sink +[>][bfb] + + + +_proxypad34_0x751f484ee780->renderer_0x751ef0010830_text_sink_0x751ef0012b80 + + +text/x-raw +              format: pango-markup + + + +_proxypad32_0x751f484ed540 + +proxypad32 +[>][bfb] + + + +_proxypad32_0x751f484ed540->suboverlay_0x751f484ecac0_src_0x751f484ed140 + + + + + +suboverlay_0x751f484ecac0_src_0x751f484ed140->_proxypad37_0x751f484f2860 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +pre_colorspace_0x751ef0015680_src_0x751ef00174a0 + +src +[>][bfb] + + + + +renderer_0x751ef0010830_video_sink_0x751ef00127d0 + +video_sink +[>][bfb] + + + +pre_colorspace_0x751ef0015680_src_0x751ef00174a0->renderer_0x751ef0010830_video_sink_0x751ef00127d0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +renderer_0x751ef0010830_src_0x751ef00130c0 + +src +[>][bfb] + + + + +post_colorspace_0x751ef0016210_sink_0x751ef00165f0 + +sink +[>][bfb] + + + +post_colorspace_0x751ef0016210_src_0x751ef0016970 + +src +[>][bfb] + + + + +post_colorspace_0x751ef0016210_src_0x751ef0016970->_proxypad32_0x751f484ed540 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +renderer_0x751ef0010830_src_0x751ef00130c0->post_colorspace_0x751ef0016210_sink_0x751ef00165f0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +vqueue_0x751f484e9250_src_0x751f484ea120 + +src +[>][bfb][T] + + + + +vqueue_0x751f484e9250_src_0x751f484ea120->suboverlay_0x751f484ecac0_video_sink_0x751f484eda60 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +_proxypad25_0x751f4849d840 + +proxypad25 +[>][bfb] + + + +vbin_0x751f48464560_sink_0x751f4849d4c0->_proxypad25_0x751f4849d840 + + + + + +_proxypad31_0x751f484e7d20 + +proxypad31 +[>][bfb] + + + +aqueue_0x751f484ce870_sink_0x751f484ced00 + +sink +[>][bfb] + + + +_proxypad31_0x751f484e7d20->aqueue_0x751f484ce870_sink_0x751f484ced00 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +abin_0x751f484ce5c0_sink_0x751f484e7ab0 + +sink +[>][bfb] + + + +abin_0x751f484ce5c0_sink_0x751f484e7ab0->_proxypad31_0x751f484e7d20 + + + + + +_proxypad29_0x751f484d6150 + +proxypad29 +[>][bfb] + + + +conv_0x751f484df540_sink_0x751f484dfad0 + +sink +[>][bfb] + + + +_proxypad29_0x751f484d6150->conv_0x751f484df540_sink_0x751f484dfad0 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +aconv_0x751f484d1490_sink_0x751f484d5db0 + +sink +[>][bfb] + + + +aconv_0x751f484d1490_sink_0x751f484d5db0->_proxypad29_0x751f484d6150 + + + + + +aconv_0x751f484d1490_src_0x751f484d6510 + +src +[>][bfb] + + + + +_proxypad30_0x751f484d6910 + +proxypad30 +[>][bfb] + + + +_proxypad30_0x751f484d6910->aconv_0x751f484d1490_src_0x751f484d6510 + + + + + +audiosink_0x751f484be2e0_sink_0x751f484bec70 + +sink +[>][bfb] + + + +aconv_0x751f484d1490_src_0x751f484d6510->audiosink_0x751f484be2e0_sink_0x751f484bec70 + + +audio/x-raw +                rate: 48000 +              format: F32LE +            channels: 2 +              layout: interleaved +        channel-mask: 0x0000000000000003 + + + +resample_0x751f484e3050_sink_0x751f484e35e0 + +sink +[>][bfb] + + + +resample_0x751f484e3050_src_0x751f484e3a00 + +src +[>][bfb] + + + + +resample_0x751f484e3050_src_0x751f484e3a00->_proxypad30_0x751f484d6910 + + +audio/x-raw +                rate: 48000 +              format: F32LE +            channels: 2 +              layout: interleaved +        channel-mask: 0x0000000000000003 + + + +conv_0x751f484df540_src_0x751f484dfed0 + +src +[>][bfb] + + + + +conv_0x751f484df540_src_0x751f484dfed0->resample_0x751f484e3050_sink_0x751f484e35e0 + + +audio/x-raw +                rate: 48000 +              format: F32LE +            channels: 2 +              layout: interleaved +        channel-mask: 0x0000000000000003 + + + +identity_0x751f484d6fb0_sink_0x751f484d73c0 + +sink +[>][bfb] + + + +identity_0x751f484d6fb0_src_0x751f484d77a0 + +src +[>][bfb] + + + + +_proxypad28_0x751f484beee0 + +proxypad28 +[>][bfb] + + + +audiosink_0x751f484be2e0_sink_0x751f484bec70->_proxypad28_0x751f484beee0 + + + + + +aqueue_0x751f484ce870_src_0x751f484cf090 + +src +[>][bfb][T] + + + + +aqueue_0x751f484ce870_src_0x751f484cf090->aconv_0x751f484d1490_sink_0x751f484d5db0 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +audiosink_actual_sink_pulse_0x751f484c9360_sink_0x751f484c9770 + +sink +[>][bfb] + + + +_proxypad28_0x751f484beee0->audiosink_actual_sink_pulse_0x751f484c9360_sink_0x751f484c9770 + + +audio/x-raw +                rate: 48000 +              format: F32LE +            channels: 2 +              layout: interleaved +        channel-mask: 0x0000000000000003 + + + +vqueue_0x751f484658d0_sink_0x751f48465d70 + +sink +[>][bfb] + + + +_proxypad25_0x751f4849d840->vqueue_0x751f484658d0_sink_0x751f48465d70 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +_proxypad23_0x751f48469a70 + +proxypad23 +[>][bfb] + + + +conv_0x751f48497280_sink_0x751f48497660 + +sink +[>][bfb] + + + +_proxypad23_0x751f48469a70->conv_0x751f48497280_sink_0x751f48497660 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +vconv_0x751f48468ff0_sink_0x751f48469670 + +sink +[>][bfb] + + + +vconv_0x751f48468ff0_sink_0x751f48469670->_proxypad23_0x751f48469a70 + + + + + +vconv_0x751f48468ff0_src_0x751f48469f90 + +src +[>][bfb] + + + + +_proxypad24_0x751f4846a390 + +proxypad24 +[>][bfb] + + + +_proxypad24_0x751f4846a390->vconv_0x751f48468ff0_src_0x751f48469f90 + + + + + +videosink_0x751f48449620_sink_0x751f48449ce0 + +sink +[>][bfb] + + + +vconv_0x751f48468ff0_src_0x751f48469f90->videosink_0x751f48449620_sink_0x751f48449ce0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +scale_0x751f4849a5e0_sink_0x751f4849a9e0 + +sink +[>][bfb] + + + +scale_0x751f4849a5e0_src_0x751f4849ae10 + +src +[>][bfb] + + + + +scale_0x751f4849a5e0_src_0x751f4849ae10->_proxypad24_0x751f4846a390 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +conv_0x751f48497280_src_0x751f48499a70 + +src +[>][bfb] + + + + +conv_0x751f48497280_src_0x751f48499a70->scale_0x751f4849a5e0_sink_0x751f4849a9e0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +identity_0x751f4846aa30_sink_0x751f4846ae40 + +sink +[>][bfb] + + + +identity_0x751f4846aa30_src_0x751f4846b220 + +src +[>][bfb] + + + + +_proxypad22_0x751f4844a0e0 + +proxypad22 +[>][bfb] + + + +videosink_0x751f48449620_sink_0x751f48449ce0->_proxypad22_0x751f4844a0e0 + + + + + +vqueue_0x751f484658d0_src_0x751f48466040 + +src +[>][bfb][T] + + + + +vqueue_0x751f484658d0_src_0x751f48466040->vconv_0x751f48468ff0_sink_0x751f48469670 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +videosink_actual_sink_xvimage_0x751f484502c0_sink_0x751f48450760 + +sink +[>][bfb] + + + +_proxypad22_0x751f4844a0e0->videosink_actual_sink_xvimage_0x751f484502c0_sink_0x751f48450760 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +_proxypad26_0x751f484bc700 + +proxypad26 +[>][bfb] + + + +vdconv_0x751f4849e1e0_sink_0x751f4849d080 + +sink +[>][bfb] + + + +_proxypad26_0x751f484bc700->vdconv_0x751f4849e1e0_sink_0x751f4849d080 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +vdbin_0x751f484a5ad0_sink_0x751f484bc490 + +sink +[>][bfb] + + + +vdbin_0x751f484a5ad0_sink_0x751f484bc490->_proxypad26_0x751f484bc700 + + + + + +vdbin_0x751f484a5ad0_src_0x751f484bcaf0 + +src +[>][bfb] + + + + +_proxypad27_0x751f484bcef0 + +proxypad27 +[>][bfb] + + + +_proxypad27_0x751f484bcef0->vdbin_0x751f484a5ad0_src_0x751f484bcaf0 + + + + + +vdbin_0x751f484a5ad0_src_0x751f484bcaf0->tbin_0x751f484e8f30_sink_0x751f484f1750 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +deinterlace_0x751f484b9690_sink_0x751f484bb220 + +sink +[>][bfb] + + + +deinterlace_0x751f484b9690_src_0x751f484bb4f0 + +src +[>][bfb] + + + + +deinterlace_0x751f484b9690_src_0x751f484bb4f0->_proxypad27_0x751f484bcef0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +vdconv_0x751f4849e1e0_src_0x751f4849e6d0 + +src +[>][bfb] + + + + +vdconv_0x751f4849e1e0_src_0x751f4849e6d0->deinterlace_0x751f484b9690_sink_0x751f484bb220 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +audiotee_0x751f68097230_src_0_0x751f484e8690 + +src_0 +[>][bfb] + + + + +streamsynchronizer0_0x6087fe3fbd80_sink_1_0x751f484e7f80 + +sink_1 +[>][bfb] + + + +audiotee_0x751f68097230_src_0_0x751f484e8690->streamsynchronizer0_0x6087fe3fbd80_sink_1_0x751f484e7f80 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +streamsynchronizer0_0x6087fe3fbd80_src_0_0x751f484a55e0 + +src_0 +[>][bfb] + + + + +streamsynchronizer0_0x6087fe3fbd80_src_0_0x751f484a55e0->vdbin_0x751f484a5ad0_sink_0x751f484bc490 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +streamsynchronizer0_0x6087fe3fbd80_src_1_0x751f484e81f0 + +src_1 +[>][bfb] + + + +streamsynchronizer0_0x6087fe3fbd80_src_1_0x751f484e81f0->abin_0x751f484ce5c0_sink_0x751f484e7ab0 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +streamsynchronizer0_0x6087fe3fbd80_src_2_0x751f484f3370 + +src_2 +[>][bfb] + + + +streamsynchronizer0_0x6087fe3fbd80_src_2_0x751f484f3370->tbin_0x751f484e8f30_text_sink_0x751f484f1d40 + + +text/x-raw +              format: pango-markup + + + +_proxypad17_0x751f540af780 + +proxypad17 +[>][bfb] + + + +uridecodebin3_0x6087fe3e1160_audio_0_0x751f540af510 + +audio_0 +[>][bfb] + + + +_proxypad17_0x751f540af780->uridecodebin3_0x6087fe3e1160_audio_0_0x751f540af510 + + + + + +uridecodebin3_0x6087fe3e1160_audio_0_0x751f540af510->playsink_0x6087fe3fb6d0_audio_sink_0x751f68097bb0 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +_proxypad19_0x751f50001ff0 + +proxypad19 +[>][bfb] + + + +uridecodebin3_0x6087fe3e1160_text_0_0x751f50001bf0 + +text_0 +[>][bfb] + + + +_proxypad19_0x751f50001ff0->uridecodebin3_0x6087fe3e1160_text_0_0x751f50001bf0 + + + + + +uridecodebin3_0x6087fe3e1160_text_0_0x751f50001bf0->playsink_0x6087fe3fb6d0_text_sink_0x751f680989a0 + + +text/x-raw +              format: pango-markup + + + +_proxypad21_0x751f484476f0 + +proxypad21 +[>][bfb] + + + +uridecodebin3_0x6087fe3e1160_video_0_0x751f48447480 + +video_0 +[>][bfb] + + + +_proxypad21_0x751f484476f0->uridecodebin3_0x6087fe3e1160_video_0_0x751f48447480 + + + + + +uridecodebin3_0x6087fe3e1160_video_0_0x751f48447480->playsink_0x6087fe3fb6d0_video_sink_0x751f68098310 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +_proxypad7_0x751f5c001710 + +proxypad7 +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_0_0x751f5c001310 + +src_0 +[>][bfb] + + + +_proxypad7_0x751f5c001710->urisourcebin0_0x6087fe16c660_src_0_0x751f5c001310 + + + + + +decodebin3_0_0x6087fe3e3560_sink_0x6087fe3e3fe0 + +sink +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_0_0x751f5c001310->decodebin3_0_0x6087fe3e3560_sink_0x6087fe3e3fe0 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +_proxypad8_0x751f5c006770 + +proxypad8 +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_1_0x751f5c0063a0 + +src_1 +[>][bfb] + + + +_proxypad8_0x751f5c006770->urisourcebin0_0x6087fe16c660_src_1_0x751f5c0063a0 + + + + + +decodebin3_0_0x6087fe3e3560_sink_0_0x751f5c006dc0 + +sink_0 +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_1_0x751f5c0063a0->decodebin3_0_0x6087fe3e3560_sink_0_0x751f5c006dc0 + + +text/x-raw +              format: pango-markup + + + +_proxypad10_0x751f5c009c70 + +proxypad10 +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_2_0x751f5c009870 + +src_2 +[>][bfb] + + + +_proxypad10_0x751f5c009c70->urisourcebin0_0x6087fe16c660_src_2_0x751f5c009870 + + + + + +decodebin3_0_0x6087fe3e3560_sink_1_0x751f5c009ff0 + +sink_1 +[>][bfb] + + + +urisourcebin0_0x6087fe16c660_src_2_0x751f5c009870->decodebin3_0_0x6087fe3e3560_sink_1_0x751f5c009ff0 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 960 +              height: 540 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 3.2 +          codec_data: 01640020ffe10025276400... + + + +hlsdemux2_0_0x751f90049360_sink_0x751f9004c000 + +sink +[>][bfbE] + + + +hlsdemux2_0_0x751f90049360_audio_00_0x751f5c000da0 + +audio_00 +[>][bfb] + + + + +hlsdemux2_0_0x751f90049360_audio_00_0x751f5c000da0->_proxypad7_0x751f5c001710 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +hlsdemux2_0_0x751f90049360_subtitle_00_0x751f5c005f70 + +subtitle_00 +[>][bfb] + + + +hlsdemux2_0_0x751f90049360_subtitle_00_0x751f5c005f70->_proxypad8_0x751f5c006770 + + +text/x-raw +              format: pango-markup + + + +hlsdemux2_0_0x751f90049360_video_00_0x751f5c009320 + +video_00 +[>][bfb] + + + +hlsdemux2_0_0x751f90049360_video_00_0x751f5c009320->_proxypad10_0x751f5c009c70 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 960 +              height: 540 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 3.2 +          codec_data: 01640020ffe10025276400... + + + +_proxypad13_0x751f6823c320 + +proxypad13 +[>][bfb] + + + +typefind_0x751f680b9490_sink_0x751f680b9800 + +sink +[>][bfb] + + + +_proxypad13_0x751f6823c320->typefind_0x751f680b9490_sink_0x751f680b9800 + + +application/x-subtitle-vtt +              parsed: false + + + +parsebin2_0x751f680b8ee0_sink_0x751f6823c090 + +sink +[>][bfb] + + + +parsebin2_0x751f680b8ee0_sink_0x751f6823c090->_proxypad13_0x751f6823c320 + + + + + +parsebin2_0x751f680b8ee0_src_0_0x751f6827b9c0 + +src_0 +[>][bfb] + + + + +_proxypad14_0x751f6827bc70 + +proxypad14 +[>][bfb] + + + +_proxypad14_0x751f6827bc70->parsebin2_0x751f680b8ee0_src_0_0x751f6827b9c0 + + + + + +track_text_English_period0_0x751f90058b30_sink_0x751f90058f70 + +sink +[>][bfb] + + + +parsebin2_0x751f680b8ee0_src_0_0x751f6827b9c0->track_text_English_period0_0x751f90058b30_sink_0x751f90058f70 + + +text/x-raw +              format: pango-markup + + + +subparse0_0x751f6826de30_sink_0x751f68286e70 + +sink +[>][bfb] + + + +subparse0_0x751f6826de30_src_0x751f68287160 + +src +[>][bfb] + + + + +subparse0_0x751f6826de30_src_0x751f68287160->_proxypad14_0x751f6827bc70 + + +text/x-raw +              format: pango-markup + + + +typefind_0x751f680b9490_src_0x751f680b9b90 + +src +[>][bfb] + + + + +typefind_0x751f680b9490_src_0x751f680b9b90->subparse0_0x751f6826de30_sink_0x751f68286e70 + + +application/x-subtitle-vtt +              parsed: false + + + +_proxypad12_0x751f6815c9e0 + +proxypad12 +[>][bfb] + + + +typefind_0x751f68172480_sink_0x751f68151c60 + +sink +[>][bfb] + + + +_proxypad12_0x751f6815c9e0->typefind_0x751f68172480_sink_0x751f68151c60 + + +application/x-id3 + + + +parsebin1_0x751f68165830_sink_0x751f6815c720 + +sink +[>][bfb] + + + +parsebin1_0x751f68165830_sink_0x751f6815c720->_proxypad12_0x751f6815c9e0 + + + + + +parsebin1_0x751f68165830_src_0_0x751f6828c2b0 + +src_0 +[>][bfb] + + + + +_proxypad15_0x751f6828c5c0 + +proxypad15 +[>][bfb] + + + +_proxypad15_0x751f6828c5c0->parsebin1_0x751f68165830_src_0_0x751f6828c2b0 + + + + + +track_audio_English_period0_0x751f90056e40_sink_0x751f90057000 + +sink +[>][bfb] + + + +parsebin1_0x751f68165830_src_0_0x751f6828c2b0->track_audio_English_period0_0x751f90056e40_sink_0x751f90057000 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +aacparse0_0x751f68296340_sink_0x751f68296620 + +sink +[>][bfb] + + + +aacparse0_0x751f68296340_src_0x751f68296a40 + +src +[>][bfb] + + + + +aacparse0_0x751f68296340_src_0x751f68296a40->_proxypad15_0x751f6828c5c0 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +id3demux0_0x751f68291b30_sink_0x751f68291d00 + +sink +[>][bfb] + + + +id3demux0_0x751f68291b30_src_0x751f682920e0 + +src +[>][bfb] + + + + +id3demux0_0x751f68291b30_src_0x751f682920e0->aacparse0_0x751f68296340_sink_0x751f68296620 + + +audio/mpeg +              framed: false +         mpegversion: 4 +       stream-format: adts +               level: 2 +        base-profile: lc +             profile: lc +            channels: 2 +                rate: 48000 + + + +typefind_0x751f68172480_src_0x751f68152050 + +src +[>][bfb] + + + + +typefind_0x751f68172480_src_0x751f68152050->id3demux0_0x751f68291b30_sink_0x751f68291d00 + + +application/x-id3 + + + +track_main_video_0_period0_0x751f68095650_sink_0x751f68095af0 + +sink +[>][bfb] + + + +_proxypad1_0x751f68014250 + +proxypad1 +[>][bfb] + + + +typefind_0x751f68010b60_sink_0x751f68010f70 + +sink +[>][bfb] + + + +_proxypad1_0x751f68014250->typefind_0x751f68010b60_sink_0x751f68010f70 + + +video/mpegts +        systemstream: true +          packetsize: 188 + + + +parsebin0_0x751f680104d0_sink_0x751f68013e80 + +sink +[>][bfb] + + + +parsebin0_0x751f680104d0_sink_0x751f68013e80->_proxypad1_0x751f68014250 + + + + + +parsebin0_0x751f680104d0_src_0_0x751f68099790 + +src_0 +[>][bfb] + + + + +_proxypad6_0x751f68099a40 + +proxypad6 +[>][bfb] + + + +_proxypad6_0x751f68099a40->parsebin0_0x751f680104d0_src_0_0x751f68099790 + + + + + +parsebin0_0x751f680104d0_src_0_0x751f68099790->track_main_video_0_period0_0x751f68095650_sink_0x751f68095af0 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 1920 +              height: 1080 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 4.2 +          codec_data: 0164002affe10027276400... + + + +capsfilter0_0x751f680a1b30_sink_0x751f680a1e30 + +sink +[>][bfb] + + + +capsfilter0_0x751f680a1b30_src_0x751f680a2250 + +src +[>][bfb] + + + + +capsfilter0_0x751f680a1b30_src_0x751f680a2250->_proxypad6_0x751f68099a40 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 1920 +              height: 1080 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 4.2 +          codec_data: 0164002affe10027276400... + + + +h264parse0_0x751f6809c7d0_sink_0x751f6809d630 + +sink +[>][bfb] + + + +h264parse0_0x751f6809c7d0_src_0x751f6809da10 + +src +[>][bfb] + + + + +h264parse0_0x751f6809c7d0_src_0x751f6809da10->capsfilter0_0x751f680a1b30_sink_0x751f680a1e30 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 1920 +              height: 1080 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 4.2 +          codec_data: 0164002affe10027276400... + + + +tsdemux1_0x751f6806df80_sink_0x751f6806e370 + +sink +[>][bfb] + + + +tsdemux1_0x751f6806df80_video_0_0101_0x751f68093910 + +video_0_0101 +[>][bfb] + + + + +tsdemux1_0x751f6806df80_video_0_0101_0x751f68093910->h264parse0_0x751f6809c7d0_sink_0x751f6809d630 + + +video/x-h264 +       stream-format: byte-stream + + + +typefind_0x751f68010b60_src_0x751f68011300 + +src +[>][bfb] + + + + +typefind_0x751f68010b60_src_0x751f68011300->tsdemux1_0x751f6806df80_sink_0x751f6806e370 + + +video/mpegts +        systemstream: true +          packetsize: 188 + + + +typefindelement0_0x6087fe410f10_sink_0x6087fe411290 + +sink +[>][bfbE] + + + +typefindelement0_0x6087fe410f10_src_0x6087fe411680 + +src +[>][bfbE] + + + + +typefindelement0_0x6087fe410f10_src_0x6087fe411680->hlsdemux2_0_0x751f90049360_sink_0x751f9004c000 + + +application/x-hls + + + +souphttpsrc0_0x6087fe40e680_src_0x6087fe40eb30 + +src +[>][bfbE][t] + + + +souphttpsrc0_0x6087fe40e680_src_0x6087fe40eb30->typefindelement0_0x6087fe410f10_sink_0x6087fe411290 + + +ANY + + + +_proxypad0_0x6087fe3e4310 + +proxypad0 +[>][bfb] + + + +decodebin3_0_0x6087fe3e3560_sink_0x6087fe3e3fe0->_proxypad0_0x6087fe3e4310 + + + + + +decodebin3_0_0x6087fe3e3560_audio_0_0x751f54000f20 + +audio_0 +[>][bfb] + + + + +_proxypad9_0x751f5c007140 + +proxypad9 +[>][bfb] + + + +decodebin3_0_0x6087fe3e3560_sink_0_0x751f5c006dc0->_proxypad9_0x751f5c007140 + + + + + +_proxypad11_0x751f5c00a370 + +proxypad11 +[>][bfb] + + + +decodebin3_0_0x6087fe3e3560_sink_1_0x751f5c009ff0->_proxypad11_0x751f5c00a370 + + + + + +identity0_0x751f5c004da0_sink_0x751f5c0051b0 + +sink +[>][bfb] + + + +_proxypad0_0x6087fe3e4310->identity0_0x751f5c004da0_sink_0x751f5c0051b0 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +identity1_0x751f5c008120_sink_0x751f5c0084e0 + +sink +[>][bfb] + + + +_proxypad9_0x751f5c007140->identity1_0x751f5c008120_sink_0x751f5c0084e0 + + +text/x-raw +              format: pango-markup + + + +identity2_0x751f5c00b240_sink_0x751f5c00b600 + +sink +[>][bfb] + + + +_proxypad11_0x751f5c00a370->identity2_0x751f5c00b240_sink_0x751f5c00b600 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 960 +              height: 540 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 3.2 +          codec_data: 01640020ffe10025276400... + + + +_proxypad16_0x751f54001320 + +proxypad16 +[>][bfb] + + + +_proxypad16_0x751f54001320->decodebin3_0_0x6087fe3e3560_audio_0_0x751f54000f20 + + + + + +decodebin3_0_0x6087fe3e3560_audio_0_0x751f54000f20->_proxypad17_0x751f540af780 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +_proxypad18_0x751f500011a0 + +proxypad18 +[>][bfb] + + + +decodebin3_0_0x6087fe3e3560_text_0_0x751f50000da0 + +text_0 +[>][bfb] + + + +_proxypad18_0x751f500011a0->decodebin3_0_0x6087fe3e3560_text_0_0x751f50000da0 + + + + + +decodebin3_0_0x6087fe3e3560_text_0_0x751f50000da0->_proxypad19_0x751f50001ff0 + + +text/x-raw +              format: pango-markup + + + +_proxypad20_0x751f480011a0 + +proxypad20 +[>][bfb] + + + +decodebin3_0_0x6087fe3e3560_video_0_0x751f48000da0 + +video_0 +[>][bfb] + + + +_proxypad20_0x751f480011a0->decodebin3_0_0x6087fe3e3560_video_0_0x751f48000da0 + + + + + +decodebin3_0_0x6087fe3e3560_video_0_0x751f48000da0->_proxypad21_0x751f484476f0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +vah264dec0_0x751f480a88a0_sink_0x751f4830a210 + +sink +[>][bfb] + + + +vah264dec0_0x751f480a88a0_src_0x751f480b7070 + +src +[>][bfb] + + + + +vah264dec0_0x751f480a88a0_src_0x751f480b7070->_proxypad20_0x751f480011a0 + + +video/x-raw +              format: NV12 +               width: 960 +              height: 540 +      interlace-mode: progressive +      multiview-mode: mono +     multiview-flags: 0:ffffffff:/right-view... +  pixel-aspect-ratio: 1/1 +           framerate: 60/1 + + + +avdec_aac0_0x751f540abdb0_sink_0x751f540ac330 + +sink +[>][bfb] + + + +avdec_aac0_0x751f540abdb0_src_0x751f540ac580 + +src +[>][bfb] + + + + +avdec_aac0_0x751f540abdb0_src_0x751f540ac580->_proxypad16_0x751f54001320 + + +audio/x-raw +              format: F32LE +              layout: non-interleaved +                rate: 48000 +            channels: 2 +        channel-mask: 0x0000000000000003 + + + +identity2_0x751f5c00b240_src_0x751f5c00ba60 + +src +[>][bfb] + + + + +multiqueue0_0x6087fe3f2080_sink_2_0x751f5c00f860 + +sink_2 +group-id=4 +current-level-buffers=17 +current-level-bytes=83888 +current-level-time=283333333 +[>][bfb] + + + +identity2_0x751f5c00b240_src_0x751f5c00ba60->multiqueue0_0x6087fe3f2080_sink_2_0x751f5c00f860 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 960 +              height: 540 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 3.2 +          codec_data: 01640020ffe10025276400... + + + +identity1_0x751f5c008120_src_0x751f5c008940 + +src +[>][bfb] + + + + +multiqueue0_0x6087fe3f2080_sink_1_0x751f5c00e590 + +sink_1 +group-id=16 +[>][bfb] + + + +identity1_0x751f5c008120_src_0x751f5c008940->multiqueue0_0x6087fe3f2080_sink_1_0x751f5c00e590 + + +text/x-raw +              format: pango-markup + + + +identity0_0x751f5c004da0_src_0x751f5c005590 + +src +[>][bfb] + + + + +multiqueue0_0x6087fe3f2080_sink_0_0x751f5c00d290 + +sink_0 +group-id=2 +[>][bfb] + + + +identity0_0x751f5c004da0_src_0x751f5c005590->multiqueue0_0x6087fe3f2080_sink_0_0x751f5c00d290 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +multiqueue0_0x6087fe3f2080_src_0_0x751f5c00d7c0 + +src_0 +group-id=2 +[>][bfb][T] + + + + +multiqueue0_0x6087fe3f2080_src_0_0x751f5c00d7c0->avdec_aac0_0x751f540abdb0_sink_0x751f540ac330 + + +audio/mpeg +              framed: true +         mpegversion: 4 +               level: 2 +        base-profile: lc +             profile: lc +                rate: 48000 +            channels: 2 +       stream-format: adts + + + +multiqueue0_0x6087fe3f2080_src_1_0x751f5c00ea80 + +src_1 +group-id=16 +[>][bfb][T] + + + +multiqueue0_0x6087fe3f2080_src_1_0x751f5c00ea80->_proxypad18_0x751f500011a0 + + +text/x-raw +              format: pango-markup + + + +multiqueue0_0x6087fe3f2080_src_2_0x751f5c00fd50 + +src_2 +group-id=4 +current-level-buffers=17 +current-level-bytes=83888 +current-level-time=283333333 +[>][bfb][T] + + + +multiqueue0_0x6087fe3f2080_src_2_0x751f5c00fd50->vah264dec0_0x751f480a88a0_sink_0x751f4830a210 + + +video/x-h264 +       stream-format: avc +  pixel-aspect-ratio: 1/1 +               width: 960 +              height: 540 +           framerate: 60/1 +  coded-picture-structure: frame +       chroma-format: 4:2:0 +      bit-depth-luma: 8 +    bit-depth-chroma: 8 +              parsed: true +           alignment: au +             profile: high +               level: 3.2 +          codec_data: 01640020ffe10025276400... + + + diff --git a/rusttechx-2024/roundedcorners.jpg b/rusttechx-2024/roundedcorners.jpg new file mode 100644 index 0000000..6fc080f Binary files /dev/null and b/rusttechx-2024/roundedcorners.jpg differ diff --git a/rusttechx-2024/rusttechx-2024-slideshow.pdf b/rusttechx-2024/rusttechx-2024-slideshow.pdf new file mode 100644 index 0000000..a47e72d Binary files /dev/null and b/rusttechx-2024/rusttechx-2024-slideshow.pdf differ diff --git a/rusttechx-2024/rusttechx-2024.pdf b/rusttechx-2024/rusttechx-2024.pdf new file mode 100644 index 0000000..72e9397 Binary files /dev/null and b/rusttechx-2024/rusttechx-2024.pdf differ diff --git a/rusttechx-2024/rusttechx.md b/rusttechx-2024/rusttechx.md new file mode 100644 index 0000000..67073d5 --- /dev/null +++ b/rusttechx-2024/rusttechx.md @@ -0,0 +1,249 @@ +--- +title: +- Multimedia using Rust and GStreamer +author: +- Sanchayan Maity +theme: +- default +classoption: +- aspectratio=169 +--- + +# Who? + +- Consultant Software Engineer @ [asymptotic](https://asymptotic.io/) + - Open source consulting firm based out of Toronto, Bangalore & Hyderabad + - Work on low level systems software centred around multimedia + - GStreamer, PipeWire, PulseAudio +- Embedded Systems background +- C, Rust and Haskell +- Organizing Rust and Haskell meetup Bangalore since 2018 + +# Agenda + +- Introduction to GStreamer +- Why Rust +- Rust and GStreamer + +# GStreamer + +- Multiplatform Pipeline based multimedia framework +- Bindings for various languages +- Supported on Linux, macOS, Android and Windows +- Allows building complex media processing workflows +- Some applications + * GstLAL (gravitational wave data analysis) + * PiTiVi (Video Editor) + * amaroK, Banshee, Clementine (audio players) + * Empathy (VOIP and video conferencing) + * Rygel (DLNA streaming server and renderer) + * Showtime, Clapper, Totem (Media players for desktop) + +# Simple pipeline + + ```bash + gst-launch-1.0 videotestsrc ! autovideosink + gst-launch-1.0 audiotestsrc ! autoaudiosink + ``` + +# Media pipeline[^1] + +![*_Simple Player_*](simple-player.png){width=80%} + +[^1]: [Dynamic Pipelines](https://gstreamer.freedesktop.org/documentation/tutorials/basic/dynamic-pipelines.html?gi-language=c) + +# Playback pipeline + +```bash +gst-play-1.0 https://devstreaming-cdn.apple.com/videos/streaming/examples/\n +img_bipbop_adv_example_ts/master.m3u8 +``` + +# Playback pipeline graph + +![*_playbin HLS_*](playbin-hls.svg) + +# Custom elements + +![*_Rounded Corners_*](roundedcorners.jpg){width=60%} + +```bash +gst-launch-1.0 filesrc location=bunny.mp4 ! decodebin ! videoconvert ! +roundedcorners border-radius-px=100 ! videoconvert ! gtksink +``` + +# Why Rust? + +- Codec implementations in pure Rust (Rust Audio, Xiph AV1, Symphonia) +- Things we care about + * **Low cognitive overhead** + * Immutability + * Expressive type system + * Memory safety and concurrency + * Foreign Function Interface + +# Why Rust? + +- Bindings/abstractions over GLib/GObject[^2] +- Provides a root for the object hierarchy tree filed in by the GStreamer library +- Gives basic reference counting, parenting functionality and locking. +- GObject + - GstObject + - GstAllocator + - GstBufferPool + - GstBus + - GstClock + - GstDevice + - GstDeviceMonitor + - GstDeviceProvider + - GstElement + - GstPad + - ... +- GStreamer bindings + +[^2]: [GstObject](https://gstreamer.freedesktop.org/documentation/gstreamer/gstobject.html?gi-language=c) + +# Why immutability and types matter? + +```c + let caps: gst::Caps = gst::Caps::builder("video/x-raw") + .field("width", crop_w) + .field("height", crop_h) + .field("pixel-aspect-ratio", gst::Fraction::new(1, 1)) + .build(); + let s = caps.remove_structure(0); +``` + +# Why immutability and types matter? + +```bash +warning: unused variable: `s` + --> video-bin/src/imp.rs:152:13 + | +152 | let s = caps.remove_structure(0); + | ^ help: if this is intentional, prefix it with an + underscore: `_s` + | + = note: `#[warn(unused_variables)]` on by default +error[E0596]: cannot borrow data in dereference of `gstreamer::Caps` + as mutable + --> video-bin/src/imp.rs:152:17 + | +152 | let s = caps.remove_structure(0); + | ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable + | + = help: trait `DerefMut` is required to modify through a dereference, + but it is not implemented for `gstreamer::Caps` +``` + +# Why immutability and types matter? + +```c + let mut caps: gst::Caps = gst::Caps::builder("video/x-raw") + .field("width", crop_w) + .field("height", crop_h) + .field("pixel-aspect-ratio", gst::Fraction::new(1, 1)) + .build(); + let _s = caps.remove_structure(0); +``` + + +# Why immutability and types matter? + +```bash +warning: variable does not need to be mutable + --> video-bin/src/imp.rs:147:13 + | +147 | let mut caps: gst::Caps = gst::Caps::builder("video/x-raw") + | ----^^^^ + | | + | help: remove this `mut` + | + = note: `#[warn(unused_mut)]` on by default +error[E0596]: cannot borrow data in dereference of `gstreamer::Caps` + as mutable + --> video-bin/src/imp.rs:152:18 + | +152 | let _s = caps.remove_structure(0); + | ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable + = help: trait `DerefMut` is required to modify through a dereference, + but it is not implemented for `gstreamer::Caps` +``` + +# Why immutability and types matter? + +```c + let caps: gst::Caps = gst::Caps::builder("video/x-raw") + .field("width", crop_w) + .field("height", crop_h) + .field("pixel-aspect-ratio", gst::Fraction::new(1, 1)) + .build(); + let caps = caps.get_mut().unwrap(); + let _s = caps.remove_structure(0); +``` + +# Why immutability and types matter? + +```bash +error[E0596]: cannot borrow `caps` as mutable, as it is not declared + as mutable + --> video-bin/src/imp.rs:152:20 + | +147 | let caps: gst::Caps = gst::Caps::builder("video/x-raw") + | ---- help: consider changing this to be mutable: + `mut caps` +... +152 | let caps = caps.get_mut().unwrap(); + | ^^^^^^^^^^^^^^ cannot borrow as mutable + +For more information about this error, try `rustc --explain E0596`. +``` + +# Why immutability and types matter? + +```c + let mut caps: gst::Caps = gst::Caps::builder("video/x-raw") + .field("width", crop_w) + .field("height", crop_h) + .field("pixel-aspect-ratio", gst::Fraction::new(1, 1)) + .build(); + if let Some(caps) = caps.get_mut() { + let _s = caps.remove_structure(0); + } +``` + +# GStreamer & Rust + +- Some stats[^3] + - gstreamer-rs: ~2700 commits, gst-plugins-rs: ~2600 commits + - gstreamer-rs: ~85 contributors, gst-plugins-rs: ~110 contributors + - gst-plugins-rs: ~ +180k SLOC / -37k SLOC + - gst-plugins-rs: Overall 47 plugins, 149 elements +- In relation to the GStreamer monorepo + - 1.22 cycle: ~33% commits / MRs in Rust modules + - 1.24 cycle: ~25% commits / MRs in Rust modules + +[^3]: [GStreamer & Rust: What has happened over the last 5 years](https://gstconf.ubicast.tv/videos/gstreamer-rust-what-has-happened-over-the-last-5-years_f8qxhpuzi9/) + +# Resources + +- [GObject subclassing in Rust ](https://www.youtube.com/watch?v=TSf3rVyv7c8) +- [GStreamer bindings for Rust](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs) +- [Rust GStreamer Plugins](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs) +- [Using GStreamer](https://www.youtube.com/watch?v=ZphadMGufY8) +- [How to get started with GStreamer](https://www.youtube.com/watch?v=OkOsm9FyzdM&t=2s) +- [GStreamer for your backend services](https://asymptotic.io/blog/gstreamer-for-your-backend-services/) + +# Questions? + +- Rust Bangalore + * Meetup: https://hasgeek.com/rustbangalore + * Telegram: t.me/RustIndia +- Reach out on + * email: + + - me@sanchayanmaity.net + - sanchayan@asymptotic.io + - hello@asymptotic.io + * Mastodon: [sanchayanmaity.com](https://sanchayanmaity.com/@sanchayan) + * Blog: [sanchayanmaity.net](https://sanchayanmaity.net/) diff --git a/rusttechx-2024/simple-player.png b/rusttechx-2024/simple-player.png new file mode 100644 index 0000000..b3b3ca1 Binary files /dev/null and b/rusttechx-2024/simple-player.png differ