..
Ffmpeg_about
一些关于流信息的理解
- 对于一个普通的 rtsp 流, 现在使用 ffmpeg 进行打开流, 然后从中获取数据包的时候, pts 和 dts 并不是数据包自带的, rtsp 流只发包, 然后告诉 ffmpeg 关于流的一些信息, pts 以及 dts 是本地 ffmpeg 的接口来构建的,对于使用者,为了不丢包,应该尽可能多的去接收 rtsp 流所发出的包,这样才能够保证不遗漏。再就是,包是具有实效性的,如果让线程接收一个包然后阻塞一秒继续接收, 第二个包和第一个包之间会丢很多包, 但是他们的 pts 和 dts 是正常构建的, 例如间隔是3600, 第一个是3600, 按照时间来算第二个应该是3600*10, 但是实际测试出来第二个包的是 7200, 由此可以推断出 pts 和 dts 是本地接口在接收到包以后,再去通过流创建的上下文对包进行了包装给出的数据。同样的, 可以得一个结论, 就是尽量不要阻塞接收包的线程, 这样才能保证不丢包或者是少丢包。同样, 可以得到一个结论, 就是可以通过接收包的时间戳, 来尽量对齐多个不同时间拉流线程中的数据包, 而不是通过 pts 或者是 dts, 通过接收包的时间戳可以尽量对其两个数据相同的数据包( 前提是这两个数据包都及时打上了绝对的时间戳, 同机器上可以定位的更精准, 多机器可能既要考虑时间的同步了 )。