From df1db951c512a58110171d046ef367789df02733 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 5 Nov 2021 11:36:03 +0100 Subject: Support RTMPS --- server/tests/api/live/index.ts | 1 + server/tests/api/live/live-rtmps.ts | 146 ++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 server/tests/api/live/live-rtmps.ts (limited to 'server/tests/api') diff --git a/server/tests/api/live/index.ts b/server/tests/api/live/index.ts index e6bcef49f..105416b8d 100644 --- a/server/tests/api/live/index.ts +++ b/server/tests/api/live/index.ts @@ -1,6 +1,7 @@ import './live-constraints' import './live-socket-messages' import './live-permanent' +import './live-rtmps' import './live-save-replay' import './live-views' import './live' diff --git a/server/tests/api/live/live-rtmps.ts b/server/tests/api/live/live-rtmps.ts new file mode 100644 index 000000000..378e6df3c --- /dev/null +++ b/server/tests/api/live/live-rtmps.ts @@ -0,0 +1,146 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +import * as chai from 'chai' +import { VideoPrivacy } from '@shared/models' +import { + buildAbsoluteFixturePath, + cleanupTests, + createSingleServer, + PeerTubeServer, + sendRTMPStream, + setAccessTokensToServers, + setDefaultVideoChannel, + stopFfmpeg, + testFfmpegStreamError, + waitUntilLivePublishedOnAllServers +} from '../../../../shared/extra-utils' + +const expect = chai.expect + +describe('Test live RTMPS', function () { + let server: PeerTubeServer + let rtmpUrl: string + let rtmpsUrl: string + + async function createLiveWrapper () { + const liveAttributes = { + name: 'live', + channelId: server.store.channel.id, + privacy: VideoPrivacy.PUBLIC, + saveReplay: false + } + + const { uuid } = await server.live.create({ fields: liveAttributes }) + + const live = await server.live.get({ videoId: uuid }) + const video = await server.videos.get({ id: uuid }) + + return Object.assign(video, live) + } + + before(async function () { + this.timeout(120000) + + server = await createSingleServer(1) + + // Get the access tokens + await setAccessTokensToServers([ server ]) + await setDefaultVideoChannel([ server ]) + + await server.config.updateCustomSubConfig({ + newConfig: { + live: { + enabled: true, + allowReplay: true, + transcoding: { + enabled: false + } + } + } + }) + + rtmpUrl = 'rtmp://' + server.hostname + ':' + server.rtmpPort + '/live' + rtmpsUrl = 'rtmps://' + server.hostname + ':' + server.rtmpsPort + '/live' + }) + + it('Should enable RTMPS endpoint only', async function () { + this.timeout(240000) + + await server.kill() + await server.run({ + live: { + rtmp: { + enabled: false + }, + rtmps: { + enabled: true, + port: server.rtmpsPort, + key_file: buildAbsoluteFixturePath('rtmps.key'), + cert_file: buildAbsoluteFixturePath('rtmps.cert') + } + } + }) + + { + const liveVideo = await createLiveWrapper() + + expect(liveVideo.rtmpUrl).to.not.exist + expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl) + + const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey }) + await testFfmpegStreamError(command, true) + } + + { + const liveVideo = await createLiveWrapper() + + const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey }) + await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) + await stopFfmpeg(command) + } + }) + + it('Should enable both RTMP and RTMPS', async function () { + this.timeout(240000) + + await server.kill() + await server.run({ + live: { + rtmp: { + enabled: true, + port: server.rtmpPort + }, + rtmps: { + enabled: true, + port: server.rtmpsPort, + key_file: buildAbsoluteFixturePath('rtmps.key'), + cert_file: buildAbsoluteFixturePath('rtmps.cert') + } + } + }) + + { + const liveVideo = await createLiveWrapper() + + expect(liveVideo.rtmpUrl).to.equal(rtmpUrl) + expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl) + + const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey }) + await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) + await stopFfmpeg(command) + } + + { + const liveVideo = await createLiveWrapper() + + const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey }) + await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) + await stopFfmpeg(command) + } + }) + + after(async function () { + await cleanupTests([ server ]) + }) +}) -- cgit v1.2.3