mirror of
https://github.com/Monibuca/plugin-webrtc.git
synced 2025-11-03 03:24:05 +08:00
增加对PCMA的支持
This commit is contained in:
4
go.mod
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
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
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user