- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 ffmpeg C++ API 对 mpegts 视频进行编码。输出视频应有两个流:第一个应为 AVMEDIA_TYPE_VIDEO 类型;第二个应为 AVMEDIA_TYPE_DATA 类型,并应包含一组 KLV 数据。
我已经编写了自己的 KLV 库来管理 KLV 格式。
但是,我无法通过组合这两个流来“从头开始”创建新视频。按照FFMPEG C api h.264 encoding / MPEG2 ts streaming problems中的实现我可以使用单个视频流成功编码 mpegts 视频。
但是我无法将新的 AVMEDIA_TYPE_DATA 流添加到输出视频,因为一旦我使用 avformat_new_stream(...) 之类的方法添加新数据流,输出视频就为空:数据流和制作视频,输出文件为空。
任何人都可以向我推荐有关如何以 mpegts 格式将数据流正确添加到输出视频的教程页面或示例吗?
非常感谢!
最佳答案
我能够通过从 FFmpeg 源附带的“muxing.c”示例开始并将其修改如下,将 KLV 流添加到多路输出。
首先,我按如下方式创建了 AVStream,其中“oc”是 AVFormatContext(多路复用器)变量:
AVStream *klv_stream = klv_stream = avformat_new_stream(oc, NULL);
klv_stream->codec->codec_type = AVMEDIA_TYPE_DATA;
klv_stream->codec->codec_id = AV_CODEC_ID_TIMED_ID3;
klv_stream->time_base = AVRational{ 1, 30 };
klv_stream->id = oc->nb_streams - 1;
然后,在编码/复用循环期间:
AVPacket pkt;
av_init_packet(&pkt);
pkt.data = (uint8_t*)GetKlv(pkt.size);
auto res = write_frame(oc, &video_st.st->time_base, klv_stream, &pkt);
free(pkt.data);
(GetKlv() 函数返回一个由 malloc() 处理的二进制数据数组,该数组将替换为您用来获取编码 KLV 的任何内容。它将 pkt.size 设置为数据的长度。)
通过这个修改,并指定一个“.ts”目标文件,我得到了一个在 VLC 中播放得很好的三流文件。 KLV流的stream_type为0x15,表示同步KLV。
记下 AV_CODEC_ID_TIMED_ID3 的 codec_id 值。根据 libavformat 源文件“mpegtsenc.c”,对于异步 KLV(无伴随 PTS 或 DTS),AV_CODEC_ID_OPUS 的值应导致 stream_type 6。这实际上对我的应用程序很重要,但我无法让它工作——对 avformat_write_header() 的调用抛出一个被零除的错误。如果我弄清楚了,我会在此处添加更新。
关于c++ - ffmpeg c++ API 使用 KLV 数据流编码 mpegts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801086/
如何解析 KLV 数据?下面有一些代码。我想使用 klv 元数据制作 map 。但是如何呢? 我知道经纬度在klv的第13和14键。但是我如何使用它们并制作 map 。 ILMMpgDmx *CMai
是ffmpeg的元数据,也有描述: http://wiki.multimedia.cx/index.php?title=FFmpeg_Metadata 还支持 MISB 标准无人机元数据 601.5
我正在尝试解析来自外部摄像头的 stanag 4609 klv 流。 首先,我试图计算流中接收到的高度值。 根据 stanag 4609 文档,该值为 2 个字节长,以英尺为单位,表示为 float
我需要将 klv 元数据复用到 h264 流中。我已经创建了应用程序。但是只有在插入 klv-data 时才会播放流。当我停止推送 klv-data 时,整个流都会停止。通过 mpegtsmux 复用
我需要使用 ffmpeg C++ API 对 mpegts 视频进行编码。输出视频应有两个流:第一个应为 AVMEDIA_TYPE_VIDEO 类型;第二个应为 AVMEDIA_TYPE_DATA 类
将 KLV 字符串拆分为键、长度、值作为元素的列表/元组的更有效方法是什么? 为了添加一点背景,前 3 位数字作为键,接下来的 2 位表示值的长度。 我已经能够使用以下代码解决该问题。但我不认为我的代
目前我正在使用 libav* 对 H.264 视频进行编码。我想将 KLVPackets 添加到比特流,但不知道在哪里实现它。 avcodec 中有一个结构,但我不确定如何将它写入帧元数据 typed
我有一个包含 klv 元数据的 mp2 流。我使用 ffmpeg 命令行将 klv 存储在一个文件中: ffmpeg -i input.mpg -map data-re -codec copy -f
我是一名优秀的程序员,十分优秀!