Browse Source

测试fmp4

master
SmallChi(Koike) 3 years ago
parent
commit
cea11bc71d
13 changed files with 72 additions and 47 deletions
  1. +1
    -0
      src/JT1078.Gateway.Coordinator/Dtos/HeartbeatRequest.cs
  2. +3
    -1
      src/JT1078.Gateway.InMemoryMQ/JT1078MsgChannel.cs
  3. +8
    -0
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Configs/nlog.Unix.config
  4. +8
    -3
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/JT1078FMp4NormalMsgHostedService.cs
  5. +2
    -2
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/JT1078FlvNormalMsgHostedService.cs
  6. +3
    -3
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/MessageDispatchHostedService.cs
  7. +1
    -2
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/wwwroot/flv_demo/index.html
  8. +17
    -19
      src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/wwwroot/fmp4_demo/index.html
  9. +2
    -2
      src/JT1078.Gateway/JT1078.Gateway.csproj
  10. +5
    -5
      src/JT1078.Gateway/JT1078TcpServer.cs
  11. +10
    -0
      src/JT1078.Gateway/Jobs/JT1078HeartbeatJob.cs
  12. +10
    -8
      src/JT1078.Gateway/Jobs/JT1078SessionClearJob.cs
  13. +2
    -2
      src/JT1078.Gateway/Jobs/JT1078SessionNoticeJob.cs

+ 1
- 0
src/JT1078.Gateway.Coordinator/Dtos/HeartbeatRequest.cs View File

@@ -14,5 +14,6 @@ namespace JT1078.Gateway.Coordinator.Dtos
public int UdpSessionCount { get; set; } public int UdpSessionCount { get; set; }
public int HttpSessionCount { get; set; } public int HttpSessionCount { get; set; }
public int WebSocketSessionCount { get; set; } public int WebSocketSessionCount { get; set; }
public List<string> Sims { get; set; }
} }
} }

+ 3
- 1
src/JT1078.Gateway.InMemoryMQ/JT1078MsgChannel.cs View File

@@ -11,7 +11,9 @@ namespace JT1078.Gateway.InMemoryMQ


public JT1078MsgChannel() public JT1078MsgChannel()
{ {
Channel = System.Threading.Channels.Channel.CreateUnbounded<(string, byte[])>();
Channel = System.Threading.Channels.Channel.CreateUnbounded<(string, byte[])>(new UnboundedChannelOptions {
SingleWriter=true,
});
} }
} }
} }

+ 8
- 0
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Configs/nlog.Unix.config View File

@@ -12,6 +12,12 @@
<target name="JT1078FlvNormalMsgHostedService" xsi:type="File" <target name="JT1078FlvNormalMsgHostedService" xsi:type="File"
fileName="${Directory}/JT1078FlvNormalMsgHostedService.${shortdate}.log" fileName="${Directory}/JT1078FlvNormalMsgHostedService.${shortdate}.log"
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/>
<target name="JT1078FMp4NormalMsgHostedService" xsi:type="File"
fileName="${Directory}/JT1078FMp4NormalMsgHostedService.${shortdate}.log"
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/>
<target name="JT1078HlsNormalMsgHostedService" xsi:type="File"
fileName="${Directory}/JT1078HlsNormalMsgHostedService.${shortdate}.log"
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/>
<target name="JT1078TcpServer" xsi:type="File" <target name="JT1078TcpServer" xsi:type="File"
fileName="${Directory}/JT1078TcpServer.${shortdate}.log" fileName="${Directory}/JT1078TcpServer.${shortdate}.log"
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/>
@@ -34,6 +40,8 @@
<rules> <rules>
<logger name="*" minlevel="Error" writeTo="all"/> <logger name="*" minlevel="Error" writeTo="all"/>
<logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078FlvNormalMsgHostedService" minlevel="Trace" writeTo="JT1078FlvNormalMsgHostedService"/> <logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078FlvNormalMsgHostedService" minlevel="Trace" writeTo="JT1078FlvNormalMsgHostedService"/>
<logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078FMp4NormalMsgHostedService" minlevel="Trace" writeTo="JT1078FMp4NormalMsgHostedService"/>
<logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078HlsNormalMsgHostedService" minlevel="Trace" writeTo="JT1078HlsNormalMsgHostedService"/>
<logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer"/> <logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer"/>
<logger name="JT1078.Gateway.JT1078UdpServer" minlevel="Trace" writeTo="JT1078UdpServer"/> <logger name="JT1078.Gateway.JT1078UdpServer" minlevel="Trace" writeTo="JT1078UdpServer"/>
<logger name="JT1078.Gateway.JT1078Logging" minlevel="Trace" writeTo="JT1078Logging"/> <logger name="JT1078.Gateway.JT1078Logging" minlevel="Trace" writeTo="JT1078Logging"/>


