当没有传入流需要重播时,是否有办法编写脚本 NGINX RTMP 来显示离线/待机视频或静态图像?
这个想法是,当没有传入的 RTMP 流(ffmpeg、开放广播软件、其他流媒体软件)主动流式传输内容时,我希望 NGINX 向连接的观看者显示待机/离线视频或图像。然后,当用户开始流式传输时,NGINX 将删除待机视频/图像并开始将流媒体重新广播到连接的客户端。
RTMP 模块是否内置了此支持?如果没有,是否可以使用事件系统启动/停止本地 ffmpeg 实例以流式传输待机并在实际流开始时将其终止?
谢谢。
答案1
将其放在<head>
您托管播放器的部分中:
<script type="text/javascript" src="http://cdn.clappr.io/latest/clappr.min.js"></script>
然后把它放在你的<body>
<div id="player" style="float: left; width: 75%; height: 85vh;">
<script>
var targetPlayerElement = "#player"; //player element that it spawns on
var offlineImage = "INSERT IMG URL HERE"; //offline image
var streamURL = "http://YOUR IP HERE/live/";
checkLive();
var isLive = false;
function checkLive() {
var player;
console.log("Checking stream status...");
$.ajax({
url: streamURL, //stream url
success: function(data){
if(!isLive)
{
$(targetPlayerElement).empty();
isLive = true;
player = new Clappr.Player({source: streamURL, parentId: targetPlayerElement, autoPlay: "true", width: "100%", height: "100%", maxBufferLength: 3, mediacontrol: {seekbar: "#7a17ff", buttons: "#ff1a68"}, actualLiveTime: true, playbackNotSupportedMessage: 'Please try on a different browser', useHardwareVideoDecoder: false,});
console.log("Stream is running; creating player");
}
},
error: function(data){
if(isLive)
{
isLive = false;
$(targetPlayerElement).empty();
$(targetPlayerElement).html("<img src='"+ offlineImage + "'alt='offline' width='100%' height='100%'/>");
}
if(!isLive)
$(targetPlayerElement).html("<img src='"+ offlineImage + "'alt='offline' width='100%' height='100%'/>");
},
})
setTimeout(checkLive, 5000);
}
</script>
</div>
这是朋友为我制作的直播脚本。它使用 Clappr 播放器,会自动在您输入的图像和直播开始之间切换,反之亦然。尽情享受吧。