mirror of
https://github.com/bluenviron/mediamtx
synced 2025-02-13 09:58:50 +00:00
hls client: add tests for previous commmit
This commit is contained in:
parent
c13e33b1ed
commit
5f976f3f38
@ -98,7 +98,7 @@ type testHLSServer struct {
|
|||||||
s *http.Server
|
s *http.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestHLSServer(encrypted bool) (*testHLSServer, error) {
|
func newTestHLSServer(ca string) (*testHLSServer, error) {
|
||||||
ln, err := net.Listen("tcp", "localhost:5780")
|
ln, err := net.Listen("tcp", "localhost:5780")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -109,6 +109,11 @@ func newTestHLSServer(encrypted bool) (*testHLSServer, error) {
|
|||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
|
|
||||||
|
segment := "segment.ts"
|
||||||
|
if ca == "segment with query" {
|
||||||
|
segment = "segment.ts?key=val"
|
||||||
|
}
|
||||||
|
|
||||||
router.GET("/stream.m3u8", func(ctx *gin.Context) {
|
router.GET("/stream.m3u8", func(ctx *gin.Context) {
|
||||||
cnt := `#EXTM3U
|
cnt := `#EXTM3U
|
||||||
#EXT-X-VERSION:3
|
#EXT-X-VERSION:3
|
||||||
@ -116,24 +121,25 @@ func newTestHLSServer(encrypted bool) (*testHLSServer, error) {
|
|||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-MEDIA-SEQUENCE:0
|
#EXT-X-MEDIA-SEQUENCE:0
|
||||||
#EXTINF:2,
|
#EXTINF:2,
|
||||||
segment.ts
|
` + segment + "\n"
|
||||||
`
|
|
||||||
|
|
||||||
ctx.Writer.Header().Set("Content-Type", `application/x-mpegURL`)
|
ctx.Writer.Header().Set("Content-Type", `application/x-mpegURL`)
|
||||||
io.Copy(ctx.Writer, bytes.NewReader([]byte(cnt)))
|
io.Copy(ctx.Writer, bytes.NewReader([]byte(cnt)))
|
||||||
})
|
})
|
||||||
|
|
||||||
router.GET("/segment.ts", func(ctx *gin.Context) {
|
router.GET("/segment.ts", func(ctx *gin.Context) {
|
||||||
ctx.Writer.Header().Set("Content-Type", `video/MP2T`)
|
if ca == "segment with query" && ctx.Query("key") != "val" {
|
||||||
mux := astits.NewMuxer(context.Background(), ctx.Writer)
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Writer.Header().Set("Content-Type", `video/MP2T`)
|
||||||
|
|
||||||
|
mux := astits.NewMuxer(context.Background(), ctx.Writer)
|
||||||
mux.AddElementaryStream(astits.PMTElementaryStream{
|
mux.AddElementaryStream(astits.PMTElementaryStream{
|
||||||
ElementaryPID: 256,
|
ElementaryPID: 256,
|
||||||
StreamType: astits.StreamTypeH264Video,
|
StreamType: astits.StreamTypeH264Video,
|
||||||
})
|
})
|
||||||
|
|
||||||
mux.SetPCRPID(256)
|
mux.SetPCRPID(256)
|
||||||
|
|
||||||
mux.WriteTables()
|
mux.WriteTables()
|
||||||
|
|
||||||
enc, _ := h264.EncodeAnnexB([][]byte{
|
enc, _ := h264.EncodeAnnexB([][]byte{
|
||||||
@ -160,7 +166,7 @@ segment.ts
|
|||||||
|
|
||||||
ts.s = &http.Server{Handler: router}
|
ts.s = &http.Server{Handler: router}
|
||||||
|
|
||||||
if encrypted {
|
if ca == "tls" {
|
||||||
go func() {
|
go func() {
|
||||||
serverCertFpath, err := writeTempFile(serverCert)
|
serverCertFpath, err := writeTempFile(serverCert)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -188,16 +194,20 @@ func (ts *testHLSServer) close() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestClient(t *testing.T) {
|
func TestClient(t *testing.T) {
|
||||||
for _, mode := range []string{"plain", "tls"} {
|
for _, ca := range []string{
|
||||||
t.Run(mode, func(t *testing.T) {
|
"plain",
|
||||||
ts, err := newTestHLSServer(mode == "tls")
|
"tls",
|
||||||
|
"segment with query",
|
||||||
|
} {
|
||||||
|
t.Run(ca, func(t *testing.T) {
|
||||||
|
ts, err := newTestHLSServer(ca)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ts.close()
|
defer ts.close()
|
||||||
|
|
||||||
packetRecv := make(chan struct{})
|
packetRecv := make(chan struct{})
|
||||||
|
|
||||||
prefix := "http"
|
prefix := "http"
|
||||||
if mode == "tls" {
|
if ca == "tls" {
|
||||||
prefix = "https"
|
prefix = "https"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user