社区
工具平台和程序库
帖子详情
ffmpeg 中pts和duration的关系
xiaomeng008
2011-04-26 11:50:37
以mp3文件为例,
我当前通过pInFmtCtx->duration获取了这个文件的时长,
通过packet包获取了每个包的pts值和这个时长是什么关系呢?
我猜测最后一个包的pts就是时长,但是不知道怎么将pts转换成 单位 秒呢?
谢谢大家!!!
...全文
964
2
打赏
收藏
ffmpeg 中pts和duration的关系
以mp3文件为例, 我当前通过pInFmtCtx->duration获取了这个文件的时长, 通过packet包获取了每个包的pts值和这个时长是什么关系呢? 我猜测最后一个包的pts就是时长,但是不知道怎么将pts转换成 单位 秒呢? 谢谢大家!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qinshi257
2012-04-26
打赏
举报
回复
楼主,您好,请问您是怎么解决的?
xiaomeng008
2011-04-26
打赏
举报
回复
问题解决,打扰大家了
openrtxp.zip
openrtxp是一个小型的rtsp/rtmp协议的rtxpserver, ANSI C语言开发,方便移植到嵌入式系统如IPCam. 功能list: (1)支持H264 + AAC编码格式封包成RTSP/RTMP,可以使用VLC/VLC网页控件播放,RTMP可以用VLC/flash player/kmplayer播放. 支持RTP over TCP/UDP. (2)RTSP/RTMP的URL可配置,缺省URL如下: VOD点播(文件回放):rtsp://192.168.2.62/playback/test.mp4 直播:rtsp://192.168.2.62/stream/0 RTMP的url和RTSP一致,只需要把"rtsp"修改为"rtmp" 图像延迟在250ms左右. (4)同时支持基于UDP/TCP的TS流直播. (5)移植很方便,只需要编写约7个直播流获取Audio/Video的函数即可. (6)支持DVR功能,通过简单的调用,即可实现把直播流保存到硬盘
中
(支持.mp4/.ts格式) (7)所有代码为纯C代码,可移植性强。 移植很方便,只需要编写约7个直播流获取Audio/Video的函数即可. int liveInit(); int liveUninit(); void* liveCreate(char* filename,void* prv,double*
duration
,unsigned int* video_codec,unsigned int* video_width,unsigned int* video_height,unsigned int* video_fps,unsigned int* video_bps,unsigned int* audio_codec,unsigned int* audio_samplerate,unsigned int* audio_channels,unsigned int* audio_bps); int liveGetHeaderPacket(void* hdl,int data_type,char* buf); int liveGetVideoPacket(void* hdl,char* buf,double*
pts
,int* sync); int liveGetAudioPacket(void* hdl,char* buf,double*
pts
); int liveDestroy(void* hdl); FAQ: 1.为什么要用
ffmpeg
和ssl? 答:ssl是rtmp协议要用到。ts流,mp4文件都是由
ffmpeg
中
的方法来实现的。如果去掉这两个lib,就支持不了rtmp,.ts,.mp4等功能。 libssl和libcrypto则是rtmp要使用的,修改configs.h 和Makefile就可以很容易地去掉。 playback/DVR/TS功能要用到
ffmpeg
lib的支持,修改configs.h和Makefile也很容易去掉
ffmpeg
,但这三项功能就实现不了。 去掉openssl和
ffmpeg
后,编译出来的image size在83KB左右。 2.如何支持底层的多通道?比如一个是1080P ch,一个是CIF ch. 答:通过live->idx = idx=atoi(filename);来区分不同的hw path。 3.如何支持多session或多个client连接? 答:来一个session,就调用liveCreate()来生成一个live实体。 liveCreate()的时候每次都是malloc()一个新的instance,那个instance包含一个h264enc指针和一个rd。 h264enc指针内部有一个wr,也就是说所有的流都共享一个h264enc指针,但每个流的rd是独立的。 第二次liveCreate()的时候,h264enc指针已经有了,就不需要再次建立h264enc指针了,直接引用就可以了(因此h264enc内部要做引用计数) 每多调用一次liveCreate(),h264enc->ref++。 每调用一次liveDestroy(),就h264enc->ref--,==0的时候就真正destroy h264enc。
FFmpeg
中
PTS
与DTS详解
FFmpeg
中
PTS
与DTS详解一、
PTS
与DTS简介二、时间基(time_base)简介 一、
PTS
与DTS简介 Decode Time Stamp(DTS)是解码时间戳,解码器解码时相对于SCR(系统参考)的时间戳。 Presentation Time Stamp(
PTS
)是渲染时间戳,解码器渲染时相对于SCR(系统参考)的时间戳。
duration
是视频时长,表示当前帧的持续时间,或者说两...
FFmpeg
4.3开发系列之四:命令行实践与解析
我将带领大家一起来学习
ffmpeg
的常用命令,包括音视频编解码、流媒体直播,同时讲解原理。大家在学习
中
遇到的各种问题,需要多总结分析、及时提问。 具体内容包括如下:三大命令行的选项分析:
ffmpeg
,ffplay,ffprobe音视频流信息的分析音视频的封装与解封装操作音视频的编码与解码操作字幕与水印的操作音视频的各种特效操作流媒体与直播的操作:rtp/rtcp/rtsp/hls(m3u8)/http-flv 梅老师从事音视频与流媒体行业18年;曾在永新视博、
中
科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。 目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。
ffmpeg
中
PTS
和DTS
计算视频长度: time(秒) = st->
duration
* av_q2d(st->time_base)
ffmpeg
内部的时间与标准的时间转换方法:
ffmpeg
内部的时间戳 = AV_TIME_BASE * time(秒) AV_TIME_BASE_Q=1/AV_TIME_BASE av_rescale_q(int64_t a, AVRational bq, AVRational cq)函数 这个函数的作用是计算a*bq / cq来把时间戳从一个时间基调整到另外一个时间基。
PTS
和DTS的时间基。
ffmpeg
中
的
pts
和dts
pts
反映帧什么时候开始显示,dts反映数据流什么时候开始解码 怎么理解这里的“什么时候”呢?如果有某一帧,假设它是第10秒开始显示。那么它的
pts
是多少呢。是10?还是10s?还是两者都不是。 为了回答这个问题,先引入
FFmpeg
中
时间基的概念,也就是time_base。它也是用来度量时间的。 如果把1秒分为25等份,你可以理解就是一把尺,那么每一格表示的就是1/25秒。此时的t...
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章