Browse Source

增加对PCMA的支持

v4
langhuihui 4 years ago
parent
commit
d432bbf948
  1. 4
      go.mod
  2. 3
      go.sum
  3. 23
      main.go

4
go.mod

@ -3,8 +3,8 @@ module github.com/Monibuca/plugin-webrtc
go 1.13
require (
github.com/Monibuca/engine/v2 v2.1.7
github.com/Monibuca/plugin-rtp v0.0.0-20200531020026-1b12ef72f221
github.com/Monibuca/engine/v2 v2.2.0
github.com/Monibuca/plugin-rtp v1.0.0
github.com/pion/rtcp v1.2.1
github.com/pion/transport v0.10.1 // indirect
github.com/pion/turn/v2 v2.0.4 // indirect

3
go.sum

@ -4,8 +4,10 @@ github.com/Monibuca/engine/v2 v2.1.0 h1:pHeDCEFDusKFsZLpconYj8U5LCaWApnjd+yQRHYg
github.com/Monibuca/engine/v2 v2.1.0/go.mod h1:34EYjjV15G6myuHOKaJkO7y5tJ1Arq/NfC9Weacr2mc=
github.com/Monibuca/engine/v2 v2.1.7 h1:/2k2Uupufizo0jiIkdYJsdHIf6VNvpLIxVVeIGGQgD4=
github.com/Monibuca/engine/v2 v2.1.7/go.mod h1:34EYjjV15G6myuHOKaJkO7y5tJ1Arq/NfC9Weacr2mc=
github.com/Monibuca/engine/v2 v2.2.0/go.mod h1:34EYjjV15G6myuHOKaJkO7y5tJ1Arq/NfC9Weacr2mc=
github.com/Monibuca/plugin-rtp v0.0.0-20200531020026-1b12ef72f221 h1:WBC0eLB7J3PXWZiu4cr9kdcNAkR/74jf0+7zkYDzwZQ=
github.com/Monibuca/plugin-rtp v0.0.0-20200531020026-1b12ef72f221/go.mod h1:62NoacApn7++z5wQnr9ktSfn+vVZL0eSvbD/EqoSHoM=
github.com/Monibuca/plugin-rtp v1.0.0/go.mod h1:0xkNm23a/BjVnEMz1zXyOqfEjoVmGe3PJqPNF1KyFGc=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
@ -38,6 +40,7 @@ github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9 h1:tbuodU
github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA=
github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
github.com/mask-pp/rtp-ps v1.0.0/go.mod h1:jCxsZ2G7z/jX+aqFypEWMePnhNrfnUiXUEKm6Xp0vgU=
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=

23
main.go

@ -82,6 +82,7 @@ type WebRTC struct {
RTP
*PeerConnection
RemoteAddr string
audioTrack *Track
videoTrack *Track
m MediaEngine
s SettingEngine
@ -95,9 +96,18 @@ func (rtc *WebRTC) Play(streamPath string) bool {
var sub Subscriber
sub.ID = rtc.RemoteAddr
sub.Type = "WebRTC"
var lastTimeStamp uint32
var lastTimeStampV, lastTiimeStampA uint32
sub.OnData = func(packet *avformat.SendPacket) error {
if packet.Type == avformat.FLV_TAG_TYPE_AUDIO {
var s uint32
if lastTiimeStampA > 0 {
s = packet.Timestamp - lastTiimeStampA
}
lastTiimeStampA = packet.Timestamp
rtc.audioTrack.WriteSample(media.Sample{
Data: packet.Payload[1:],
Samples: s * 8,
})
return nil
}
if packet.IsSequence {
@ -105,10 +115,10 @@ func (rtc *WebRTC) Play(streamPath string) bool {
rtc.payloader.SPS = sub.SPS
} else {
var s uint32
if lastTimeStamp > 0 {
s = packet.Timestamp - lastTimeStamp
if lastTimeStampV > 0 {
s = packet.Timestamp - lastTimeStampV
}
lastTimeStamp = packet.Timestamp
lastTimeStampV = packet.Timestamp
rtc.videoTrack.WriteSample(media.Sample{
Data: packet.Payload,
Samples: s * 90,
@ -282,7 +292,7 @@ func run() {
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="+pli[:2]+"001f",
DefaultPayloadTypeH264,
&rtc.payloader))
//m.RegisterCodec(NewRTPPCMUCodec(DefaultPayloadTypePCMU, 8000))
rtc.m.RegisterCodec(NewRTPPCMACodec(DefaultPayloadTypePCMA, 8000))
rtc.s.SetNAT1To1IPs([]string{config.PublicIP}, ICECandidateTypeHost)
rtc.api = NewAPI(WithMediaEngine(rtc.m), WithSettingEngine(rtc.s))
peerConnection, err := rtc.api.NewPeerConnection(Configuration{
@ -325,6 +335,9 @@ func run() {
if rtc.videoTrack, err = rtc.NewTrack(DefaultPayloadTypeH264, 8, "video", "monibuca"); err != nil {
return
}
if rtc.audioTrack, err = rtc.NewTrack(DefaultPayloadTypePCMA, 9, "audio", "monibuca"); err != nil {
return
}
if _, err = rtc.AddTrack(rtc.videoTrack); err != nil {
return
}

Loading…
Cancel
Save