mirror of https://github.com/q191201771/lal.git
(#82) [feat] sdp打包
parent
0aa837591b
commit
32f5465ec9
@ -0,0 +1,75 @@
|
||||
// Copyright 2021, Chef. All rights reserved.
|
||||
// https://github.com/q191201771/lal
|
||||
//
|
||||
// Use of this source code is governed by a MIT-style license
|
||||
// that can be found in the License file.
|
||||
//
|
||||
// Author: Chef (191201771@qq.com)
|
||||
|
||||
package sdp
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
|
||||
"github.com/q191201771/lal/pkg/base"
|
||||
)
|
||||
|
||||
func Pack(vps, sps, pps, asc []byte) (ctx LogicContext, raw []byte, err error) {
|
||||
var hasAudio, hasVideo, isHevc bool
|
||||
|
||||
if sps != nil && pps != nil {
|
||||
hasVideo = true
|
||||
if vps != nil {
|
||||
isHevc = true
|
||||
}
|
||||
}
|
||||
if asc != nil {
|
||||
hasAudio = true
|
||||
}
|
||||
|
||||
if !hasAudio && !hasVideo {
|
||||
err = ErrSdp
|
||||
return
|
||||
}
|
||||
|
||||
sdpStr := fmt.Sprintf(`v=0
|
||||
o=- 0 0 IN IP4 127.0.0.1
|
||||
s=No Name
|
||||
c=IN IP4 127.0.0.1
|
||||
t=0 0
|
||||
a=tool:%s
|
||||
`, base.LalPackSdp)
|
||||
|
||||
streamid := 0
|
||||
|
||||
if hasVideo {
|
||||
if isHevc {
|
||||
|
||||
} else {
|
||||
tmpl := `m=video 0 RTP/AVP 96
|
||||
a=rtpmap:96 H264/90000
|
||||
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=%s,%s; profile-level-id=640016
|
||||
a=control:streamid=%d
|
||||
`
|
||||
sdpStr += fmt.Sprintf(tmpl, base64.StdEncoding.EncodeToString(sps), base64.StdEncoding.EncodeToString(pps), streamid)
|
||||
}
|
||||
|
||||
streamid++
|
||||
}
|
||||
|
||||
if hasAudio {
|
||||
tmpl := `m=audio 0 RTP/AVP 97
|
||||
b=AS:128
|
||||
a=rtpmap:97 MPEG4-GENERIC/44100/2
|
||||
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=%s
|
||||
a=control:streamid=%d
|
||||
`
|
||||
sdpStr += fmt.Sprintf(tmpl, hex.EncodeToString(asc), streamid)
|
||||
}
|
||||
|
||||
raw = []byte(sdpStr)
|
||||
ctx, err = ParseSdp2LogicContext(raw)
|
||||
return
|
||||
}
|
Loading…
Reference in New Issue