GSOC - Multiprogram #10

Closed
opened 2026-01-29 16:32:52 +00:00 by claunia · 6 comments
Owner

Originally created by @cfsmp3 on GitHub (Apr 10, 2014).

Originally assigned to: @canihavesomecoffee on GitHub.

In the digital world, a number of programs are transmitted simultaneously (multiplexed) in a single channel. The tuner receives all those programs, and then the receiver filters the one the user wants to watch, discarding all the others. CCExtractor does this too - if a stream contains more than one program you have to pick one. The goal is to modify CCExtractor so it's able to process all programs in the stream at the same time, generating the transcript for all of them in one pass.

Originally created by @cfsmp3 on GitHub (Apr 10, 2014). Originally assigned to: @canihavesomecoffee on GitHub. In the digital world, a number of programs are transmitted simultaneously (multiplexed) in a single channel. The tuner receives all those programs, and then the receiver filters the one the user wants to watch, discarding all the others. CCExtractor does this too - if a stream contains more than one program you have to pick one. The goal is to modify CCExtractor so it's able to process all programs in the stream at the same time, generating the transcript for all of them in one pass.
Author
Owner

@cfsmp3 commented on GitHub (Apr 10, 2014):

Some basic notes:

  • Multi program requires lots of work in the "library-ation" part. We'll need to get rid of most globals, start using contexts for example.
  • The function ts_readstream(void) (in ts_functions.cpp) is possibly the best way to start to understand the issues. That function reads from the transport stream until it can return a complete PES from the program with the correct PID (correct as in where the CC data is expected to be). It also parses PAT and PMT and discards unwanted packets. We will need to change that function so that it returns the next PES from any program.
  • The function that calls ts_readstream() -ts_getmoredata()- then takes the PES data and sends it to the appropiate place (depending if it's H264, MPEG, Hauppage's proprietary format, etc). Since it already expects the packet to be prefiltered it doesn't do any kind of per-program magic.
  • A very basic part of the job is already done: All PMTs are saved so we can keep track of programs in the transport stream. Now we will need to initialize 'per program' structures so we can keep track of status for each program.
  • Since each program has its own closed caption data it follows that this 'per program' structure is where the CC decoder structures will live (as opposed of just having a couple of global as we do now).
@cfsmp3 commented on GitHub (Apr 10, 2014): Some basic notes: - Multi program requires lots of work in the "library-ation" part. We'll need to get rid of most globals, start using contexts for example. - The function ts_readstream(void) (in ts_functions.cpp) is possibly the best way to start to understand the issues. That function reads from the transport stream until it can return a complete PES from the program with the correct PID (correct as in where the CC data is expected to be). It also parses PAT and PMT and discards unwanted packets. We will need to change that function so that it returns the next PES from any program. - The function that calls ts_readstream() -ts_getmoredata()- then takes the PES data and sends it to the appropiate place (depending if it's H264, MPEG, Hauppage's proprietary format, etc). Since it already expects the packet to be prefiltered it doesn't do any kind of per-program magic. - A very basic part of the job is already done: All PMTs are saved so we can keep track of programs in the transport stream. Now we will need to initialize 'per program' structures so we can keep track of status for each program. - Since each program has its own closed caption data it follows that this 'per program' structure is where the CC decoder structures will live (as opposed of just having a couple of global as we do now).
Author
Owner

@anshul1912 commented on GitHub (Jan 7, 2016):

Multiprogram support is completed as part of GSOC 15, using ccextractor with -multiprogram option allow user to output caption of multiple programs

@anshul1912 commented on GitHub (Jan 7, 2016): Multiprogram support is completed as part of GSOC 15, using ccextractor with -multiprogram option allow user to output caption of multiple programs
Author
Owner

@anshul1912 commented on GitHub (Feb 18, 2016):

This feature can be tested using /newRepository/TestFiles/General/Closedcaption_atsc_multiprog.ts in our gsoc repository.

using following cmd:
./ccextractor -multirogram /newRepository/TestFiles/General/Closedcaption_atsc_multiprog.ts

@anshul1912 commented on GitHub (Feb 18, 2016): This feature can be tested using /newRepository/TestFiles/General/Closedcaption_atsc_multiprog.ts in our gsoc repository. using following cmd: ./ccextractor -multirogram /newRepository/TestFiles/General/Closedcaption_atsc_multiprog.ts
Author
Owner

@cfsmp3 commented on GitHub (May 28, 2016):

I'm assigning this to Willem to validate and make sure our test suite deals OK with multiprogram, if it does I'll close the ticket.

@cfsmp3 commented on GitHub (May 28, 2016): I'm assigning this to Willem to validate and make sure our test suite deals OK with multiprogram, if it does I'll close the ticket.
Author
Owner

@cfsmp3 commented on GitHub (Jan 11, 2017):

Sample TS: https://drive.google.com/drive/folders/0B_61ywKPmI0TQTZEMm5Tajd5RVU

@cfsmp3 commented on GitHub (Jan 11, 2017): Sample TS: https://drive.google.com/drive/folders/0B_61ywKPmI0TQTZEMm5Tajd5RVU
Author
Owner

@cfsmp3 commented on GitHub (Jan 11, 2017):

Closing - confirmed working.

@cfsmp3 commented on GitHub (Jan 11, 2017): Closing - confirmed working.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/ccextractor#10