linkpi_firmware_history/rootfs/link/web/stream.php

1180 lines
39 KiB
PHP
Raw Normal View History

2024-02-15 22:07:30 +01:00
<?php
include( "head.php" );
include( "groupList.php" );
?>
<div id="alert"></div>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="title">
<h3 class="panel-title">
<cn>全局配置</cn>
<en>Overall config</en>
</h3>
</div>
<div class="panel-body">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4"></div>
<div class="col-md-1 col-xs-2">HTTP</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">HLS</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">RTMP</div>
<div class="col-md-1 col-xs-2">RTSP</div>
<div class="col-md-1 col-xs-4">
<cn>组播</cn>
<en>multicast</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>组播地址</cn>
<en>multicast addr</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>推流</cn>
<en>push</en>
</div>
<div class="col-md-2 col-xs-4"></div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div class="row" id="all">
<div class="col-md-2 col-xs-4 text-center">
<cn>主流协议</cn>
<en>Main protocol</en>
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="http" class="switch form-control">
</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="hls" class="switch form-control">
</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="rtmp" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["rtspAuth"])
2024-02-15 22:07:30 +01:00
{
?>
<input type="checkbox" zcfg="rtsp.enable" class="switch form-control">
<?php
}
else
{
?>
<input type="checkbox" zcfg="rtsp" class="switch form-control">
<?php
}
?>
</div>
<div class="col-md-1 col-xs-4">
<input type="checkbox" zcfg="udp.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="udp.ip*:*udp.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="push.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4 text-center"></div>
</div>
<div class="row" id="all_sub" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4 text-center">
<cn>辅流协议</cn>
<en>Sub protocol</en>
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="http" class="switch form-control">
</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="hls" class="switch form-control">
</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="rtmp" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["rtspAuth"])
2024-02-15 22:07:30 +01:00
{
?>
<input type="checkbox" zcfg="rtsp.enable" class="switch form-control">
<?php
}
else
{
?>
<input type="checkbox" zcfg="rtsp" class="switch form-control">
<?php
}
?>
</div>
<div class="col-md-1 col-xs-4">
<input type="checkbox" zcfg="udp.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="udp.ip*:*udp.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="push.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4 text-center"></div>
</div>
<hr/>
<div class="row text-center">
<button id="setAll" type="button" class="btn btn-warning">
<cn>应用到本地</cn>
<en>Save to local</en>
</button>
<button id="setAllGroup" type="button" class="btn btn-warning">
<cn>应用到群组</cn>
<en>Save to group</en>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-12">
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab"><i class="fa fa-upload"></i> <cn>码流配置</cn><en>Stream config</en></a>
</li>
<li role="presentation"><a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab"><i class="fa fa-gear"></i> <cn>TS设置</cn><en>TS Config</en></a>
</li>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<li role="presentation"><a href="#tab3" aria-controls="tab3" role="tab" data-toggle="tab"><i class="fa fa-gear"></i> <cn>HLS设置</cn><en>HLS Config</en></a>
</li>
<?php
}
2024-02-15 22:07:35 +01:00
if($hardware["function"]["rtspAuth"])
2024-02-15 22:07:30 +01:00
{
?>
<li role="presentation"><a href="#tab8" aria-controls="tab8" role="tab" data-toggle="tab"><i class="fa fa-gear"></i> <cn>RTSP设置</cn><en>RTSP Config</en></a>
</li>
<?php
}
2024-02-15 22:07:35 +01:00
if($hardware["function"]["srt"])
2024-02-15 22:07:30 +01:00
{
?>
<li role="presentation"><a href="#tab7" aria-controls="tab7" role="tab" data-toggle="tab"><i class="fa fa-gear"></i> <cn>SRT设置</cn><en>SRT Config</en></a>
</li>
<?php
}
2024-02-15 22:07:35 +01:00
if($hardware["function"]["ndi"])
2024-02-15 22:07:30 +01:00
{
?>
<li role="presentation"><a href="#tab6" aria-controls="tab6" role="tab" data-toggle="tab"><i class="fa fa-gear"></i> <cn>NDI设置</cn><en>NDI Config</en></a>
</li>
<?php
}
?>
<li role="presentation"><a href="#tab5" aria-controls="tab5" role="tab" data-toggle="tab"><i class="fa fa-podcast"></i> <cn>推流设置</cn><en>Push Config</en></a>
</li>
<li role="presentation"><a href="#tab4" aria-controls="tab4" role="tab" data-toggle="tab"><i class="fa fa-link"></i> <cn>播放地址</cn><en>Play URL</en></a>
</li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade in active thin" id="tab1">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-1 col-xs-2">HTTP</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">HLS</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">RTMP</div>
<div class="col-md-1 col-xs-2">RTSP</div>
<div class="col-md-1 col-xs-4">
<cn>组播</cn>
<en>multicast</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>组播地址</cn>
<en>multicast addr</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>推流</cn>
<en>push</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>推流地址</cn>
<en>push url</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templet">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream.http" class="switch form-control">
</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream.hls" class="switch form-control">
</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream.rtmp" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["rtspAuth"])
2024-02-15 22:07:30 +01:00
{
?>
<input type="checkbox" zcfg="[#].stream.rtsp.enable" class="switch form-control">
<?php
}
else
{
?>
<input type="checkbox" zcfg="[#].stream.rtsp" class="switch form-control">
<?php
}
?>
</div>
<div class="col-md-1 col-xs-4">
<input type="checkbox" zcfg="[#].stream.udp.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream.udp.ip*:*[#].stream.udp.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2"><input type="checkbox" zcfg="[#].stream.push.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream.push.path" type="text" class="form-control">
</div>
</div>
<div class="row" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
</div>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream2.http" class="switch form-control">
</div>
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["hls"])
2024-02-15 22:07:30 +01:00
{
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream2.hls" class="switch form-control">
</div>
<?php
}
?>
<div class="col-md-1 col-xs-2">
<input type="checkbox" zcfg="[#].stream2.rtmp" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<?php
2024-02-15 22:07:35 +01:00
if($hardware["function"]["rtspAuth"])
2024-02-15 22:07:30 +01:00
{
?>
<input type="checkbox" zcfg="[#].stream2.rtsp.enable" class="switch form-control">
<?php
}
else
{
?>
<input type="checkbox" zcfg="[#].stream2.rtsp" class="switch form-control">
<?php
}
?>
</div>
<div class="col-md-1 col-xs-4">
<input type="checkbox" zcfg="[#].stream2.udp.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream2.udp.ip*:*[#].stream2.udp.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2"><input type="checkbox" zcfg="[#].stream2.push.enable" class="switch form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream2.push.path" type="text" class="form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab8">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>用户名</cn>
<en>username</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>密码</cn>
<en>password</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>启用认证</cn>
<en>auth</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>开关</cn>
<en>enable</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetRTSP">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream.rtsp.name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream.rtsp.passwd" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.rtsp.auth" type="checkbox" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.rtsp.enable" type="checkbox" class="switch form-control">
</div>
</div>
<div class="row" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream2.rtsp.name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream2.rtsp.passwd" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream2.rtsp.auth" type="checkbox" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream2.rtsp.enable" type="checkbox" class="switch form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab2">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-1 col-xs-2">
PID
</div>
<div class="col-md-1 col-xs-2">
TTL
</div>
<div class="col-md-1 col-xs-2">
<cn>流控</cn>
<en>Flow Control</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>带宽</cn>
<en>Bandwidth</en>
</div>
<div class="col-md-1 col-xs-2">
PMT PID
</div>
<div class="col-md-1 col-xs-2">
ServiceID
</div>
<div class="col-md-1 col-xs-2">
StreamID
</div>
<div class="col-md-1 col-xs-2">
NetworkID
</div>
<div class="col-md-1 col-xs-2">
PacketSize
</div>
<div class="col-md-1 col-xs-2">
RTP Head
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetTS">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].ts.mpegts_start_pid" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.udp.ttl" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.udp.flowCtrl" type="checkbox" class="switch form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.udp.bandwidth" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].ts.mpegts_pmt_start_pid" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].ts.mpegts_service_id" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-1">
<input zcfg="[#].ts.mpegts_transport_stream_id" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].ts.mpegts_original_network_id" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2">
<select zcfg="[#].ts.tsSize" class="form-control">
<option value="188">188</option>
<option value="376">376</option>
<option value="564">564</option>
<option value="752">752</option>
<option value="940">940</option>
<option value="1128">1128</option>
<option value="1316">1316</option>
<option value="1504">1504</option>
<option value="1692">1692</option>
<option value="1880">1880</option>
</select>
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.udp.rtp" type="checkbox" class="switch form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab3">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>分片长度()</cn><en>Segment length(s)</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>列表长度</cn><en>List length</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>URL前缀</cn>
<en>Base url</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>文件名后缀</cn>
<en>Name format</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetHLS">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].hls.hls_time" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].hls.hls_list_size" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].hls.hls_base_url" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].hls.hls_filename" type="text" class="form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in thin2" id="tab7">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-4 col-xs-8">
<div class="row">
<div class="col-md-4">
<cn>模式</cn><en>Mode</en>
</div>
<div class="col-md-4">
IP
</div>
<div class="col-md-4">
StreamID
</div>
</div>
</div>
<div class="col-md-1 col-xs-2">
<cn>端口</cn><en>Port</en>
</div>
<div class="col-md-1 col-xs-2">
<cn>延时</cn><en>Latency</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>密码</cn><en>Password</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>开关</cn>
<en>enable</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetSRT">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-4 col-xs-8">
<div class="row">
<div class="col-md-4">
<select zcfg="[#].stream.srt.mode" class="form-control">
<option value="caller">caller</option>
<option value="listener">listener</option>
<option value="rendezvous">rendezvous</option>
</select>
</div>
<div class="col-md-4">
<input zcfg="[#].stream.srt.ip" type="text" class="form-control">
</div>
<div class="col-md-4">
<input zcfg="[#].stream.srt.streamid" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream.srt.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2 text-center">
<input zcfg="[#].stream.srt.latency" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4 text-center">
<input zcfg="[#].stream.srt.passwd" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4 text-center">
<input zcfg="[#].stream.srt.enable" type="checkbox" class="switch form-control">
</div>
</div>
<div class="row" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
</div>
<div class="col-md-4 col-xs-8">
<div class="row">
<div class="col-md-4">
<select zcfg="[#].stream2.srt.mode" class="form-control">
<option value="caller">caller</option>
<option value="listener">listener</option>
<option value="rendezvous">rendezvous</option>
</select>
</div>
<div class="col-md-4">
<input zcfg="[#].stream2.srt.ip" type="text" class="form-control">
</div>
<div class="col-md-4">
<input zcfg="[#].stream2.srt.streamid" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-md-1 col-xs-2">
<input zcfg="[#].stream2.srt.port" type="text" class="form-control">
</div>
<div class="col-md-1 col-xs-2 text-center">
<input zcfg="[#].stream2.srt.latency" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4 text-center">
<input zcfg="[#].stream2.srt.passwd" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4 text-center">
<input zcfg="[#].stream2.srt.enable" type="checkbox" class="switch form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab6">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>NDI名称</cn><en>NDI name</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>NDI分组</cn><en>NDI group</en>
</div>
<div class="col-md-2 col-xs-4">
<cn>开关</cn>
<en>enable</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetNDI">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].ndi.name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].ndi.group" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4 text-center">
<input zcfg="[#].ndi.enable" type="checkbox" class="switch form-control">
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab5">
<div class="row text-center" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
<cn>频道名称</cn>
<en>channel name</en>
</div>
<div class="col-md-2 col-xs-4">
HEVC ID
</div>
<div class="col-md-2 col-xs-4">
Format
</div>
2024-02-15 22:07:48 +01:00
<div class="col-md-2 col-xs-4">
<cn>兼容性</cn>
<en>Compatible</en>
</div>
2024-02-15 22:07:30 +01:00
<div class="col-md-2 col-xs-4">
<cn>上传速度</cn>
<en>Push speed</en>
</div>
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetPUSH">
<div class="row">
<div class="col-md-2 col-xs-4">
<input zcfg="[#].name" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream.push.hevc_id" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<select zcfg="[#].stream.push.format" class="form-control">
<option value="auto">auto</option>
<option value="flv">flv</option>
<option value="rtsp">rtsp</option>
<option value="rtp">rtp</option>
<option value="mpegts">mpegts</option>
<option value="rtp_mpegts">rtp_mpegts</option>
</select>
</div>
2024-02-15 22:07:48 +01:00
<div class="col-md-2 col-xs-4">
<select class="form-control" zcfg="[#].stream.push.flvflags">
<option cn="标准" en="normal" value=""></option>
<option value="ext_header">enhanced-rtmp</option>
</select>
</div>
2024-02-15 22:07:30 +01:00
<div class="col-md-2 col-xs-4 text-center">
<span class="info"></span>kb/s
</div>
</div>
<div class="row" style="margin-top: 5px;">
<div class="col-md-2 col-xs-4">
</div>
<div class="col-md-2 col-xs-4">
<input zcfg="[#].stream2.push.hevc_id" type="text" class="form-control">
</div>
<div class="col-md-2 col-xs-4">
<select zcfg="[#].stream2.push.format" class="form-control">
<option value="auto">auto</option>
<option value="flv">flv</option>
<option value="rtsp">rtsp</option>
<option value="rtp">rtp</option>
<option value="mpegts">mpegts</option>
<option value="rtp_mpegts">rtp_mpegts</option>
</select>
</div>
2024-02-15 22:07:48 +01:00
<div class="col-md-2 col-xs-4">
<select class="form-control" zcfg="[#].stream2.push.flvflags">`
<option cn="标准" en="normal" value=""></option>
<option value="ext_header">enhanced-rtmp</option>
</select>
</div>
2024-02-15 22:07:30 +01:00
<div class="col-md-2 col-xs-4 text-center">
<span class="info"></span>kb/s
</div>
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div role="tabpanel" class="tab-pane fade in" id="tab4">
<div class="row text-center" style="margin-top: 5px;">
2024-02-15 22:07:33 +01:00
<div class="col-md-2 col-xs-2">
2024-02-15 22:07:30 +01:00
<cn>频道名称</cn>
<en>channel name</en>
</div>
2024-02-15 22:07:39 +01:00
<div class="col-md-5 col-xs-5">
<div class="row">
<div class="col-md-3 col-xs-3">
<cn>主码流标识</cn>
<en>Main Suffix</en>
</div>
<div class="col-md-9 col-xs-9">
<cn>主流地址</cn>
<en>Main URL</en>
</div>
</div>
2024-02-15 22:07:33 +01:00
</div>
2024-02-15 22:07:39 +01:00
<div class="col-md-5 col-xs-5">
<div class="row">
<div class="col-md-3 col-xs-3">
<cn>辅码流标识</cn>
<en>Sub Suffix</en>
</div>
<div class="col-md-9 col-xs-9">
<cn>辅流地址</cn>
<en>Sub URL</en>
</div>
</div>
2024-02-15 22:07:33 +01:00
</div>
2024-02-15 22:07:30 +01:00
</div>
<hr style="margin-top:5px; margin-bottom: 10px;"/>
<div id="templetURL">
<div class="row">
2024-02-15 22:07:33 +01:00
<div class="col-md-2 col-xs-2">
2024-02-15 22:07:30 +01:00
<input zcfg="[#].name" type="text" class="form-control">
</div>
2024-02-15 22:07:39 +01:00
<div class="col-md-5 col-xs-5">
<div class="row">
<div class="col-md-3 col-xs-3">
<input zcfg="[#].mainSuffix" type="text" class="form-control">
</div>
<div class="col-md-9 col-xs-9">
<div class="well well-sm mainUrl"></div>
</div>
</div>
2024-02-15 22:07:33 +01:00
</div>
2024-02-15 22:07:39 +01:00
<div class="col-md-5 col-xs-5">
<div class="row">
<div class="col-md-3 col-xs-3">
<input zcfg="[#].subSuffix" type="text" class="form-control">
</div>
<div class="col-md-9 col-xs-9">
<div class="well well-sm subUrl"></div>
</div>
</div>
2024-02-15 22:07:33 +01:00
</div>
2024-02-15 22:07:30 +01:00
</div>
<hr style="margin-top:10px; margin-bottom: 10px;"/>
</div>
</div>
<div class="row">
<div class="col-md-12 text-center">
<button id="save" type="button" class="btn btn-warning col-xs-4 col-xs-offset-4 col-md-2 col-md-offset-5">
<cn>保存</cn>
<en>Save</en>
</button>
</div>
</div>
</div>
</div>
</div>
<script src="vendor/switch/bootstrap-switch.js"></script>
<script src="js/zcfg.js"></script>
<script>
$( function () {
navIndex( 2 );
var config;
var epg;
var all = new Object();
var all_sub = new Object();
2024-02-15 22:07:35 +01:00
var rtspAuth = <?php echo $hardware["function"]["rtspAuth"]?1:-1; ?>;
2024-02-15 22:07:30 +01:00
$.fn.bootstrapSwitch.defaults.size = 'small';
$.fn.bootstrapSwitch.defaults.onColor = 'warning';
$.getJSON( "config/config.json", function ( result ) {
config = result;
var enabledChn = new Array();
for(var i=0;i<config.length;i++){
if(config[i].hasOwnProperty("stream") && rtspAuth>0) {
var rtsp = config[i].stream.rtsp;
if(!rtsp.hasOwnProperty("enable")) {
rtsp = {
enable : rtsp,
name: "admin",
passwd: "admin",
auth: false
}
config[i].stream.rtsp = rtsp;
}
2024-02-15 22:07:33 +01:00
if(!config[i].stream.hasOwnProperty("suffix"))
config[i].stream.suffix = "stream"+config[i].id;
2024-02-15 22:07:30 +01:00
}
if(config[i].hasOwnProperty("stream2") && rtspAuth>0) {
var rtsp = config[i].stream2.rtsp;
if(!rtsp.hasOwnProperty("enable")) {
rtsp = {
enable : rtsp,
name: "admin",
passwd: "admin",
auth: false
}
config[i].stream2.rtsp = rtsp;
}
2024-02-15 22:07:33 +01:00
if(!config[i].stream2.hasOwnProperty("suffix"))
config[i].stream2.suffix = "sub"+config[i].id;
2024-02-15 22:07:30 +01:00
}
if(config[i].enable || config[i].enable2)
enabledChn.push(config[i]);
}
2024-02-15 22:07:33 +01:00
2024-02-15 22:07:30 +01:00
zctemplet( "#templet", enabledChn );
zctemplet( "#templetTS", enabledChn );
zctemplet( "#templetHLS", enabledChn );
zctemplet( "#templetPUSH", enabledChn );
zctemplet( "#templetNDI", enabledChn );
zctemplet( "#templetSRT", enabledChn );
if(rtspAuth > 0)
zctemplet( "#templetRTSP", enabledChn );
setTimeout(getSpeed,2000);
// $( ".switch" ).bootstrapSwitch();
all.http = config[ 0 ].stream.http;
all.hls = config[ 0 ].stream.hls;
all.rtmp = config[ 0 ].stream.rtmp;
all.rtsp = config[ 0 ].stream.rtsp;
all.udp = new Object();
all.udp.enable = config[ 0 ].stream.udp.enable;
all.udp.ip = config[ 0 ].stream.udp.ip;
all.udp.port = config[ 0 ].stream.udp.port + "+";
all.push = new Object();
all.push.enable = config[ 0 ].stream.push.enable;
zcfg( "#all", all );
all_sub.http = config[ 0 ].stream2.http;
all_sub.hls = config[ 0 ].stream2.hls;
all_sub.rtmp = config[ 0 ].stream2.rtmp;
all_sub.rtsp = config[ 0 ].stream2.rtsp;
all_sub.udp = new Object();
all_sub.udp.enable = config[ 0 ].stream2.udp.enable;
all_sub.udp.ip = config[ 0 ].stream2.udp.ip;
all_sub.udp.port = config[ 0 ].stream2.udp.port + "+";
all_sub.push = new Object();
all_sub.push.enable = config[ 0 ].stream2.push.enable;
zcfg( "#all_sub", all_sub );
} );
function getSpeed()
{
rpc( "enc.getPushSpeed", null, function ( data ) {
for(var i=0;i<data.length;i++)
{
$("#templetPUSH .info").eq(i).text(data[i]);
}
setTimeout(getSpeed,2000);
} );
}
2024-02-15 22:07:39 +01:00
function getport(list,type){
2024-02-15 22:07:30 +01:00
if(list[2]!=list[0])
return ":"+list[2];
else if(list[1]!=list[0])
return ":"+list[1];
2024-02-15 22:07:39 +01:00
else if((type == "http" && list[0] == 80) || (type == "rtsp" && list[0] == 554) || (type == "rtmp" && list[0] == 1935) || (type == "httpts" && list[0] == 8090))
return "";
else
return ":"+list[0];
2024-02-15 22:07:30 +01:00
}
function transURL(str)
{
var ret="";
var ip=window.location.hostname;
var list=str.split("|");
for(var i=0;i<list.length;i++){
var url=list[i];
if(url.indexOf("http")==0){
if(url.indexOf("///live")>0){
2024-02-15 22:07:39 +01:00
var port=getport(portCfg.http,"http");
var port2=getport(portCfg.httpts,"httpts");
2024-02-15 22:07:30 +01:00
if(port!="" || port2!=""){
if(port!="" && port2=="")
port2=":"+portCfg.httpts[0];
url=url.replace("///live","//"+ip+port2);
}else{
url=url.replace("///","//"+ip+"/");
}
}
else{
2024-02-15 22:07:39 +01:00
var port=getport(portCfg.http,"http");
url=url.replace("///","//"+ip+port+"/");
2024-02-15 22:07:30 +01:00
}
}
else if(url.indexOf("rtmp")==0){
2024-02-15 22:07:39 +01:00
var port=getport(portCfg.rtmp,"rtmp");
url=url.replace("///","//"+ip+port+"/");
2024-02-15 22:07:30 +01:00
}
else if(url.indexOf("rtsp")==0){
2024-02-15 22:07:39 +01:00
var port=getport(portCfg.rtsp,"rtsp");
2024-02-15 22:07:30 +01:00
if(url.indexOf("@/") > 0)
2024-02-15 22:07:39 +01:00
url=url.replace("@/","@"+ip+port+"/");
2024-02-15 22:07:30 +01:00
else
2024-02-15 22:07:39 +01:00
url=url.replace("///","//"+ip+port+"/");
2024-02-15 22:07:30 +01:00
}
else if(url.indexOf("srt")==0){
url=url.replace("//:","//"+ip+":");
}
ret+=url+"<br>";
}
return ret;
}
function getEPG() {
rpc( "enc.getEPG", null, function ( data ) {
epg = data;
zctemplet( "#templetURL", epg );
for(var i=0;i<epg.length;i++){
$(".mainUrl").eq(i).html(transURL(epg[i].url));
$(".subUrl").eq(i).html(transURL(epg[i].url2));
}
} );
}
var portCfg;
$.getJSON( "config/port.json", function ( result ) {
portCfg = result;
getEPG();
} );
$( "#setAll" ).click( function ( e ) {
var ipPlus = false;
var portPlus = false;
var ipBase1 = "";
var ipBase2 = 0;
var portBase = 0;
if ( all.udp.ip.indexOf( "+" ) > 0 ) {
var ip = all.udp.ip;
ip = ip.replace( "+", "" );
ipPlus = true;
var n = ip.lastIndexOf( "." );
ipBase1 = ip.substr( 0, n + 1 );
ipBase2 = Number( ip.substr( n + 1 ) );
}
if ( all.udp.port.toString().indexOf( "+" ) > 0 ) {
var port = all.udp.port;
port = Number( port.replace( "+", "" ) );
portPlus = true;
portBase = Number( port );
}
var ipPlus_2 = false;
var portPlus_2 = false;
var ipBase1_2 = "";
var ipBase2_2 = 0;
var portBase_2 = 0;
if ( all_sub.udp.ip.indexOf( "+" ) > 0 ) {
var ip = all_sub.udp.ip;
ip = ip.replace( "+", "" );
ipPlus_2 = true;
var n = ip.lastIndexOf( "." );
ipBase1_2 = ip.substr( 0, n + 1 );
ipBase2_2 = Number( ip.substr( n + 1 ) );
}
if ( all_sub.udp.port.toString().indexOf( "+" ) > 0 ) {
var port = all_sub.udp.port;
port = Number( port.replace( "+", "" ) );
portPlus_2 = true;
portBase_2 = Number( port );
}
for ( var i = 0; i < config.length; i++ ) {
$.extend( true, config[ i ].stream, all );
$.extend( true, config[ i ].stream2, all_sub );
if ( ipPlus ) {
config[ i ].stream.udp.ip = ipBase1 + ( ipBase2 + i );
}
if ( portPlus ) {
config[ i ].stream.udp.port = portBase + i;
}
if ( ipPlus_2 ) {
config[ i ].stream2.udp.ip = ipBase1_2 + ( ipBase2_2 + i );
}
if ( portPlus_2 ) {
config[ i ].stream2.udp.port = portBase_2 + i;
}
}
$( "#save" ).click();
} );
$( "#save" ).click( function ( e ) {
var enabledChn = new Array();
for(var i=0;i<config.length;i++) {
if(config[i].enable || config[i].enable2)
enabledChn.push(config[i]);
2024-02-15 22:07:33 +01:00
for(var j=0;j<epg.length;j++) {
if(config[i].id == epg[j].id) {
if(epg[j].hasOwnProperty("mainSuffix") && epg[j].hasOwnProperty("subSuffix")) {
config[i].stream.suffix = epg[j].mainSuffix;
config[i].stream2.suffix = epg[j].subSuffix;
break;
}
}
}
2024-02-15 22:07:30 +01:00
}
zcfg( "#templet", enabledChn );
if(rtspAuth > 0) {
zctemplet( "#templetRTSP", enabledChn );
}
2024-02-15 22:07:33 +01:00
2024-02-15 22:07:30 +01:00
rpc( "enc.update", [ JSON.stringify( config, null, 2 ) ], function ( data ) {
if ( typeof ( data.error ) != "undefined" ) {
htmlAlert( "#alert", "danger", "<cn>保存设置失败!</cn><en>Save config failed!</en>", "", 2000 );
} else {
htmlAlert( "#alert", "success", "<cn>保存设置成功!</cn><en>Save config success!</en>", "", 2000 );
}
getEPG();
} );
} );
$( "#setAllGroup" ).click( function ( e ) {
grpShow();
} );
$( "#grpSync" ).click( function ( e ) {
var ipPlus = false;
var portPlus = false;
var ipBase1 = "";
var ipBase2 = 0;
var portBase = 0;
if ( all.udp.ip.indexOf( "+" ) > 0 ) {
var ip = all.udp.ip;
ip = ip.replace( "+", "" );
ipPlus = true;
var n = ip.lastIndexOf( "." );
ipBase1 = ip.substr( 0, n + 1 );
ipBase2 = Number( ip.substr( n + 1 ) );
}
if ( all.udp.port.toString().indexOf( "+" ) > 0 ) {
var port = all.udp.port;
port = Number( port.replace( "+", "" ) );
portPlus = true;
portBase = Number( port );
}
var ipPlus_2 = false;
var portPlus_2 = false;
var ipBase1_2 = "";
var ipBase2_2 = 0;
var portBase_2 = 0;
if ( all_sub.udp.ip.indexOf( "+" ) > 0 ) {
var ip = all_sub.udp.ip;
ip = ip.replace( "+", "" );
ipPlus_2 = true;
var n = ip.lastIndexOf( "." );
ipBase1_2 = ip.substr( 0, n + 1 );
ipBase2_2 = Number( ip.substr( n + 1 ) );
}
if ( all_sub.udp.port.toString().indexOf( "+" ) > 0 ) {
var port = all_sub.udp.port;
port = Number( port.replace( "+", "" ) );
portPlus_2 = true;
portBase_2 = Number( port );
}
var cfg = new Object();
var cfg2 = new Object();
var map = new Object();
$.extend( cfg, all );
$.extend( cfg2, all_sub );
var k = grpList.length;
for ( var i = 0; i < grpList.length; i++ ) {
grpSetStatus( i, 0 );
if ( ipPlus ) {
cfg.udp.ip = ipBase1 + ( ipBase2 + i * 20 ) + "+";
}
if ( portPlus ) {
cfg.udp.port = ( portBase + i * 20 ) + "+";
}
if ( ipPlus_2 ) {
cfg2.udp.ip = ipBase1_2 + ( ipBase2_2 + i * 20 ) + "+";
}
if ( portPlus_2 ) {
cfg2.udp.port = ( portBase_2 + i * 20 ) + "+";
}
map.cfg=cfg;
map.cfg2=cfg2;
rpc( "group.callSetStream", [ grpList[ i ].mac, map ], function ( data, index ) {
grpSetStatus( index, data ? 1 : 2 );
k--;
if ( k == 0 ) {
$.getJSON( "config/config.json", function ( result ) {
config = result;
zcfg( "#templet", config );
} );
}
}, i );
}
} );
} );
</script>
<?php
include( "foot.php" );
?>