Winlin 73dd8af4c9 HLS: Ignore empty NALU to avoid error. v6.0.65 (#3750) | пре 1 година | |
---|---|---|
.. | ||
LICENSE | пре 2 година | |
README.md | пре 2 година | |
aac.go | пре 1 година | |
bitstream.go | пре 1 година | |
codec.go | пре 1 година | |
h264.go | пре 1 година | |
h265.go | пре 1 година | |
opus.go | пре 1 година | |
util.go | пре 1 година | |
vp8.go | пре 1 година |
如何解析sps/pps/vps 以解析sps为例
//sps原始数据,不带start code(0x00000001)
var rawsps []byte = []byte{0x67,....}
//step1 创建BitStream
bs := codec.NewBitStream(rawsps)
//step2 解析sps
sps := &SPS{}
sps.Decode(bs)
获取视频宽高 以h264为例子
//sps原始数据,以startcode开头(0x00000001)
var rawsps []byte = []byte{0x00,0x00,0x00,0x01,0x67,.....}
w, h := codec.GetH264Resolution(rawsps)
生成Extradata 以h264为例子
//多个sps原始数据,以startcode开头(0x00000001)
var spss [][]byte = [][]byte{
[]byte{0x00,0x00,0x00,0x01,0x67,...},
[]byte{0x00,0x00,0x00,0x01,0x67,...},
....
}
//多个pps原始数据,以startcode开头(0x00000001)
var ppss [][]byte = [][]byte{
[]byte{0x00,0x00,0x00,0x01,0x68,...},
[]byte{0x00,0x00,0x00,0x01,0x68,...},
....
}
extranData := codec.CreateH264AVCCExtradata(spss,ppss)
Extradata转为Annex-B格式的sps,pps 以h264为例子
//一般从flv/mp4格式中获取 extraData
//解析出来多个sps,pps, 且sps pps 都以startcode开头
spss,ppss := codec.CovertExtradata(extraData)
生成H265 extrandata
// H265的extra data 生成过程稍微复杂一些
//创建一个 HEVCRecordConfiguration 对象
hvcc := codec.NewHEVCRecordConfiguration()
//对每一个 sps/pps/vps,调用相应的UpdateSPS,UpdatePPS,UpdateVPS接口
hvcc.UpdateSPS(sps)
hvcc.UpdatePPS(pps)
hvcc.UpdateVPS(vps)
//调用Encode接口生成
extran := hvcc.Encode()
获取对应的sps id/vps id/pps id
//以h264为例子,有四个接口
//sps 以startcode 开头
codec.GetSPSIdWithStartCode(sps)
//sps2 不以startcode 开头
codec.GetSPSId(sps2)
//pps 以startcode 开头
codec.GetPPSIdWithStartCode(pps)
//pps2 不以startcode 开头
codec.GetPPSId(pps2)