Re: How to concatenate segments?
jianwen chen <[email protected]>
| Newsgroups | gmane.comp.multimedia.matroska.user |
|---|---|
| Message-ID | <[email protected]> |
On Wed, May 18, 2011 at 4:40 PM, jianwen chen <[email protected]>wrote: > On Sun, May 15, 2011 at 5:17 AM, Steve Lhomme <[email protected]>wrote: > >> On Fri, May 13, 2011 at 12:06 AM, jianwen chen >> <[email protected]> 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 >> [email protected] >> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-users >> Read Matroska-Users on GMane: >> http://dir.gmane.org/gmane.comp.multimedia.matroska.user >> > > _______________________________________________ Matroska-users mailing list [email protected] http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-users Read Matroska-Users on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.user