首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将包含B帧和没有DTS的视频流写入MP4容器?

如何将包含B帧和没有DTS的视频流写入MP4容器?
EN

Stack Overflow用户
提问于 2020-02-12 05:21:53
回答 2查看 1.1K关注 0票数 1

我希望将从RTSP源接收到的h264视频流保存到MP4容器中。与其他问题不同,我所面临的挑战是:

  • 流包含B帧。
  • 流只有RTP/rtcp.rtcp.

提供的PTS。

这是我做过的代码

代码语言:javascript
运行
复制
//  ffmpeg
    pkt->data = ..;
    pkt->size = ..;
    pkt->flags = bKeyFrame? AV_PKT_FLAG_KEY : 0;    
    pkt->dts = AV_NOPTS_VALUE;
    pkt->pts = PTS;

    // PTS is based on epoch microseconds so I ignored re-scaling.
    //av_packet_rescale_ts(pkt, { 1, AV_TIME_BASE }, muxTimebase);

    auto ret = av_interleaved_write_frame(m_pAVFormatCtx, pkt);

我收到了很多这样的错误消息:“应用程序提供了无效的、非单调地将dts增加到muxer .”。

结果: mp4文件可通过VLC播放,但FPS仅为原始FPS的一半,视频持续时间不正确(VLC显示一个奇怪的数字)。

那么,在发送到容器之前,如何设置正确的DTS和PTS?

更新:我尝试了一些更改,虽然还没有成功,但是我发现帧速率下降的原因是由于muxer丢弃了不正确的帧。此外,如果我设置的PTS和DTS值太大,一些球员,如VLC必须延迟一段时间才能显示视频。

EN

Stack Overflow用户

发布于 2020-02-13 08:56:43

流只有RTP/rtp.pcp.给出的PTS”这是不正常的。这里出了点问题。

如果没有dts,这意味着您应该只使用pts。如果确实有B帧,那么dts值将与pts不同。

试试你的代码dts = pts,看看会发生什么。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60181618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档