📄 main.c
字号:
#include <gpac/mpegts.h>
u32 dump_pid = 130;
FILE *dest = NULL;
Bool has_seen_pat = 0;
void on_m2ts_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par)
{
GF_M2TS_PES_PCK *pck;
switch (evt_type) {
case GF_M2TS_EVT_PAT_FOUND:
fprintf(stdout, "Service connected (PAT found)\n");
break;
case GF_M2TS_EVT_PAT_REPEAT:
has_seen_pat = 1;
break;
case GF_M2TS_EVT_PAT_UPDATE:
fprintf(stdout, "Service connected (PAT found)\n");
break;
case GF_M2TS_EVT_PMT_FOUND:
fprintf(stdout, "Program list found - %d streams\n", gf_list_count( ((GF_M2TS_Program*)par)->streams) );
break;
case GF_M2TS_EVT_PMT_UPDATE:
fprintf(stdout, "Program list updated - %d streams\n", gf_list_count( ((GF_M2TS_Program*)par)->streams) );
break;
case GF_M2TS_EVT_SDT_FOUND:
fprintf(stdout, "Program Description found - %d desc\n", gf_list_count(ts->SDTs) );
break;
case GF_M2TS_EVT_SDT_UPDATE:
fprintf(stdout, "Program Description updated - %d desc\n", gf_list_count(ts->SDTs) );
break;
case GF_M2TS_EVT_PES_PCK:
pck = par;
if (dest && (dump_pid == pck->stream->pid)) {
fwrite(pck->data, pck->data_len, 1, dest);
}
//fprintf(stdout, "PES(%d): DTS "LLD" PTS" LLD" RAP %d size %d\n", pck->stream->pid, pck->DTS, pck->PTS, pck->rap, pck->data_len);
break;
}
}
int main(int argc, char **argv)
{
char data[188];
u32 size, fsize, fdone;
GF_M2TS_Demuxer *ts;
FILE *src = fopen(argv[1], "rb");
ts = gf_m2ts_demux_new();
ts->on_event = on_m2ts_event;
fseek(src, 0, SEEK_END);
fsize = ftell(src);
fseek(src, 0, SEEK_SET);
fdone = 0;
while (!feof(src)) {
size = fread(data, 1, 188, src);
if (size<188) break;
gf_m2ts_process_data(ts, data, size);
if (has_seen_pat) break;
}
dest = fopen("pes.mp3", "wb");
gf_m2ts_reset_parsers(ts);
gf_f64_seek(src, 0, SEEK_SET);
fdone = 0;
while (!feof(src)) {
size = fread(data, 1, 188, src);
if (size<188) break;
gf_m2ts_process_data(ts, data, size);
fdone += size;
gf_cbk_on_progress("MPEG-2 TS Parsing", fdone, fsize);
}
gf_cbk_on_progress("MPEG-2 TS Parsing", fsize, fsize);
fclose(src);
gf_m2ts_demux_del(ts);
if (dest) fclose(dest);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -