更改ffmpeg中的mpeg ts pid值 < >我的C++应用程序加载原始音频和视频文件,并以MPEG TS格式保存它们。目前音频和视频的PID值是固定的 我希望使用C++来显示那些音频和视频的PID值。如果有人能告诉我怎么做,我真的很感激。

更改ffmpeg中的mpeg ts pid值 < >我的C++应用程序加载原始音频和视频文件,并以MPEG TS格式保存它们。目前音频和视频的PID值是固定的 我希望使用C++来显示那些音频和视频的PID值。如果有人能告诉我怎么做,我真的很感激。,c++,ffmpeg,mpeg2-ts,C++,Ffmpeg,Mpeg2 Ts,为MPEG-TS多路复用器设置mpegts\u start\u pid避免选项 例如: 采用选项 更新:如何设置字典条目 AVDictionary *d = NULL; // "create" an empty dictionary av_dict_set(&d, "foo", "bar", 0); // add an entry 从 这里有一个完整的remuxing示例: 但是它使用了avio_open@aergistal。你在这方面使用AVDictionary是

为MPEG-TS多路复用器设置mpegts\u start\u pid避免选项

例如:

采用
选项

更新:如何设置字典条目

AVDictionary *d = NULL;           // "create" an empty dictionary
av_dict_set(&d, "foo", "bar", 0); // add an entry

这里有一个完整的remuxing示例:
但是它使用了avio_open

@aergistal。你在这方面使用AVDictionary是正确的。但是avio_open2()方法不起作用。您必须将其传递给write header方法,而不是avio_open2()方法

AVDictionary*d=NULL;
av指令集(&d,“mpegts启动pid”,“0x0050”,0);
//写入文件头
如果(avformat\U write\U头(ofmt\U ctx和d)<0){
printf(“打开输出文件时出错\n”);
返回false;
}
这种方法有效


谢谢。

您使用什么创建TS?您好!谢谢你的回复。。但是我不知道怎么用它。。您可以发布如何设置AVOption值并将其传递给avio_Open2,并使用请求的信息更新答案。查找ffmpeg信息的最佳方法是查看源代码和doxygen文档。但它不起作用AVDictionary*d=NULL;av指令集(&d,“mpegts启动pid”,“0x0050”,0);//添加一个入口,我的muxing代码就可以正常工作了。。我只需要更改默认的音频和视频PID值。。谢谢,也许有一本不同的字典会被传阅,比如说在AVFormatContext中?您的代码是否基于muxing.c示例?谢谢分享!您使用的是最新的LIB吗?
AVDictionary *d = NULL;           // "create" an empty dictionary
av_dict_set(&d, "foo", "bar", 0); // add an entry
AVDictionary *d = NULL;
av_dict_set(&d, "mpegts_start_pid", "0x0050", 0);

//Write file header
if (avformat_write_header(ofmt_ctx, &d) < 0) {
    printf("Error occurred when opening output file\n");
    return false;
}