-
Notifications
You must be signed in to change notification settings - Fork 20
Open
Description
你好,jt1078调试时发现如果音频流先来,会导致无法推流。
调试发现 source_utils.go 中 ExtractVideoPacket 方法中强制指定了 index = 0 会导致数据无法推流
stream = utils.NewAVStream(utils.AVMediaTypeVideo, 0, codec, codecData.AnnexBExtraData(), codecData)
func ExtractVideoPacket(codec utils.AVCodecID, key, extractStream bool, data []byte, pts, dts int64, index, timebase int) (utils.AVStream, utils.AVPacket, error) {
var stream utils.AVStream
if utils.AVCodecIdH264 == codec {
//从关键帧中解析出sps和pps
if key && extractStream {
sps, pps, err := libavc.ParseExtraDataFromKeyNALU(data)
if err != nil {
log.Sugar.Errorf("从关键帧中解析sps pps失败 data:%s", hex.EncodeToString(data))
return nil, nil, err
}
codecData, err := utils.NewAVCCodecData(sps, pps)
if err != nil {
log.Sugar.Errorf("解析sps pps失败 data:%s sps:%s, pps:%s", hex.EncodeToString(data), hex.EncodeToString(sps), hex.EncodeToString(pps))
return nil, nil, err
}
stream = utils.NewAVStream(utils.AVMediaTypeVideo, 0, codec, codecData.AnnexBExtraData(), codecData)
}
} else if utils.AVCodecIdH265 == codec {
if key && extractStream {
vps, sps, pps, err := libhevc.ParseExtraDataFromKeyNALU(data)
if err != nil {
log.Sugar.Errorf("从关键帧中解析vps sps pps失败 data:%s", hex.EncodeToString(data))
return nil, nil, err
}
codecData, err := utils.NewHEVCCodecData(vps, sps, pps)
if err != nil {
log.Sugar.Errorf("解析sps pps失败 data:%s vps:%s sps:%s, pps:%s", hex.EncodeToString(data), hex.EncodeToString(vps), hex.EncodeToString(sps), hex.EncodeToString(pps))
return nil, nil, err
}
stream = utils.NewAVStream(utils.AVMediaTypeVideo, 0, codec, codecData.AnnexBExtraData(), codecData)
}
}
packet := utils.NewVideoPacket(data, dts, pts, key, utils.PacketTypeAnnexB, codec, index, timebase)
return stream, packet, nil
}
Metadata
Metadata
Assignees
Labels
No labels