[Live-devel] Matroska BANK_SIZE overflow

PROMONET Michel michel.promonet at thalesgroup.com
Wed Nov 6 06:37:02 PST 2013


            Hi Ross,

This is clearer like this.
Thank a lot.

Best Regards,

            Michel.

[@@ THALES GROUP INTERNAL @@]

De : live-devel-bounces at ns.live555.com [mailto:live-devel-bounces at ns.live555.com] De la part de Ross Finlayson
Envoyé : mercredi 6 novembre 2013 05:45
À : LIVE555 Streaming Media - development & use
Objet : Re: [Live-devel] Matroska BANK_SIZE overflow

Surely I badly use the matroska parser...
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.

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.

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.

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.

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.)

///////////////////////////
#include "liveMedia.hh"
#include "BasicUsageEnvironment.hh"

static char newMatroskaFileWatchVariable = 0;
static MatroskaFile* matroskaFile;
static void onMatroskaFileCreation(MatroskaFile* newFile, void* /*clientData*/) {
  matroskaFile = newFile;
  newMatroskaFileWatchVariable = 1;
}

int main(int argc, char** argv) {
  TaskScheduler* scheduler = BasicTaskScheduler::createNew();
  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);

  // Open a Matroska file:
  char const* inputFileName = "test.mkv";
  MatroskaFile::createNew(*env, inputFileName, onMatroskaFileCreation, NULL);
  env->taskScheduler().doEventLoop(&newMatroskaFileWatchVariable);

  // Create a demultiplexor from the file:
  MatroskaDemux* demux = matroskaFile->newDemux();

  // And start copying each track:
  unsigned const fileSinkBufferSize = 300000;
  while (1) {
    unsigned trackNumber;
    FramedSource* trackSource = demux->newDemuxedTrack(trackNumber);
    if (trackSource == NULL) break;

    // For reference, display information about each track:
    MatroskaTrack* trackInfo = matroskaFile->lookup(trackNumber);
    fprintf(stderr, "Reading track %d, codec: %s\n", trackNumber, trackInfo->codecID);

    char outFileName[100];
    sprintf(outFileName, "track%d", trackNumber);
    MediaSink* sink = FileSink::createNew(*env, outFileName, fileSinkBufferSize, False);
    sink->startPlaying(*trackSource,NULL,NULL);
  }

  env->taskScheduler().doEventLoop();

  return 0;
}

Ross Finlayson
Live Networks, Inc.
http://www.live555.com/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20131106/42e062f4/attachment.html>


More information about the live-devel mailing list