175 lines
5.4 KiB
PHP
175 lines
5.4 KiB
PHP
<?php
|
|
include("head.php");
|
|
?>
|
|
<cn>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title">
|
|
<cn>功能说明</cn>
|
|
<en>Function Description</en>
|
|
</h3>
|
|
</div>
|
|
<div class="panel-body">
|
|
|
|
<p>编码器本身的接口同步性已经在出厂时校准过,大多数情况下无需额外调节。但是如果输入输出设备链路比较复杂,或外设本身存在同步性问题,可以通过下面的参数进行微调。</p>
|
|
<p>由于视频接口的延迟是固定的,额外增加视频缓冲的代价较高,以下调节都是针对音频接口的。</p>
|
|
<P><strong>时间戳偏移:</strong>仅影响串流输出时的音频时间戳偏移,如果该设备只用于编码,那么调节这个参数是最精确高效的。</P>
|
|
<P><strong>硬件延迟:</strong>在音频接口增加额外的缓冲,使其产生延迟,主要针对解码场景或输入混音等功能。</P>
|
|
<P><strong>帧:</strong>通常情况下, 一个音频帧的时长为21.3ms</P>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</cn>
|
|
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title">
|
|
<cn>输入同步调节</cn>
|
|
<en>Input Synchronization</en>
|
|
</h3>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div>
|
|
<div class="row text-center" style="margin-top: 5px;">
|
|
<div class="col-md-2 col-xs-4">
|
|
<cn>接口名称</cn>
|
|
<en>Interface name</en>
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<cn>时间戳偏移</cn>
|
|
<en>Timestamp offset</en>(ms)
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<cn>硬件延迟(帧)</cn>
|
|
<en>Hardwa delay(frame)</en>
|
|
</div>
|
|
</div>
|
|
<hr style="margin-top:5px; margin-bottom: 10px;" />
|
|
</div>
|
|
<div id="templetInput">
|
|
<div class="row">
|
|
<div class="col-md-2 col-xs-4">
|
|
<input zcfg="[#].name" type="text" disabled="disabled" class="form-control">
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<input zcfg="[#].delay" class="slider" type="text" data-slider-min="-500" data-slider-max="500" data-slider-step="1" />
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<input zcfg="[#].delay2" class="slider" type="text" data-slider-min="0" data-slider-max="25" data-slider-step="1" />
|
|
</div>
|
|
</div>
|
|
<hr style="margin-top:10px; margin-bottom: 10px;" />
|
|
</div>
|
|
</div>
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title">
|
|
<cn>输出同步调节</cn>
|
|
<en>Output Synchronization</en>
|
|
</h3>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div>
|
|
<div class="row text-center" style="margin-top: 5px;">
|
|
<div class="col-md-2 col-xs-4">
|
|
<cn>接口名称</cn>
|
|
<en>Interface name</en>
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<cn>硬件延迟(帧)</cn>
|
|
<en>Hardwa delay(frame)</en>
|
|
</div>
|
|
</div>
|
|
<hr style="margin-top:5px; margin-bottom: 10px;" />
|
|
</div>
|
|
<div id="templetOutput">
|
|
<div class="row">
|
|
<div class="col-md-2 col-xs-4">
|
|
<input zcfg="[#].name" type="text" disabled="disabled" class="form-control">
|
|
</div>
|
|
<div class="col-md-4 col-xs-4">
|
|
<input zcfg="[#].delay" class="slider" type="text" data-slider-min="0" data-slider-max="25" data-slider-step="1" />
|
|
</div>
|
|
</div>
|
|
<hr style="margin-top:10px; margin-bottom: 10px;" />
|
|
</div>
|
|
|
|
</div>
|
|
<hr>
|
|
<div class="form-group text-center">
|
|
<button type="button" id="save" class="btn btn-warning" style="min-width: 100px;">
|
|
<cn>保存</cn>
|
|
<en>Save</en>
|
|
</button>
|
|
<button type="button" id="reset" class="btn btn-default" style="min-width: 100px; margin-left:30px;">
|
|
<cn>重置</cn>
|
|
<en>Reset</en>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div id="alert"></div>
|
|
<script src="vendor/switch/bootstrap-switch.js"></script>
|
|
<script src="vendor/slider/bootstrap-slider.min.js" type="text/javascript"></script>
|
|
<script src="js/zcfg.js"></script>
|
|
<script>
|
|
$(function() {
|
|
navIndex(6);
|
|
|
|
var list=[];
|
|
var listAi=[];
|
|
var listAo=[];
|
|
$.getJSON("config/auto/sync.json", function(result) {
|
|
list = result;
|
|
listAi=[];
|
|
listAo=[];
|
|
for(var i=0;i<list.length;i++)
|
|
{
|
|
if(list[i].type=="ai")
|
|
listAi.push(list[i]);
|
|
else
|
|
listAo.push(list[i]);
|
|
}
|
|
zctemplet("#templetInput", listAi);
|
|
zctemplet("#templetOutput", listAo);
|
|
});
|
|
|
|
$("#save").click(function(){
|
|
rpc( "sync.update", [list], 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 );
|
|
}
|
|
} );
|
|
});
|
|
|
|
$("#reset").click(function(){
|
|
for(var i=0;i<list.length;i++)
|
|
{
|
|
if(list[i].type=="ai")
|
|
{
|
|
list[i].delay=list[i].defDelay;
|
|
list[i].delay2=list[i].defDelay2;
|
|
}
|
|
else
|
|
list[i].delay=list[i].defDelay;
|
|
}
|
|
$("#save").click();
|
|
zctemplet("#templetInput", listAi);
|
|
zctemplet("#templetOutput", listAo);
|
|
|
|
});
|
|
|
|
|
|
});
|
|
</script>
|
|
<?php
|
|
include("foot.php");
|
|
?>
|