+ 8
- 3
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/JT1078FMp4NormalMsgHostedService.cs View File

@@ -69,7 +69,7 @@ namespace JT1078.Gateway.TestNormalHosting.Services
if (memoryCache.TryGetValue(key, out byte[] moov)) if (memoryCache.TryGetValue(key, out byte[] moov))
{ {
var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber); var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber);
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList();
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend && (w.RTPVideoType == Metadata.RTPVideoType.Http_FMp4 || w.RTPVideoType == Metadata.RTPVideoType.Ws_FMp4)).ToList();
if (firstHttpSessions.Count > 0) if (firstHttpSessions.Count > 0)
{ {
try try
@@ -93,17 +93,22 @@ namespace JT1078.Gateway.TestNormalHosting.Services
Logger.LogError(ex, $"{data.SIM},{true},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); Logger.LogError(ex, $"{data.SIM},{true},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}");
} }
} }
var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList();
var otherHttpSessions = httpSessions.Where(w => w.FirstSend && (w.RTPVideoType == Metadata.RTPVideoType.Http_FMp4 || w.RTPVideoType == Metadata.RTPVideoType.Ws_FMp4)).ToList();
if (otherHttpSessions.Count > 0) if (otherHttpSessions.Count > 0)
{ {
try try
{ {
//foreach (var session in otherHttpSessions)
//{
// var fmp4VideoBuffer = FM4Encoder.EncoderOtherVideoBox(nalus);
// HttpSessionManager.SendAVData(session, fmp4VideoBuffer, false);
//}
var firstNALU = nalus.FirstOrDefault(); var firstNALU = nalus.FirstOrDefault();
if (firstNALU == null) if (firstNALU == null)
{ {
continue; continue;
} }
if(!avFrameDict.TryGetValue(firstNALU.GetKey(),out List<H264NALU> cacheNALU))
if (!avFrameDict.TryGetValue(firstNALU.GetKey(), out List<H264NALU> cacheNALU))
{ {
cacheNALU = new List<H264NALU>(); cacheNALU = new List<H264NALU>();
avFrameDict.TryAdd(firstNALU.GetKey(), cacheNALU); avFrameDict.TryAdd(firstNALU.GetKey(), cacheNALU);


+ 2
- 2
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/JT1078FlvNormalMsgHostedService.cs View File

@@ -60,7 +60,7 @@ namespace JT1078.Gateway.TestNormalHosting.Services
memoryCache.Set(key, data); memoryCache.Set(key, data);
} }
var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber); var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber);
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList();
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend && (w.RTPVideoType== Metadata.RTPVideoType.Http_Flv || w.RTPVideoType == Metadata.RTPVideoType.Ws_Flv)).ToList();
if (firstHttpSessions.Count > 0) if (firstHttpSessions.Count > 0)
{ {
if (memoryCache.TryGetValue(key, out JT1078Package idata)) if (memoryCache.TryGetValue(key, out JT1078Package idata))
@@ -79,7 +79,7 @@ namespace JT1078.Gateway.TestNormalHosting.Services
} }
} }
} }
var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList();
var otherHttpSessions = httpSessions.Where(w => w.FirstSend && (w.RTPVideoType == Metadata.RTPVideoType.Http_Flv || w.RTPVideoType == Metadata.RTPVideoType.Ws_Flv)).ToList();
if (otherHttpSessions.Count > 0) if (otherHttpSessions.Count > 0)
{ {
try try


+ 3
- 3
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/Services/MessageDispatchHostedService.cs View File

@@ -14,7 +14,7 @@ namespace JT1078.Gateway.TestNormalHosting.Services
/// <summary> /// <summary>
/// 消费分发服务。同时分发给hls和flv /// 消费分发服务。同时分发给hls和flv
/// </summary> /// </summary>
public class MessageDispatchHostedService : BackgroundService
public class MessageDispatchHostedService : BackgroundService
{ {
private IJT1078MsgConsumer JT1078MsgConsumer; private IJT1078MsgConsumer JT1078MsgConsumer;
private readonly MessageDispatchDataService messageDispatchDataService; private readonly MessageDispatchDataService messageDispatchDataService;
@@ -33,8 +33,8 @@ namespace JT1078.Gateway.TestNormalHosting.Services
var merge = JT1078.Protocol.JT1078Serializer.Merge(package); var merge = JT1078.Protocol.JT1078Serializer.Merge(package);
if (merge != null) if (merge != null)
{ {
//await messageDispatchDataService.HlsChannel.Writer.WriteAsync(merge, stoppingToken);
//await messageDispatchDataService.FlvChannel.Writer.WriteAsync(merge, stoppingToken);
await messageDispatchDataService.HlsChannel.Writer.WriteAsync(merge, stoppingToken);
await messageDispatchDataService.FlvChannel.Writer.WriteAsync(merge, stoppingToken);
await messageDispatchDataService.FMp4Channel.Writer.WriteAsync(merge, stoppingToken); await messageDispatchDataService.FMp4Channel.Writer.WriteAsync(merge, stoppingToken);
} }
}); });


