<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.E-MailFormatvorlage18
        {mso-style-type:personal-reply;
        font-family:"Arial","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Arial","sans-serif"">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Arial","sans-serif"">I don’t think it was designed fort hat use-case. It was designed to put the files in one directory with incrementing file names. Why not just move the files to
 the required directory using a background thread at the end of each hour.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Von:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> gstreamer-devel [mailto:gstreamer-devel-bounces@lists.freedesktop.org]
<b>Im Auftrag von </b>Krutskikh Ivan<br>
<b>Gesendet:</b> Donnerstag, 31. März 2016 11:14<br>
<b>An:</b> Discussion of the development of and with GStreamer<br>
<b>Betreff:</b> Re: playbin2 undecoded video and about-to-finish signal<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi!<o:p></o:p></p>
</div>
<p class="MsoNormal">Thanks for pointing me to splitmuxsink and splitmuxsrc. That would spare me a good chunk of code.=)
<br>
<br>
The only thing I don't understand about splitmuxsrc is how to specify a specific file list or to modify it in playing state. By default I have a separate directory for each hour of recording. I can stream files from one hour with location=/archive/video/cam/day/hour/*.mp4,
 but what happens when I finish this hour? The awkward hack is to make a temp directory and add simlinks to videofiles from main archive to it in advance...<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">2016-03-30 23:53 GMT+03:00 Tim Müller <<a href="mailto:tim@centricular.com" target="_blank">tim@centricular.com</a>>:<o:p></o:p></p>
<p class="MsoNormal">On Sun, 2016-03-27 at 22:28 +0300, Krutskikh Ivan wrote:<br>
<br>
Hi,<br>
<br>
Your subject line mentions 'playbin2' - are you using the outdated and<br>
unmaintained GStreamer 0.10 ? If yes, you should switch to a current<br>
1.x version.<br>
<br>
> I'm developing a video recording/broadcasting server with gstreamer<br>
> and python.<br>
><br>
> Right now I'm facing 2 tasks:<br>
><br>
> - recording video from different sources (rtsp and http) and with<br>
> different codecs (mjpeg,mpeg4,h264,h265) in a series of mkv files<br>
><br>
> - broadcasting video from my archive to different clients using http<br>
> and rtsp.<br>
><br>
> Before discovering the playbin magic I used a number of template<br>
> pipelines to capture video from source, pass it to multifilesink and<br>
> ffmpeg to finish and store them in a convinient way, But if I could<br>
> somehow feed my uri to playbin and get an undecoded video/audio<br>
> stream from it, I would be able to put all my templates to single<br>
> gstreamer pipeline: playbin uri=rtsp... (magic here) ! mpegtsmux !<br>
> multifilesink...  And that would be very convenient.<br>
<br>
For what it's worth, there is also decodebin and uridecodebin, which<br>
are used inside of playbin but lower level.<br>
<br>
You can also make (uri)decodebin stop autoplugging decoders early so<br>
you can transmux without re-encoding, for example (auto* signals).<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
<br>
> The second task is more ambitious. I want to feed the recorded video<br>
> to my clients as if it was a live source. Right now I have a file<br>
> tree:<br>
><br>
> /basedir/cam_name/yearmonthday/hour/minutesecond-duration.mp4<br>
><br>
> Example:<br>
><br>
> archive-test:/archive/video/multi/160327/21 # ls<br>
> 0120-00125.mp4  0730-00120.mp4  1335-00120.mp4  1940-00125.mp4  2545-<br>
> 00120.mp4  3150-00120.mp4  3755-00120.mp4  4400-00125.mp4  5005-<br>
> 00125.mp4  5610-00125.mp4<br>
> 0325-00120.mp4  0930-00120.mp4  1535-00125.mp4  2145-00120.mp4  2745-<br>
> 00125.mp4  3350-00125.mp4  3955-00125.mp4  4605-00120.mp4  5210-<br>
> 00120.mp4  5815-00120.mp4<br>
> 0525-00125.mp4  1130-00125.mp4  1740-00120.mp4  2345-00120.mp4  2950-<br>
> 00120.mp4  3555-00120.mp4  4200-00120.mp4  4805-00120.mp4  5410-<br>
> 00120.mp4<br>
><br>
> At some point in the future I recieve a request to play video from<br>
> cam multi from  21:05 160327. I can then find my started file,<br>
> construct a pipeline with playbin and multisocketsink, fast forward<br>
> to the desired time and replace the uri of the file upon each about-<br>
> to-finish signal. The complex part is that I also need an undecoded<br>
> video stream since I plan to broadcast it to remote client without<br>
> re-encoding.<br>
><br>
> So my questions are:<br>
><br>
> 1) Is this design possible?<br>
> 2) Where can I find some examples of such pipelines, preferably in<br>
> python.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal">It's all possible, but will be a bit fiddly.<br>
<br>
You probably want something lower-level than playbin.<br>
<br>
In recent GStreamer versions we have splitmuxsink and splitmuxsrc which<br>
you might find helpful in this context.<br>
<br>
What protocols do you want to stream as? The easiest would be to just<br>
use gst-rtsp-server (see gst-rtsp-server/examples for some simple<br>
examples).<br>
<br>
Cheers<br>
<span class="hoenzb"><span style="color:#888888"> -Tim</span></span><span style="color:#888888"><br>
<br>
<br>
<span class="hoenzb">--</span><br>
<span class="hoenzb">Tim Müller, Centricular Ltd - <a href="http://www.centricular.com" target="_blank">
http://www.centricular.com</a></span><br>
<br>
<br>
<span class="hoenzb">_______________________________________________</span><br>
<span class="hoenzb">gstreamer-devel mailing list</span><br>
<span class="hoenzb"><a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a></span><br>
<span class="hoenzb"><a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a></span></span><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>