[Matroska-users] How to concatenate segments?
jianwen chen
jianwen.chen.video at gmail.com
Mon May 23 23:36:41 CEST 2011
On Wed, May 18, 2011 at 4:40 PM, jianwen chen
<jianwen.chen.video at gmail.com>wrote:
> On Sun, May 15, 2011 at 5:17 AM, Steve Lhomme <slhomme at matroska.org>wrote:
>
>> On Fri, May 13, 2011 at 12:06 AM, jianwen chen
>> <jianwen.chen.video at gmail.com> wrote:
>> > Hi,
>> >
>> > http://matroska.org/technical/streaming/index.html
>> > A live Matroska stream is different than a file, because it may have no
>> > known end (only when the client disconnects). For that the Segment must
>> use
>> > the "unknow" size (all 1s in the size). The other option would be to
>> > concatenate Segments with known sizes one after the other. This solution
>> > allows a change of codec/resolution between each segment which can be
>> useful
>> > in some cases (switch between 4:3 and 16:9 in some TV programs for
>> example).
>> >
>> > I want to enable a streaming with matroska file formats. How to
>> concatenate
>> > the segments with known sizes one after the other? Is there any guide on
>> > this?
>>
>> I know GStreamer can do that. At least from a live source, as there no
>> good reason to turn one file into a live stream.
>>
>> If you want to create something like a live TV stream, you fill either
>> need to hack into GStreamer (doable) or code it yourself. In that case
>> all you need is use the unknown size in your segments above, and
>> adjust the timecode in the Clusters you send to that they are
>> continuous and contiguous (no gap). The easiest way would be to set an
>> unknown size on the Cluster too (excepted by a live stream reader
>> anyway) so you can recreate the Cluster timecode (as the value may not
>> fit in the size previously allocated). You have to know the last (end)
>> timecode in a Cluster when transitioning to a new Segment so you use
>> that for the new Cluster of the new Segment. That may require "deep
>> Block inspection" as you need to determine the duration of a frame
>> (especially for audio). Although sometimes the source file has that
>> duration for the last packet of each track.
>>
>>
> Steve, thanks.
> According to the code and the Matroska specification, we know a live stream
> is designated by setting the “Segment” size to “unknown”. I set the size to
> a very large value and setting the duration of the video to 100 hours. And I
> also delete the “SeekHead” elements ) and “Cues” elements in 2 mkv files. I
> have no cluster in the webm files.
>
> cat 1split-004-largesize-changeduration-removeseekhead-recues.webm
> 2split-001-large-chaduration-rmseek-rmcue.webm > aaa.webm
>
> But the file aaa.webm can only be played for the 1st segment.
>
> What I want to do is concatenate the 2 segments together as a file and the
> file can be played one segment by one segment.
> Is there anything wrong above result in this?
>
> The detailed info is followed:
> File1
> # mkvinfo 1split-004-largesize-changeduration-removeseekhead-recues.webm
> + EBML head
> |+ EBML version: 1
> |+ EBML read version: 1
> |+ EBML maximum ID length: 4
> |+ EBML maximum size length: 8
> |+ Doc type: webm
> |+ Doc type version: 2
> |+ Doc type read version: 2
> + Segment, size unknown
> |+ EbmlVoid (size: 4045)
> |+ Segment information
> | + Timecode scale: 1000000
> | + Muxing application: libebml v1.0.0 + libmatroska v1.0.0
> | + Writing application: mkvmerge v4.0.0 ('The Stars were mine') built on
> Jun 17 2010 18:47:20
> | + Duration: 2766143.488s (768:22:23.488)
> | + Date: Wed May 11 06:02:42 2011 UTC
> | + Segment UID: 0xfb 0x46 0x6a 0x88 0x4f 0xab 0xd3 0x94 0xa1 0xfd 0xf6
> 0xa7 0xba 0x5d 0x60 0x35
> |+ Segment tracks
> | + A track
> | + Track number: 1
> | + Track UID: 1
> | + Track type: video
> | + Default flag: 0
> | + MinCache: 1
> | + Codec ID: V_VP8
> | + Default duration: 41.708ms (23.976 fps for a video track)
> | + Language: und
> | + Video track
> | + Pixel width: 640
> | + Pixel height: 360
> | + Display width: 640
> | + Display height: 360
> | + A track
> | + Track number: 2
> | + Track UID: 2
> | + Track type: audio
> | + Default flag: 0
> | + Codec ID: A_VORBIS
> | + CodecPrivate, length 4189
> | + Language: und
> | + Audio track
> | + Sampling frequency: 44100
> | + Channels: 2
> |+ EbmlVoid (size: 1081)
> |+ Cluster
>
> File2
> $ mkvinfo 2split-001-large-chaduration-rmseek-rmcue.webm
> + EBML head
> |+ EBML version: 1
> |+ EBML read version: 1
> |+ EBML maximum ID length: 4
> |+ EBML maximum size length: 8
> |+ Doc type: webm
> |+ Doc type version: 2
> |+ Doc type read version: 2
> + Segment, size unknown
> |+ EbmlVoid (size: 4045)
> |+ Segment information
> | + Timecode scale: 1000000
> | + Muxing application: libebml v1.0.0 + libmatroska v1.0.0
> | + Writing application: mkvmerge v4.0.0 ('The Stars were mine') built on
> Jun 17 2010 18:47:20
> | + Duration: 8585740.288s (2384:55:40.288)
> | + Date: Wed May 11 06:09:38 2011 UTC
> | + Segment UID: 0x12 0xea 0xf1 0x7f 0xb0 0x17 0x15 0x97 0xfb 0x67 0xd7
> 0x7b 0x91 0x28 0x2d 0xa3
> |+ Segment tracks
> | + A track
> | + Track number: 1
> | + Track UID: 1
> | + Track type: video
> | + Default flag: 0
> | + MinCache: 1
> | + Codec ID: V_VP8
> | + Default duration: 41.708ms (23.976 fps for a video track)
> | + Language: und
> | + Video track
> | + Pixel width: 640
> | + Pixel height: 360
> | + Display width: 640
> | + Display height: 360
> | + A track
> | + Track number: 2
> | + Track UID: 2
> | + Track type: audio
> | + Default flag: 0
> | + Codec ID: A_VORBIS
> | + CodecPrivate, length 4189
> | + Language: und
> | + Audio track
> | + Sampling frequency: 44100
> | + Channels: 2
> |+ EbmlVoid (size: 1081)
> |+ Cluster
>
>
Finally, I figure it out. I will write a detailed instruction about this
in the near future.
Regards,
Jianwen
>
>
>
>> --
>>
>> Steve Lhomme
>> Matroska association Chairman
>> _______________________________________________
>> Matroska-users mailing list
>> Matroska-users at lists.matroska.org
>> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-users
>> Read Matroska-Users on GMane:
>> http://dir.gmane.org/gmane.comp.multimedia.matroska.user
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.matroska.org/pipermail/matroska-users/attachments/20110523/ee92afd7/attachment-0003.html>
More information about the Matroska-users
mailing list