+ 1
- 2
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/wwwroot/flv_demo/index.html View File

@@ -15,8 +15,7 @@
var flvPlayer = flvjs.createPlayer({ var flvPlayer = flvjs.createPlayer({
type: 'flv', type: 'flv',
isLive: true, isLive: true,
//url: "http://127.0.0.1:15555/live.flv?sim=1901305037&channel=3&token=123456"
url: "ws://127.0.0.1:15555/live.flv?sim=1901305037&channel=3&token=123456"
url: "http://127.0.0.1:15555/live.flv?sim=19019000001&channel=3&token=123456"
}); });
flvPlayer.attachMediaElement(player); flvPlayer.attachMediaElement(player);
flvPlayer.load(); flvPlayer.load();


+ 17
- 19
src/JT1078.Gateway.Tests/JT1078.Gateway.TestNormalHosting/wwwroot/fmp4_demo/index.html View File

@@ -18,7 +18,7 @@
// *** USER PARAMETERS *** // *** USER PARAMETERS ***
var verbose = true; var verbose = true;
// var verbose = true; // enable for saturating the console .. // var verbose = true; // enable for saturating the console ..
var buffering_sec = 1; // use some reasonable value
var buffering_sec = 3; // use some reasonable value
var buffering_sec_seek = buffering_sec * 0.9; var buffering_sec_seek = buffering_sec * 0.9;
// ..seek the stream if it's this much away or // ..seek the stream if it's this much away or
// from the last available timestamp // from the last available timestamp
@@ -118,8 +118,7 @@
// } // }
// keep the latency to minimum // keep the latency to minimum
let latest = stream_live.duration; let latest = stream_live.duration;
if ((stream_live.duration >= buffering_sec) &&
((latest - stream_live.currentTime) > buffering_sec_seek)) {
if ((stream_live.duration >= buffering_sec) && ((latest - stream_live.currentTime) > buffering_sec_seek)) {
console.log("seek from ", stream_live.currentTime, " to ", latest); console.log("seek from ", stream_live.currentTime, " to ", latest);
df = (stream_live.duration - stream_live.currentTime); // this much away from the last available frame df = (stream_live.duration - stream_live.currentTime); // this much away from the last available frame
if ((df > buffering_sec_seek)) { if ((df > buffering_sec_seek)) {
@@ -127,35 +126,35 @@
stream_live.currentTime = seek_to; stream_live.currentTime = seek_to;
} }
} }
data = arr;
if (!stream_started) {
if (!source_buffer.updating) {
if (verbose) { console.log("Streaming started: ", memview[0], memview[1], memview[2], memview[3], memview[4]); } if (verbose) { console.log("Streaming started: ", memview[0], memview[1], memview[2], memview[3], memview[4]); }
stream_started = true; stream_started = true;
source_buffer.appendBuffer(data);
source_buffer.appendBuffer(arr);
cc = cc + 1; cc = cc + 1;
return;
}else{
queue.push(arr); // add to the end
} }
queue.push(data); // add to the end
if (verbose) { console.log("queue push:", queue.length); } if (verbose) { console.log("queue push:", queue.length); }
} }


