<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><blockquote type="cite"><div lang="FR" link="blue" vlink="purple" style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="WordSection1" style="page: WordSection1;"><div style="margin: 0cm 0cm 0.0001pt;"><span lang="EN-US" style="font-family: Arial, sans-serif; font-size: 11pt; color: rgb(31, 73, 125);">Surely I badly use the matroska parser…<o:p></o:p></span></div><div style="font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><span lang="EN-US" style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(31, 73, 125);">What I was trying to do is to connect each matroska subsession to a sink. In fact I don’t need ServerMediaSession, it is just to get the FramedSource corresponding to a subsession.</span></div></div></div></blockquote><div><br></div>The "MatroskaFileServerDemux" class should be used only within a RTSP server, in which case you don't 'play' the demultiplexed tracks directly; instead, this is done indirectly, via the RTSP server implementation.  I'm not sure exactly why the BANK_SIZE error was occurring for your application, but it turns out that you weren't using the API in the intended way.</div><div><br></div><div>If you want to demultiplex the tracks from a Matroska file directly - without a RTSP server - then you can do this; however, the API didn't make this clear.  That was my fault.</div><div><br></div><div>To fix this, I have installed a new version (2013.11.06) of the "LIVE555 Streaming Media" code that improves and clarifies the API for demultiplexing a Matroska file.</div><div><br></div><div>The following is a version of your demo application that uses the new, cleaned-up API to demultiplex a Matroska file into files for its constituent tracks.  (When I run this, I don't get the BANK_SIZE error.)</div><div><br></div><div>///////////////////////////</div><div>#include "liveMedia.hh"<br>#include "BasicUsageEnvironment.hh"<br> <br>static char newMatroskaFileWatchVariable = 0;<br>static MatroskaFile* matroskaFile;<br>static void onMatroskaFileCreation(MatroskaFile* newFile, void* /*clientData*/) {<br>  matroskaFile = newFile;<br>  newMatroskaFileWatchVariable = 1;<br>}<br> <br>int main(int argc, char** argv) {<br>  TaskScheduler* scheduler = BasicTaskScheduler::createNew();<br>  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);<br> <br>  // Open a Matroska file:<br>  char const* inputFileName = "test.mkv";<br>  MatroskaFile::createNew(*env, inputFileName, onMatroskaFileCreation, NULL);<br>  env->taskScheduler().doEventLoop(&newMatroskaFileWatchVariable);<br> <br>  // Create a demultiplexor from the file:<br>  MatroskaDemux* demux = matroskaFile->newDemux();<br><br>  // And start copying each track:<br>  unsigned const fileSinkBufferSize = 300000;      <br>  while (1) {<br>    unsigned trackNumber;<br>    FramedSource* trackSource = demux->newDemuxedTrack(trackNumber);<br>    if (trackSource == NULL) break;<br><br>    // For reference, display information about each track:<br>    MatroskaTrack* trackInfo = matroskaFile->lookup(trackNumber);<br>    fprintf(stderr, "Reading track %d, codec: %s\n", trackNumber, trackInfo->codecID);<br><br>    char outFileName[100];<br>    sprintf(outFileName, "track%d", trackNumber);<br>    MediaSink* sink = FileSink::createNew(*env, outFileName, fileSinkBufferSize, False);<br>    sink->startPlaying(*trackSource,NULL,NULL);        <br>  }<br> <br>  env->taskScheduler().doEventLoop();<br> <br>  return 0;<br>}<br></div><br><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  ">Ross Finlayson<br>Live Networks, Inc.<br><a href="http://www.live555.com/">http://www.live555.com/</a></span></span>
</div>
<br></body></html>