mirror of https://github.com/q191201771/lal.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
// 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
|
|
}
|