illuspas / Node-Media-Server

A Node.js implementation of RTMP/HTTP-FLV/WS-FLV/HLS/DASH/MP4 Media Server
https://www.npmjs.com/package/node-media-server
MIT License
5.95k stars 1.52k forks source link

动态拉流模式下,如果多个客户端播放一个源,在依此关闭时,最后一个关闭后不能准确触发停止拉流进程 #433

Open wangwangtou opened 3 years ago

wangwangtou commented 3 years ago

可能的原因:flv session 中触发的 donePlay事件,传递的sessionid是flv session id,在relay server 中的 onDonePlay 方法中通过id获取 relaySession,只有与第一次打开的flv session id一致的relaySession id。当先关闭第一次打开的flv session时,session有值,players.size >0 不会触发session.end;当后面再关闭其他 flv session时, session 为空,导致不能进入session.end(); https://github.com/illuspas/Node-Media-Server/blob/cd36fec55ceead7b9f9ea3a9ff8fb72dbd497df3/node_flv_session.js#L91 https://github.com/illuspas/Node-Media-Server/blob/master/node_relay_server.js#L144

wangwangtou commented 3 years ago

第一次描述有误,重新测试后,调整了问题描述

chenypgg commented 2 years ago

我也遇到了这个问题,解决办法也有,就是做一个定时任务,每隔两分钟运行一次,定时任务的具体处理过程是循环context.sessions这个Map,然后把session.players.size为0的调用其end()方法结束即可,他这个不结束的话,ffmpeg进行一直都在,占用服务器内存不说也占用着服务器的带宽

yourke commented 2 years ago

我也遇到了这个问题,解决办法也有,就是做一个定时任务,每隔两分钟运行一次,定时任务的具体处理过程是循环context.sessions这个Map,然后把session.players.size为0的调用其end()方法结束即可,他这个不结束的话,ffmpeg进行一直都在,占用服务器内存不说也占用着服务器的带宽

你好,这个有参考代码么,没写过node服务,想改找不到位置。。。