音视频同步 ffmpeg 推流

news/2024/7/5 7:04:42

音视频同步原理及实现

可参考:
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-------");
            }
        }

遇到的大坑

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


http://www.niftyadmin.cn/n/3656165.html

相关文章

Tangram for Internet Explorer铪铪铪

Tangram for Internet ExplorerTangram是一种使得软件系统的UI架构与软件系统实现“分离”的插件技术&#xff0c;通过这种“分离”&#xff0c;软件系统的UI可以在一定程度上独立于软件系统的设计&#xff0c;在设计环节中&#xff0c;其他软件组件&#xff0c;例如COM、.NET组…

HLS详解(看这个就够了)

HLS详解&#xff08;看这个就够了&#xff09;HLS概述官方定义优劣性优点&#xff1a;缺点:格式解析HLS文件playlist(m3u8)介绍HLS playlist(m3u8)格式详解播放模式点播VODLive 模式HLS概述 HLS是HTTP Live Streaming的简称&#xff0c;是苹果公司提出的基于HTTP的流媒体网络传…

ES流、PES、PS流、TS流

大牛总结&#xff1a;https://blog.csdn.net/huangblog/article/details/8740571

关于Tangram for MS Office的进展

关于Tangram for MS Office的进展Tangram for MS Office是Tangram框架的一个具体应用&#xff0c;宗旨是嫁接MS Office与应用软件开发之间的桥梁。Microsoft Office的强大是业界公认的事实&#xff0c;因此如何更好的在Office基础上架构应用是一个十分重要的课题。Tangram for …

CBR VBR ABR

CBR&#xff08;固定比特率&#xff09; Constant BitRate的缩写&#xff0c;意思是恒定&#xff08;固定&#xff09;比特率&#xff0c;指文件每秒钟的码率是固定不变的。CBR的特点是码率平稳&#xff0c;固定码流控制可以减少网络抖动的影响&#xff0c;不大起大落&#xf…

迎接IE自由定制化时代

迎接IE自由定制化时代经过一段时间的努力&#xff0c;一种预想即将变为现实了&#xff0c;这是我目前团队中年轻人小试牛刀的结果。看看如下的运行场景&#xff0c;这些浏览器还是IE吗&#xff1f;的确是IE&#xff0c;但不同于传统的插件&#xff0c;经过这种“再定制”功能的…

ffmpeg 码率控制(总结篇)

ffmpeg 码率控制CQPCRFCBRVBRABRH264编码控制profilepresettune本文仅探讨ffmpeg API编码的方式进行码率控制&#xff0c;文中测试数据使用的是网络传输场景&#xff0c;非本地测试&#xff0c;可能收到网络的影响。如有不足之处&#xff0c;请及时指正。CQP CQP&#xff1a;C…