function loadPacket() { // called when source_buffer is ready for more function loadPacket() { // called when source_buffer is ready for more
if (!source_buffer.updating) { // really, really ready if (!source_buffer.updating) { // really, really ready
if (queue.length > 0) { if (queue.length > 0) {
inp = queue.shift(); // pop from the beginning
var inp = queue.shift(); // pop from the beginning
if (verbose) { console.log("queue pop:", queue.length); } if (verbose) { console.log("queue pop:", queue.length); }
var memview = new Uint8Array(inp); var memview = new Uint8Array(inp);
if (verbose) { console.log(" ==> writing buffer with", memview[0], memview[1], memview[2], memview[3]); } if (verbose) { console.log(" ==> writing buffer with", memview[0], memview[1], memview[2], memview[3]); }
source_buffer.appendBuffer(inp); source_buffer.appendBuffer(inp);
cc = cc + 1; cc = cc + 1;
} }
else { // the queue runs empty, so the next packet is fed directly
stream_started = false;
}
}
else { // so it was not?
// else { // the queue runs empty, so the next packet is fed directly
// stream_started = false;
// }
} }
// else {
// // so it was not?

// }
} }


function opened() { // MediaSource object is ready to go function opened() { // MediaSource object is ready to go
@@ -167,14 +166,13 @@
source_buffer.mode = 'sequence'; source_buffer.mode = 'sequence';
// source_buffer.mode = 'segments'; // source_buffer.mode = 'segments';
source_buffer.addEventListener("updateend", loadPacket); source_buffer.addEventListener("updateend", loadPacket);

ws = new WebSocket("ws://127.0.0.1:15555/live.mp4?sim=1901305037&channel=1&token=123456"); //创建WebSocket连接
ws = new WebSocket("ws://127.0.0.1:81/live/JT1078_7.live.mp4"); //创建WebSocket连接
ws.binaryType = 'arraybuffer'; ws.binaryType = 'arraybuffer';
ws.onmessage = function (e) { ws.onmessage = function (e) {
//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据 //当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据
//console.log(e.data); //console.log(e.data);
//putPacket(e.data);
source_buffer.appendBuffer(e.data);
putPacket(e.data);
//source_buffer.appendBuffer(e.data);
} }
} }




+ 2
- 2
src/JT1078.Gateway/JT1078.Gateway.csproj View File

@@ -39,9 +39,9 @@
</ItemGroup> </ItemGroup>


