<br><br><div class="gmail_quote">On Sun, Jan 2, 2011 at 1:54 PM, Andoni Morales <span dir="ltr"><<a href="mailto:ylatuya@gmail.com">ylatuya@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
2010/12/31 David Zhao <<a href="mailto:david@davidzhao.com">david@davidzhao.com</a>>:<br>
<div class="im">> Thanks David! That's exactly what I was looking for.<br>
><br>
> On Thu, Dec 30, 2010 at 11:23 PM, David Schleef <<a href="mailto:ds@entropywave.com">ds@entropywave.com</a>> wrote:<br>
>><br>
>> On Thu, Dec 30, 2010 at 08:35:21PM -0800, David Zhao wrote:<br>
>> > Hello,<br>
>> ><br>
>> > I'm trying to build a GStreamer plugin that would produce segments of<br>
>> > MPEGTS<br>
>> > files, each with a fixed duration. This is to create TS segments for the<br>
>> > Apple HTTP live streaming protocol. I'm fairly new to developing for<br>
>> > GStreamer and have a basic understanding of how it works.<br>
>> ><br>
>> > The approach I had in mind is to create a plugin that includes both<br>
>> > mpegtsmux and filesink. Within that plugin, it could produce individual<br>
>> > ts<br>
>> > files when certain duration is accumulated.<br>
>> ><br>
>> > Is this feasible? Is there another way to do this without having to<br>
>> > replicate code that's already in mpegtsmux and filesink?<br>
>><br>
>> gst-launch ... ! mpegtsmux ! multifilesink next-file=key-frame \<br>
>> location=%05d.ts<br>
<br>
</div>That's probably the quickest way to produce segments for testing<br>
purpose but these fragments wouldn't follow the spec's<br>
recommendations[1].<br>
<br>
" Transport Stream files MUST contain a single MPEG-2 Program. There<br>
SHOULD be a Program Association Table and a Program Map Table at the<br>
start of each file. A file that contains video SHOULD have at least<br>
one key frame and enough information to completely initialize a video<br>
decoder."<br>
<br>
A client can join the stream at any moment (downloading any of the<br>
available segments), so each segment must be independently decodable,<br>
which means you need to start each fragment with a PAT table, followed<br>
with a PMT table and starting with a keyframe.<br></blockquote><div><br></div><div>Thanks for the clarification here. Looks like the "correct" way to implement this is still to create a special purposed mpegts muxer that will write the PAT/PMT tables at the beginning of each TS segment. </div>
<div><br></div><div>I noticed that the protocol says "SHOULD" instead of "MUST", perhaps the current implementation of iOS treat those tables as optional?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Andoni<br>
<br>
[1]<a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-05#page-4" target="_blank">http://tools.ietf.org/html/draft-pantos-http-live-streaming-05#page-4</a><br>
<div class="im">>><br>
>><br>
>><br>
>> David<br>
>><br>
>><br>
>><br>
>> ------------------------------------------------------------------------------<br>
>> Learn how Oracle Real Application Clusters (RAC) One Node allows customers<br>
>> to consolidate database storage, standardize their database environment,<br>
>> and,<br>
>> should the need arise, upgrade to a full multi-node Oracle RAC database<br>
>> without downtime or disruption<br>
>> <a href="http://p.sf.net/sfu/oracle-sfdevnl" target="_blank">http://p.sf.net/sfu/oracle-sfdevnl</a><br>
>> _______________________________________________<br>
>> gstreamer-devel mailing list<br>
>> <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
>> <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
><br>
><br>
> ------------------------------------------------------------------------------<br>
> Learn how Oracle Real Application Clusters (RAC) One Node allows customers<br>
> to consolidate database storage, standardize their database environment,<br>
> and,<br>
> should the need arise, upgrade to a full multi-node Oracle RAC database<br>
> without downtime or disruption<br>
> <a href="http://p.sf.net/sfu/oracle-sfdevnl" target="_blank">http://p.sf.net/sfu/oracle-sfdevnl</a><br>
> _______________________________________________<br>
> gstreamer-devel mailing list<br>
> <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
> <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
><br>
><br>
<br>
<br>
<br>
</div><font color="#888888">--<br>
Andoni Morales Alastruey<br>
<br>
LongoMatch:The Digital Coach<br>
<a href="http://www.longomatch.ylatuya.es" target="_blank">http://www.longomatch.ylatuya.es</a><br>
</font><div><div></div><div class="h5"><br>
------------------------------------------------------------------------------<br>
Learn how Oracle Real Application Clusters (RAC) One Node allows customers<br>
to consolidate database storage, standardize their database environment, and,<br>
should the need arise, upgrade to a full multi-node Oracle RAC database<br>
without downtime or disruption<br>
<a href="http://p.sf.net/sfu/oracle-sfdevnl" target="_blank">http://p.sf.net/sfu/oracle-sfdevnl</a><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
</div></div></blockquote></div><br>