zoukankan      html  css  js  c++  java
  • 记录音视频不同步的问题及解决过程

    背景

    在做国标级联,模块输入rtmp流,输出rtp+ps,视频H264, 音频转码aac →g711A.

    现象

    1、单视频流播放正常

    2、单音频服务器保存输出G711A文件播放正常

    3、音视频复合流播放音频拉慢了视频,大概1s视频播放了1.5-2s.同时音频也变慢了.

    4、ffprobe 发现音频的pts+ pkt_duration 大于下一个音频packet pts.

    尝试解决过程

    1、改变封装格式,

    rtp+ ps header + ps system header + ps map + pesv + rtp + ps header + pesa

    -------------→

    rtp + ps header + ps system header + ps map + pesv + pesa.

    封装格式符合gb28181文档标准,但是对音视频同步没有效果.

    2、aac转g711过程中,发现一个rtmp的aac音频msg,经过ffmpeg转码输出3-5个g711a音频packet, 再把这三个音频packet分别封装成pes, 三个pes使用同一个pts.pts是透传的rtmp msg的timestamp.格式为:

    rtp + ps header + ps system header + ps map + pesv(with PTS V) + pesa1(with PTS A) + pesa2(with PTS A)  + pesa3(with PTS A) 

    做了改动把三个相同pts的音频pes合并为同一个pes, 最后的格式为:

    rtp + ps header + ps system header + ps map + pesv(with PTS V) + pesa(with PTS A) 

    竟然音视频不同步的问题解决了!!!

    分析

    g711是固定的采样率、通道数和采样位数, 在封装rtp/ps的时候并没有对这些参数进行传递,仅仅对pts进行了设置.而pts又是透传rtmp的时间戳(ts * 90), 所以这个时间不会出错.所以想到了合并音频pes的问题.

  • 相关阅读:
    杭电1005
    幂运算
    oj题目分类
    js判断手机或Pc端登陆.并跳转到相应的页面
    sessionStorage或localStorage实现注册登录demo
    html5手机端定位
    微信小程序开发基础知识总结
    eCharts.js使用心得
    前端性能优化--图片懒加载(lazyload image)
    19 款仿 Bootstrap 后台管理主题下载,finrUI控件,好用的ui框架
  • 原文地址:https://www.cnblogs.com/micoblog/p/15425560.html
Copyright © 2011-2022 走看看