programmerZhou
programmerZhou
我测试过程中也发现了,使用vlc播放,只能播放前面几帧,最后读出flv的每个tag,发现tag的时间戳都是一样的,跟踪代码发现demp/rtmp_player.go 文件的第53行和58行中的第二个参数应该填message.AbsoluteTimestamp而不是message.Timestamp。 下面这行代码是第53行的代码。 > flvFile.WriteVideoTag(message.Buf.Bytes(), message.Timestamp)
@hy05190134 是不是需要调整我没有仔细看实现代码,可能不调整会有一些不同步吧。但是使用absoluteTimestamp,保存下来的flv文件是可以被vlc播放的。 而使用timestamp(该字段可能存的是时间戳增量),在存成flv文件后会导致flv tag的时间戳错误,从而导致flv文件无法播放。下面是我打印的flv文件的tag header信息(使用timestamp)。 header timestamp is 231962, length of data is 4819, tag type is 9, tag data size is 4819 header timestamp is 231962, length of data...
@hy05190134 使用absoluteTimestamp的flv文件的tag header信息 header timestamp is 11793892, length of data is 657, tag type is 9, tag data size is 657 header timestamp is 11793932, length of data is 2231,...
@hy05190134 为什么使用timestamp会导致所有tag的时间戳相同的原因。 1. github.com/zhangpeihao/goflv/flv.go文件中关于WriteTag的实现: ``` golang 116 func (flvFile *File) WriteTag(data []byte, tagType byte, timestamp uint32) (err error) { 117 if timestamp < flvFile.lastTimestamp { 118 timestamp = flvFile.lastTimestamp 119...
@hy05190134 强转让其溢出即是取模。 ``` golang return uint32(time.Now().UnixNano()/int64(1000000)) ``` ``` golang return uint32(time.Now().UnixNano()/int64(1000000) % 0x100000000) ``` 上面这两行等价。 类似的写法还有 ``` golang // 对一个数除2 a := x / 2 // 也可写成 a = x...