<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jun 26, 2014 at 6:03 AM, Lee Matthews <span dir="ltr"><<a href="mailto:lma@spaceapplications.com" target="_blank">lma@spaceapplications.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I'm streaming video and I wish to be able to record that video on receiving a command. I'm currently looking at setting up two bins, one for the stream and the other for recording.<br>
<br>
The streaming bin has a tee in it which I need to connect to the recording bin dynamically. I also need to be able to disconnect the recording bin when I need to stop recording.<br>
<br>
Here are my bins :<br>
<br>
bin_stream = gst_parse_launch ("v4l2src name=v4l2src device=/dev/video0 ! video/x-raw,format=(string)YUY2,width=(int)320,height=(int)240, depth=(int)8, framerate=(fraction)20/1 ! videoconvert  ! vp8enc deadline=1 threads=3 token-partitions=2 cpu-used=1 end-usage=cbr target-bitrate=4096000 ! webmmux streamable=true ! tee name=tee tee. ! queue name=stream", &err);<br>

<br>
bin_videoRecord = gst_parse_launch ("queue name=record ! filesink name=filesink location=/data/data/com.mobinet.mobinetbootapp/files/test.webm", &err);<br>
<br>
A few questions :<br>
<br>
1) Do both of these bins need to go into the same pipeline ?<br></blockquote><div>Yes.<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<br>
2) In order to link the record bin to the stream bin, do I need to create ghostpads within the bins, ie one for tee (src) and another for queue (sink) ?<br></blockquote><div><br></div><div>That depends on how you go about it. You can nest bins inside each other, and its possible to just ask two bins to link, if the linking is straightforward (ie, ghost pads can be automatically made for you).<br>
<br></div><div>Thus, if you were to put bin_videoRecord inside bin_stream, you could probably just issue an element link command to link "tee" with the bin_videoRecord.<br><br>If you prefer to keep them separate then yes, you'll need to at least create a ghost pad for a newly created tee source, and then link bin_videoRecord to that.<br>
<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
3) To add the record bin to the stream bin, do I ?<br>
<br>
A) Request a pad from tee on the stream bin<br>
B) Set it to blocked<br>
C) Link the tee to the queue<br>
D) Set the record bin to playing<br>
E) Remove the pad-block on the stream bin tee<br></blockquote><div><br></div><div>There is no need to block newly created pads, as they set themselves to flushing mode until they've been connected. So, assuming you're going with non-nested bins, your set of operations is more like this: <br>
<br>A) Request a pad from tee on the stream bin<br></div><div>B) Create a ghost pad for the bin and attach it to the new tee pad.<br></div><div>C) Link the Record Bin to the ghost pad on the Stream Bin<br></div><div>D) Set the record bin to playing<br>
<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
4) To remove the link from record bin to the stream bin and correctly close the file, do I ?<br>
<br>
A) Set the stream bin's tee src pad that sends data to record bin, to blocked<br>
B) Send an EOS event to the record bin<br>
C) Wait for the EOS message on the record bin bus<br>
D) Remove the stream bin tee pad used to provide video to the record bin<br></blockquote><div><br>This I have less experience with, but I think you have this correct.<br><br><br></div></div></div></div>