使用 ffmpeg/nginx RTMP 的待机/离线流图像

使用 ffmpeg/nginx RTMP 的待机/离线流图像

当没有传入流需要重播时,是否有办法编写脚本 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 播放器,会自动在您输入的图像和直播开始之间切换,反之亦然。尽情享受吧。

相关内容