计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长,

再从stsz box中取得sample总数,即总帧数sample_count,用总帧数除以总时长即平均帧率,计算公式为

frame_rate = sample_count/(duration/timescale)

解决方法:通过查询mp4帧率计算得到答案:

AVDictionary* opt = NULL;

av_dict_set(&opt, "video_track_timescale", "90000", 0);

备注:

AVDictionary *opt=NULL;
av_dict_set_int(&opt,"video_track_timescale",25,0);
ret=avformat_write_header(ofmt_ctx,&opt);
而且pts只能+1递增。时间基没有设置也能十分正常播放。

timescale指一秒钟按时钟滴答数计算是多少,如果你设置1000,则一秒钟是以1000计算,你设置成25,那一秒钟就以25计算,所以你pts只能+1。 因为你设置了video_track_timescale所以不需要设置时间基

保存帧:

int mp4savePacket(int status,AVPacket *tmppacket){tmppacket->flags |= AV_PKT_FLAG_KEY;
            tmppacket->pts +=last_pts;
           // tmppacket->pts = av_rescale_q((frame_num)*30000, outfmt_ctx->streams[0]->codec->time_base,outfmt_ctx->streams[0]->time_base);//替换了
            frame_num++;
            tmppacket->dts += last_dts;
            tmppacket->stream_index = 0;
            tmppacket->duration=1;
            LOGE(3,"record_status ok,record_status = %d frame index %d %d %d\n",record_status,frame_num, tmppacket->duration,tmppacket->pts);

            //LOGE(3,"mpacket, 16Byte = %d,%d ",tmppacket.data[0],tmppacket.data[1]);
            av_interleaved_write_frame(outfmt_ctx, tmppacket);
            av_free_packet(tmppacket);

ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决相关推荐

  1. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢

    计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长, 再从stsz box中取得sample总数,即总帧数sample_co ...

  2. FFmpeg解码H264裸流并转换成opencv Mat

    感谢雷霄骅博士的在中文视频编解码的付出,http://blog.csdn.net/leixiaohua1020 最近要搞一些视频推流的事情,要解析H264裸流并且获取opencv格式的Mat数据给算法 ...

  3. 编码为H264裸流并写文件一

    为什么说是裸流呢,因为这篇只讲到把视频编码后写入文件,得到的是一个后缀应该为".h264"的文件,只能用PotPlayer等功能强大的播放器才能打开,因为它没有容器信息,需要装在M ...

  4. 基于FFmpeg H264 + G711A 音视频裸流合并 MP4文件 ( G711A 转 AAC)

    https://blog.csdn.net/haiyangyunbao813/article/details/101788264

  5. ffmpeg实现将H264裸流封装成.mp4或.avi文件

    ffmpeg学习历程 由于我是移植到arm-linux环境(海思HI3521A),H264裸流直接从海思的编码模块VENC获取. H264数据流序列:    SPS, PPS, SEI, I, P, ...

  6. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...

  7. 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...

  8. h264 裸流打包成mp4 注意事项

    需求: Android 端把网络摄像头的一段正在播放的视频流,截取保存成mp4(按录像按钮时开始录像). 实现: ffmpeg + x264 + sdl; h264 裸流 打包成MP4,在网上也有一大 ...

  9. H264视频编码成MP4文件

    http://blog.csdn.net/firehood_/article/details/8813587 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近需要将H264视频编码成MP4格 ...

最新文章

  1. C++基本语法的知识体系
  2. (0038) iOS 开发之Xcode下的DerivedData文件
  3. 哪个学校计算机系学大物,计算机系各专业专业及名校介绍
  4. vue教程4:自定义组件的使用
  5. 分享Spring Cloud分布式微服务架构图
  6. ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记
  7. C语言内存的动态分配
  8. wxpython textctrl_wxpython中Textctrl回车事件无效的解决方法
  9. swift中的category,扩展
  10. Flask实现REST API之接收POST和GET请求
  11. 基于LED恒流驱动芯片芯鼎盛TX6122设计的DC-DC降压恒流DEMO
  12. centos6.5重置密码
  13. 视频:使用FFMpeg实现视频录制与压缩
  14. java投屏 dlna 安卓_DLNA投屏
  15. 描写计算机硬件的英语作文,介绍关于电脑的英语作文
  16. 手机浏览器onclick事件不能跳转页面
  17. 网园网络电视 v1.2 官方
  18. Windows7更改自己的计算机名,方便局域网内的用户识别
  19. GBase8s数据库以 RESTRICT 方式或 CASCADE 方式删除安全标签对象
  20. llike与rlike

热门文章

  1. linux svn可视化,Ubuntu 14.04如何安装可视化SVN
  2. 2020 java swing jtable 合并_java学生管理系统(界面版)
  3. mysql中如何将一个表中的部分记录合并,MySQL数据库将多条记录的单个字段合并成一条记录_MySQL...
  4. java {@link},Javadoc @see或{@link}?
  5. intel服务器主板芯片,英特尔® 服务器主板 S2600CW2SR
  6. h5 img js 点击图片放大_5分钟学会h5生成图片海报!
  7. 建议被降级降薪员工主动辞职?网友炸了!
  8. Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用?
  9. 505天,240,000字,我总结了Spring Security 的学习曲线,免费送给大家
  10. 每日一皮:一个难以复现的 bug ...