hls, webrtc: add FromStream / ToStream (#3752)
Some checks failed
code_lint / golangci_lint (push) Has been cancelled
code_lint / mod_tidy (push) Has been cancelled
code_lint / api_docs (push) Has been cancelled
code_test / test_64 (push) Has been cancelled
code_test / test_32 (push) Has been cancelled
code_test / test_highlevel (push) Has been cancelled

This commit is contained in:
Alessandro Ros 2024-09-09 12:59:23 +02:00 committed by GitHub
parent 7b01f48d40
commit 6a38c87a5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
32 changed files with 1776 additions and 1689 deletions

View file

@ -17,6 +17,7 @@ import (
"github.com/bluenviron/mediamtx/internal/defs"
"github.com/bluenviron/mediamtx/internal/externalcmd"
"github.com/bluenviron/mediamtx/internal/protocols/webrtc"
"github.com/bluenviron/mediamtx/internal/protocols/whip"
"github.com/bluenviron/mediamtx/internal/stream"
"github.com/bluenviron/mediamtx/internal/test"
"github.com/bluenviron/mediamtx/internal/unit"
@ -26,6 +27,10 @@ import (
"github.com/stretchr/testify/require"
)
func uint16Ptr(v uint16) *uint16 {
return &v
}
func checkClose(t *testing.T, closeFunc func() error) {
require.NoError(t, closeFunc())
}
@ -228,7 +233,7 @@ func TestServerOptionsICEServer(t *testing.T) {
require.Equal(t, http.StatusNoContent, res.StatusCode)
iceServers, err := webrtc.LinkHeaderUnmarshal(res.Header["Link"])
iceServers, err := whip.LinkHeaderUnmarshal(res.Header["Link"])
require.NoError(t, err)
require.Equal(t, []pwebrtc.ICEServer{{
@ -290,17 +295,25 @@ func TestServerPublish(t *testing.T) {
su, err := url.Parse("http://myuser:mypass@localhost:8886/teststream/whip?param=value")
require.NoError(t, err)
wc := &webrtc.WHIPClient{
wc := &whip.Client{
HTTPClient: hc,
URL: su,
Log: test.NilLogger,
}
tracks, err := wc.Publish(context.Background(), test.FormatH264, nil)
track := &webrtc.OutgoingTrack{
Caps: pwebrtc.RTPCodecCapability{
MimeType: pwebrtc.MimeTypeH264,
ClockRate: 90000,
SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f",
},
}
err = wc.Publish(context.Background(), []*webrtc.OutgoingTrack{track})
require.NoError(t, err)
defer checkClose(t, wc.Close)
err = tracks[0].WriteRTP(&rtp.Packet{
err = track.WriteRTP(&rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -337,7 +350,7 @@ func TestServerPublish(t *testing.T) {
return nil
})
err = tracks[0].WriteRTP(&rtp.Packet{
err = track.WriteRTP(&rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -565,7 +578,7 @@ func TestServerRead(t *testing.T) {
defer tr.CloseIdleConnections()
hc := &http.Client{Transport: tr}
wc := &webrtc.WHIPClient{
wc := &whip.Client{
HTTPClient: hc,
URL: u,
Log: test.NilLogger,
@ -602,9 +615,20 @@ func TestServerRead(t *testing.T) {
require.NoError(t, err)
defer checkClose(t, wc.Close)
pkt, err := tracks[0].ReadRTP()
require.NoError(t, err)
require.Equal(t, ca.outRTPPayload, pkt.Payload)
done := make(chan struct{})
tracks[0].OnPacketRTP = func(pkt *rtp.Packet) {
select {
case <-done:
default:
require.Equal(t, ca.outRTPPayload, pkt.Payload)
close(done)
}
}
wc.StartReading()
<-done
})
}
}
@ -847,7 +871,7 @@ func TestServerPatchNotFound(t *testing.T) {
offer, err := pc.CreateOffer(nil)
require.NoError(t, err)
frag, err := webrtc.ICEFragmentMarshal(offer.SDP, []*pwebrtc.ICECandidateInit{{
frag, err := whip.ICEFragmentMarshal(offer.SDP, []*pwebrtc.ICECandidateInit{{
Candidate: "mycandidate",
SDPMLineIndex: uint16Ptr(0),
}})