<ItemGroup> <ItemGroup>
<PackageReference Include="JT1078.Hls" Version="1.1.0-preview3" />
<PackageReference Include="JT1078.Hls" Version="1.1.0-preview4" />
<PackageReference Include="JT1078.FMp4" Version="1.0.0-preview4" /> <PackageReference Include="JT1078.FMp4" Version="1.0.0-preview4" />
<PackageReference Include="JT1078.Flv" Version="1.1.0" />
<PackageReference Include="JT1078.Flv" Version="1.1.1-preview1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
<PackageReference Include="System.IO.Pipelines" Version="5.0.1" /> <PackageReference Include="System.IO.Pipelines" Version="5.0.1" />
</ItemGroup> </ItemGroup>


+ 5
- 5
src/JT1078.Gateway/JT1078TcpServer.cs View File

@@ -231,8 +231,8 @@ namespace JT1078.Gateway
} }
catch (Exception ex) catch (Exception ex)
{ {
LogLogger.LogError($"[Error Parse 1]:{package1.ToHexString()}");
Logger.LogError(ex, $"[Error Parse 1]:{package1.ToHexString()}");
LogLogger.LogError($"[Error Parse 1]:{fixedHeaderInfo.SIM}-{package1.ToHexString()}");
Logger.LogError(ex, $"[Error Parse 1]:{fixedHeaderInfo.SIM}-{package1.ToHexString()}");
} }
finally finally
{ {
@@ -260,7 +260,7 @@ namespace JT1078.Gateway
seqReader.Advance(fixedHeaderInfo.TotalSize); seqReader.Advance(fixedHeaderInfo.TotalSize);
if (LogLogger.IsEnabled(LogLevel.Trace)) if (LogLogger.IsEnabled(LogLevel.Trace))
{ {
LogLogger.LogTrace($"===>{package.ToHexString()}");
LogLogger.LogTrace($"===>{fixedHeaderInfo.SIM}-{package.ToHexString()}");
} }
try try
{ {
@@ -269,8 +269,8 @@ namespace JT1078.Gateway
} }
catch (Exception ex) catch (Exception ex)
{ {
LogLogger.LogError($"[Error Parse 2]:{package.ToHexString()}");
Logger.LogError(ex, $"[Error Parse 2]:{package.ToHexString()}");
LogLogger.LogError($"[Error Parse 2]:{fixedHeaderInfo.SIM}-{package.ToHexString()}");
Logger.LogError(ex, $"[Error Parse 2]:{fixedHeaderInfo.SIM}-{package.ToHexString()}");
} }
finally finally
{ {


+ 10
- 0
src/JT1078.Gateway/Jobs/JT1078HeartbeatJob.cs View File

@@ -65,6 +65,16 @@ namespace JT1078.Gateway.Jobs
writer.WriteNumber(nameof(SessionManager.UdpSessionCount), SessionManager.UdpSessionCount); writer.WriteNumber(nameof(SessionManager.UdpSessionCount), SessionManager.UdpSessionCount);
writer.WriteNumber(nameof(HttpSessionManager.HttpSessionCount), HttpSessionManager.HttpSessionCount); writer.WriteNumber(nameof(HttpSessionManager.HttpSessionCount), HttpSessionManager.HttpSessionCount);
writer.WriteNumber(nameof(HttpSessionManager.WebSocketSessionCount), HttpSessionManager.WebSocketSessionCount); writer.WriteNumber(nameof(HttpSessionManager.WebSocketSessionCount), HttpSessionManager.WebSocketSessionCount);
writer.WriteStartArray("Sims");
var sessions = HttpSessionManager.GetAll();
if (sessions != null)
{
foreach(var session in sessions)
{
writer.WriteStringValue($"{session.Sim}_{session.ChannelNo}_{session.SessionId}");
}
}
writer.WriteEndArray();
writer.WriteEndObject(); writer.WriteEndObject();
} }
json = Encoding.UTF8.GetString(stream.ToArray()); json = Encoding.UTF8.GetString(stream.ToArray());


+ 10
- 8
src/JT1078.Gateway/Jobs/JT1078SessionClearJob.cs View File

@@ -50,27 +50,29 @@ namespace JT1078.Gateway.Jobs
try try
{ {
var hasSessions = HttpSessionManager.GetAll().Where(m => DateTime.Now.Subtract(m.StartTime).TotalSeconds > 60 && m.RTPVideoType == Metadata.RTPVideoType.Http_Hls).ToList();//所有http 的 hls短链接 var hasSessions = HttpSessionManager.GetAll().Where(m => DateTime.Now.Subtract(m.StartTime).TotalSeconds > 60 && m.RTPVideoType == Metadata.RTPVideoType.Http_Hls).ToList();//所有http 的 hls短链接
foreach (var item in hasSessions)
foreach (var item in hasSessions)
{ {
var key = $"{item.Sim}_{item.ChannelNo}"; var key = $"{item.Sim}_{item.ChannelNo}";
HttpSessionManager.TryRemove(item.SessionId);//超过120s未访问。 HttpSessionManager.TryRemove(item.SessionId);//超过120s未访问。
//清楚所有hls文件 //清楚所有hls文件
string filepath = Path.Combine(Configuration.HlsRootDirectory, key); string filepath = Path.Combine(Configuration.HlsRootDirectory, key);
if (Directory.Exists(filepath)) {
if (Directory.Exists(filepath))
{
Directory.Delete(filepath,true); Directory.Delete(filepath,true);
} }
hLSPathStorage.RemoveAllPath(key);//移除所有缓存 hLSPathStorage.RemoveAllPath(key);//移除所有缓存
if (logger.IsEnabled(LogLevel.Debug)) {
logger.LogDebug($"{System.Text.Json.JsonSerializer.Serialize(item)},清session");
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"{System.Text.Json.JsonSerializer.Serialize(item)},清session");
} }
var hasTcpSession = HttpSessionManager.GetAllBySimAndChannelNo(item.Sim.TrimStart('0'), item.ChannelNo).Any(m => m.IsWebSocket);//是否存在tcp的 socket链接
var httpFlvSession = HttpSessionManager.GetAllBySimAndChannelNo(item.Sim.TrimStart('0'), item.ChannelNo).Any(m => m.RTPVideoType == Metadata.RTPVideoType.Http_Flv);//是否存在http的 flv长链接
string sim = item.Sim.TrimStart('0');
var hasTcpSession = HttpSessionManager.GetAllBySimAndChannelNo(sim, item.ChannelNo).Any(m => m.IsWebSocket);//是否存在tcp的 socket链接
var httpFlvSession = HttpSessionManager.GetAllBySimAndChannelNo(sim, item.ChannelNo).Any(m => m.RTPVideoType == Metadata.RTPVideoType.Http_Flv);//是否存在http的 flv长链接
if (!hasTcpSession && !httpFlvSession) if (!hasTcpSession && !httpFlvSession)
{ {
//不存在websocket链接和http-flv链接时,主动断开设备链接以节省流量 //不存在websocket链接和http-flv链接时,主动断开设备链接以节省流量
//移除tcpsession,断开设备链接 //移除tcpsession,断开设备链接
if(SessionManager!=null) SessionManager.RemoveByTerminalPhoneNo(item.Sim.TrimStart('0'));
if(SessionManager!=null) SessionManager.RemoveByTerminalPhoneNo(sim);
} }
} }
} }


+ 2
- 2
src/JT1078.Gateway/Jobs/JT1078SessionNoticeJob.cs View File

@@ -50,9 +50,9 @@ namespace JT1078.Gateway.Jobs
} }
} }
} }
catch
catch(Exception ex)
{ {
logger.LogError(ex, "");
} }
}, stoppingToken); }, stoppingToken);
} }


Loading…
Cancel
Save