音视频同步原理及实现

可参考:
https://blog.csdn.net/myvest/article/details/97416415
https://www.jianshu.com/p/3578e794f6b5
总结的非常详细。

ffmpeg 推流 音视频同步推流

  1. 采用策略
    将视频同步到音频上:以音频的推送速度为基准来同步视频。
  2. 代码实现
    ffmpeg源码中给出的实现:
// Write the stream header, if any.
ret = avformat_write_header(oc, &opt);
if (ret < 0) {fprintf(stderr, "Error occurred when opening output file: %s\n",av_err2str(ret));return 1;
}while (encode_video || encode_audio) {/* select the stream to encode */if (encode_video &&(!encode_audio || av_compare_ts(video_st.next_pts, video_st.enc->time_base,audio_st.next_pts, audio_st.enc->time_base) <= 0)) {encode_video = !write_video_frame(oc, &video_st);} else {encode_audio = !write_audio_frame(oc, &audio_st);}
}

我的代码实现:

        // 根据pts同步进行同步if (audioSendPts == -2048 && videoSendPts == -1){audio_stream_send(outs);} else if (audioSendPts == 0 && videoSendPts == -1){video_stream_send_only();} else {// 比较时间戳,确定发送音频还是视频
//            LOGD("videoSendPts = %" PRId64", audioSendPts = %" PRId64"", videoSendPts, audioSendPts);if (av_compare_ts(videoSendPts + 1, pVideoCodecCtx->time_base,audioSendPts + 2048, pAudioCodecCtx->time_base) <= 0) {// 视频合流、封装video_stream_send_only();LOGD("av_compare_ts vido");} else {// 音频合流、封装audio_stream_send(outs);LOGD("av_compare_ts audio-------");}}

遇到的大坑

从视频源获取的帧率与我设置的不同,偶尔会出现一秒内的帧率比设置的帧率多一帧的现象,导致同步策略不起作用。一直以为是同步的策略存在问题,始终未怀疑到视频源的帧率不正常,踏了个大坑。

音视频同步 ffmpeg 推流相关推荐

  1. 音视频同步-ffmpeg

    音视频同步肯定是需要使用时间戳进行同步的,音频和视频的时间戳进行对比,哪个小就写入哪个包,基本上可以实现音视频同步. 但是这个时间戳从哪里来呢? 使用rtp头中携带的时间戳是最正确的方法,因为音视频流 ...

  2. php音视频同步,FFMPEG转码音视频不同步情况总结

    [导读]使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同步,下面我们就来根据问题出现的原因,对所遇到的音视频不同步做一个分类. 使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同 ...

  3. FFMPEG音视频同步-音视频实时采集并编码推流

    FFMPEG音视频同步-音视频实时采集并编码推流 //------------------------------------------------------------------------- ...

  4. FFmpeg 音视频同步

    原地址:http://www.jianshu.com/p/27279255f67e 音视频播放器的工作的具体流程如下图所示: 播放器工作流程 简单的来说包括:解协议,解封装,对音频和视频分别进行解码, ...

  5. ffmpeg rtsp转hls_Qt音视频开发24-ffmpeg音视频同步

    ## 一.前言 用ffmpeg来做音视频同步,个人认为这个是ffmpeg基础处理中最难的一个,无数人就卡在这里,怎么也不准,本人也是尝试过网上各种demo,基本上都是渣渣,要么仅仅支持极其少量的视频文 ...

  6. 音视频同步原理[ffmpeg]

    音视频同步原理[ffmpeg] output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题. 阅读前希望大家先了解一下时间戳的概念. /* compu ...

  7. ffmpeg源码分析_ffmpeg音视频同步的几种策略

    在前面的文章中,我们介绍了播放器的视频渲染及音频渲染的相关知识,这些都是单独进行的,一旦在现实开发中将视频及音频结合在一起播放就会出现音视频不同步的问题. 下面我们就来分析一下如何解决音视频同步的问题 ...

  8. NDK开发——FFmpeg实现视频转YUV、视频转RGB显示、音频转PCM、音频播放、音视频同步

    项目演示 前提准备 编译FFmpeg+CMake并能运行,详细可见我博客 下载libyuv库并编译成libyuv.so库,用于实现转换RGB格式功能 FFmpeg库简介 avcodec:编解码,包含 ...

  9. ffmpeg录制桌面视频和系统内部声音(音视频同步)

    本文抓取的是电脑内部声音,需要先安装软件screen capture recorder,这个软件大小有50M,太大,安装后,里面有一个脚本文件,如下所示: 打开这个文件,可以看到如下内容: 这个文件比 ...

最新文章

  1. ['1','2','3'].map(parseInt)
  2. ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片
  3. opencv摄像头 vmware虚拟机出现select timeout
  4. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
  5. 根据录入的计算公式计算_小规模纳税人增值税计算公式是什么,什么人能被称为小规模纳税人?- 理财技巧...
  6. 图神经网络PGL助力国民级音乐App,创新迭代千亿级推荐系统(人工智能应用案例)
  7. Qt+OpenCV打开视频文件并在窗口界面上显示
  8. vs code打开新的文件后旧的文件被顶掉
  9. 微软终于屈服和妥协:宣布加入 OpenJDK,贡献构建Java生态
  10. python调用phone库查询手机号码相关信息
  11. 第70天-内网安全-域横向内网漫游 Socks 代理隧道技
  12. off cpu linux,宋宝华: 用off-cpu火焰图进行Linux性能分析
  13. Android文件的读写
  14. 手机怎么查看连接过的wifi密码
  15. 数据结构之一元多项式
  16. 邮件服务器软件选择,3款windows下的免费邮件服务器软件
  17. 计算机设备管理cmd命令,打开设备管理器的命令,教你一分钟学会最简单
  18. Spring boot再来一遍
  19. python 爬取糗百
  20. 决策树、装袋、提升和随机森林的对比理解

热门文章

  1. C语言实现的音乐播放器
  2. Node.js联机游戏——gobang五子棋(客户端+服务端+websocket的双人游戏)
  3. size() → torch.Size使用举例
  4. 上海市2019年公务员录用考试笔试合格人员笔试成绩(B类)
  5. HBase内置过滤器的一些总结
  6. 莫比乌斯函数摘录笔记
  7. 智慧城市交通系列之车流量检测(一)
  8. 苹果计算机删除可怎么恢复,苹果电脑怎么恢复垃圾桶已删除文件-万兴恢复专家...
  9. 编程语言书籍下载(ASP/ASP.net类)
  10. Openssl加密库