⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mplex.cpp

📁 传输流分析
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        sector_size = VIDEOCD_SECTOR_SIZE;        packets_per_pack = 1;        init_audio_buffer_size = 4;        init_audio1_buffer_size = 4;        init_video_buffer_size = 46;        always_sys_header = FALSE;        use_computed_bitrate = COMPBITRATE_MAX;        mplex_type = MPEG_MPEG1;        mplex_pulldown_flag = PULLDOWN_NONE;        vcd_audio_pad = FALSE;        user_mux_rate = 0;        align_sequence_headers = 0;        put_private2 = 0;        frame_timestamps = TIMESTAMPS_ALL;        VBR_multiplex = 1;        write_pec = 1;        mux_SVCD_scan_offsets = 0;        max_file_size = 0;        mux_start_time = 0;        mux_stop_time = 0;        reset_clocks = 1;        write_end_codes = 1;        set_broken_link = 1;}void usage(char *progname){        printf ("usage: %s [options] <input files>\n\n",progname);        printf ("options:\n");        printf ("  --help,             -h:  print help message\n");        printf ("  --type,             -t:  set output type (MPEG2, DVD, SVCD (default), MPEG1, VCD, XSVCD, XVCD)\n");        printf ("  --of,               -o:  set output file\n");        printf ("  --input_stream,     -i:  set input stream type (PS_STREAM (default), TS_STREAM, TS_AC3_STREAM, ES_STREAM (needs 2 or 3 input files <audio1> [ <audio2> ] <video>))\n");        printf ("  --temp_dir,         -d:  directory for temporary demux files\n");        printf ("  --audio_delay,      -a:  set audio delay in ms\n");        printf ("  --video_delay,      -v:  set video delay in ms\n");        printf ("  --audio_pid,        -q:  audio PID for TS stream (0 = auto)\n");        printf ("  --video_pid,        -p:  audio PID for TS stream (0 = auto)\n");        printf ("  --ac3_id,           -c:  ID of AC3 audio for demux(0 = 1st tream)\n");        exit(1);}int main(int argc, char **argv){        int fda_out=0, fdv_out=0, fd_in=0;        int64_t ptsdiff=0;        int c;        char *filename = NULL;        char *type = "SVCD";        char *inpt = "PS_STREAM";        int adelay = 0;        int vdelay = 0;        int ac3_id =0;        unsigned int pid1 = 0;        unsigned int pid2 = 0;        char *temp_dir = NULL;        ostringstream afile;        ostringstream vfile;        while (1) {                int option_index = 0;                static struct option long_options[] = {                                                              {"type", required_argument, NULL, 't'                                                              },                                                              {"input_stream", required_argument, NULL, 'i'},                                                              {"temp_dir", required_argument, NULL, 'd'},                                                              {"audio_delay", required_argument, NULL, 'a'},                                                              {"video_delay", required_argument, NULL, 'v'},                                                              {"video_pid", required_argument, NULL, 'p'},                                                              {"audio_pid", required_argument, NULL, 'q'},                                                              {"ac3_id", required_argument, NULL, 'c'},                                                              {"of",required_argument, NULL, 'o'},                                                              {"help", no_argument , NULL, 'h'},                                                              {0, 0, 0, 0}                                                      };                c = getopt_long (argc, argv, "t:o:a:v:i:hp:q:d:c:",                                 long_options, &option_index);                if (c == -1)                        break;                switch (c) {                case 't':                        type = optarg;                        break;                case 'i':                        inpt = optarg;                        break;                case 'd':                        temp_dir = optarg;                        break;                case 'a':                        adelay = strtol(optarg,(char **)NULL, 0);                        break;                case 'p':                        pid1 = strtol(optarg,(char **)NULL, 0);                        break;                case 'q':                        pid2 = strtol(optarg,(char **)NULL, 0);                        break;                case 'v':                        vdelay = strtol(optarg,(char **)NULL, 0);                        break;                case 'c':                        ac3_id = strtol(optarg,(char **)NULL, 0);                        if (ac3_id >= 0x80)                                ac3_id-=0x80;                        break;                case 'o':                        filename = optarg;                        break;                case 'h':                case '?':                default:                        usage(argv[0]);                }        }        if (optind == argc-1) {                if ((fd_in = open(argv[optind] ,O_RDONLY| O_LARGEFILE)) < 0) {                        cerr << "Error opening input file "                        << argv[optind]<< endl;                        exit(1);                }                cerr << "Reading from " << argv[optind] << endl;                if (temp_dir) {                        afile << temp_dir << "/" ;                        vfile << temp_dir << "/" ;                }                afile << "tmp_as.mp2" << ends;                vfile << "tmp_vs.m2v" << ends;                strcpy(AudioFilename,afile.str().data());                strcpy(VideoFilename,vfile.str().data());        } else if (optind == argc-2 && !strcmp(inpt,"ES_STREAM")) {                strcpy(AudioFilename,argv[optind]);                strcpy(VideoFilename,argv[optind+1]);        } else if (optind == argc-3 && !strcmp(inpt,"ES_STREAM")) {                strcpy(AudioFilename,argv[optind]);                strcpy(Audio1Filename,argv[optind+1]);                strcpy(VideoFilename,argv[optind+2]);        } else {                usage(argv[0]);        }        if (filename)                strcpy(ProgramFilename,filename);        else                strcpy(ProgramFilename,"out.mpg");        cerr << "Output File is: " << ProgramFilename << endl;        if (strcmp(inpt,"ES_STREAM")) {                fda_out = open(AudioFilename,O_WRONLY|O_CREAT|O_TRUNC,                               S_IRUSR|S_IWUSR| O_LARGEFILE);                fdv_out = open(VideoFilename,O_WRONLY|O_CREAT|O_TRUNC,                               S_IRUSR|S_IWUSR| O_LARGEFILE);                if(fda_out < 0 || fdv_out < 0) {                        cerr << "Error opening output files" << endl;                        exit(1);                }        }        if (!strcmp(type,"MPEG2"))                SetMPEG2Mplex();        else if (!strcmp(type,"DVD"))                SetDVDMplex();        else if (!strcmp(type,"SVCD"))                SetSVCDMplex();        else if (!strcmp(type,"MPEG1"))                SetMPEG1Mplex();        else if (!strcmp(type,"VCD"))                SetVCDMplex();        else if (!strcmp(type,"XSVCD"))                SetXSVCDMplex();        else if (!strcmp(type,"XVCD"))                SetXVCDMplex();        else                usage(argv[0]);        cerr << endl;        if (!strncmp(inpt,"PS_STREAM",9)) {                cerr << "Opening " << AudioFilename                << " for audio demux" << endl;                cerr << "Opening " << VideoFilename                << " for video demux" << endl;                ptsdiff = pes_dmx( fd_in, fda_out, fdv_out, 1+ac3_id);        } else if (!strncmp(inpt,"TS_STREAM",9)) {                cerr << "Opening " << AudioFilename                << " for audio demux" << endl;                cerr << "Opening " << VideoFilename                << " for video demux" << endl;                cerr << "TS demux with apid: " << pid1 << "  vpid: " << pid2;                cerr << endl;                ptsdiff = ts_demux(fd_in,fdv_out,fda_out,pid1,pid2,1);        } else if (!strncmp(inpt,"TS_AC3_STREAM",13)) {                cerr << "Opening " << AudioFilename                << " for audio demux" << endl;                cerr << "Opening " << VideoFilename                << " for video demux" << endl;                cerr << "TS_AC3 demux with apid: " << pid1 << "  vpid: " << pid2;                cerr << endl;                ptsdiff = ts_demux(fd_in,fdv_out,fda_out,pid1,pid2,2);        } else if (strcmp(inpt,"ES_STREAM")) {                usage(argv[0]);        }        cerr << endl;        if ( adelay || vdelay ) {                ptsdiff = (vdelay - adelay)*90;        }        cerr << "VPTS - APTS = " << ptsdiff/90 << "ms" << endl;        if ( ptsdiff > 270000 || ptsdiff < -270000) {                cerr << "Warning pts difference seems too large."                << "You may have to set audio or video delay by hand" << endl;        }        if ( ptsdiff > 45000000 || ptsdiff < -45000000) {                // pts difference > 10min                // set delay to 300ms                ptsdiff=-27000;        }        if (ptsdiff > 0)                video_delay_ms += ptsdiff/90;        else                audio_delay_ms += -ptsdiff/90;        if (strlen(Audio1Filename))                domplex(1,2);        else                domplex(1,1);        if (strcmp(inpt,"ES_STREAM")) {                unlink(AudioFilename);                unlink(VideoFilename);        }        fprintf(stderr,"                                                            \n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -