Probe result can populate Monitor Settings window

merge-requests/210/head
Moe 2020-06-06 13:47:27 -07:00
parent cebceae8b2
commit 5bf8a04d53
3 changed files with 36 additions and 22 deletions

View File

@ -1942,13 +1942,12 @@ module.exports = function(s,config,lang,app,io){
} }
req.probeCommand = s.splitForFFPMEG(req.query.flags + ` -i "${req.query.url}"`).join(' ') req.probeCommand = s.splitForFFPMEG(req.query.flags + ` -i "${req.query.url}"`).join(' ')
exec('ffprobe ' + req.probeCommand,function(err,stdout,stderr){ exec('ffprobe ' + req.probeCommand,function(err,stdout,stderr){
console.log(stderr,stdout)
delete(user.ffprobe) delete(user.ffprobe)
if(err){ if(err){
req.ret.error=(err) req.ret.error=(err)
}else{ }else{
req.ret.ok=true req.ret.ok = true
req.ret.result = stdout+stderr req.ret.result = stderr
} }
req.ret.probe = req.probeCommand req.ret.probe = req.probeCommand
res.end(s.prettyPrint(req.ret)); res.end(s.prettyPrint(req.ret));

View File

@ -22,16 +22,8 @@ $(document).ready(function(e){
setAsLoading(true) setAsLoading(true)
var el = $(this) var el = $(this)
var form = el.serializeObject() var form = el.serializeObject()
var flags = '' var flags = 'default'
var url = form.url.trim() var url = form.url.trim()
switch(form.mode){
case'json':
flags = '-print_format json -show_format -show_streams'
break;
}
// if(url.indexOf('{{JSON}}')>-1){
// url='-v quiet -print_format json -show_format -show_streams '+url
// }
$.get(`${getApiPrefix()}/probe/${$user.ke}?url=${encodeURIComponent(`'${url}'`)}&flags=${flags}`,function(data){ $.get(`${getApiPrefix()}/probe/${$user.ke}?url=${encodeURIComponent(`'${url}'`)}&flags=${flags}`,function(data){
if(data.ok === true){ if(data.ok === true){
var html var html
@ -40,6 +32,7 @@ $(document).ready(function(e){
loadedProbe.url = url loadedProbe.url = url
html = $.ccio.init('jsontoblock',loadedProbe) html = $.ccio.init('jsontoblock',loadedProbe)
}catch(err){ }catch(err){
console.log(err)
html = data.result html = data.result
} }
outputView.append(html) outputView.append(html)
@ -66,25 +59,25 @@ $(document).ready(function(e){
selectedPrimary = stream selectedPrimary = stream
break; break;
case'audio': case'audio':
audioStream = stream
switch(true){ switch(true){
case codecNameContains('aac'): case codecNameContains('aac'):
audioStream.isAAC = true audioStream.isAAC = true
audioStream = stream
break; break;
case codecNameContains('pcm_alaw'): case codecNameContains('pcm_alaw'):
case codecNameContains('law'): case codecNameContains('law'):
audioStream.isAAC = false audioStream.isAAC = false
audioStream = stream
break; break;
} }
break; break;
} }
}) })
//select input type, primary video codec
var codecNameContains = function(find){ var codecNameContains = function(find){
return stringContains(find,selectedPrimary.codec_name) return stringContains(find,selectedPrimary.codec_name)
} }
var streamVideoCodec = 'copy' var primaryVideoCodec = 'copy'
var monitorCaptureRate = '' var monitorCaptureRate = ''
var selectedType = selectedPrimary.codec_name var selectedType = selectedPrimary.codec_name
if(stringContains('.m3u8',loadedProbe.url)){ if(stringContains('.m3u8',loadedProbe.url)){
@ -92,34 +85,55 @@ $(document).ready(function(e){
}else if(stringContains('rtmp://',loadedProbe.url) || stringContains('rtmps://',loadedProbe.url)){ }else if(stringContains('rtmp://',loadedProbe.url) || stringContains('rtmps://',loadedProbe.url)){
selectedType = 'rtmp' selectedType = 'rtmp'
}else if(loadedProbe.url.substring(0,1) === '/'){ }else if(loadedProbe.url.substring(0,1) === '/'){
if(!codecNameContains('h264'){ if(!codecNameContains('h264')){
streamVideoCodec = 'libx264' primaryVideoCodec = 'libx264'
} }
selectedType = 'local' selectedType = 'local'
monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : '' monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : ''
}else if(codecNameContains('h264') || codecNameContains('hvec') || codecNameContains('h265')){ }else if(codecNameContains('h264') || codecNameContains('hvec') || codecNameContains('h265')){
selectedType = 'h264' selectedType = 'h264'
}else if(codecNameContains('mjpg') || codecNameContains('mjpeg')){ }else if(codecNameContains('mjpg') || codecNameContains('mjpeg')){
streamVideoCodec = 'libx264' primaryVideoCodec = 'libx264'
selectedType = 'mjpeg' selectedType = 'mjpeg'
monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : '' monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : ''
}else if(codecNameContains('jpg') || codecNameContains('jpeg')){ }else if(codecNameContains('jpg') || codecNameContains('jpeg')){
selectedType = 'jpeg' selectedType = 'jpeg'
monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : '' monitorCaptureRate = loadedProbe.r_frame_rate ? eval(loadedProbe.r_frame_rate) : ''
} }
//select primary audio codec
var primaryAudioCodec = 'no'
if(audioStream){
primaryAudioCodec = 'aac'
// if(audioStream.isAAC){
// primaryAudioCodec = 'copy'
// }else{
// primaryAudioCodec = 'aac'
// }
}
var monitorConfig = mergeDeep($.aM.generateDefaultMonitorSettings(),{ var monitorConfig = mergeDeep($.aM.generateDefaultMonitorSettings(),{
type: selectedType, type: selectedType,
fps: monitorCaptureRate, //videoRecordRate
details: { details: {
sfps: monitorCaptureRate,
auto_host: loadedProbe.url, auto_host: loadedProbe.url,
primary_input: `0:${selectedIndex || '0'}`, primary_input: `0:${selectedIndex || '0'}`,
stream_vcodec: streamVideoCodec, sfps: monitorCaptureRate,
stream_acodec: '', vcodec: primaryVideoCodec,
acodec: primaryAudioCodec,
stream_vcodec: primaryVideoCodec,
stream_acodec: primaryAudioCodec,
stream_fps: monitorCaptureRate,
detector_buffer_vcodec: primaryVideoCodec,
detector_buffer_acodec: primaryAudioCodec,
detector_buffer_fps: monitorCaptureRate,
} }
}) })
$.aM.import(loadedProbe) $.aM.import(monitorConfig)
$.aM.e.find('[detail="auto_host"]').change()
$.aM.e.modal('show') $.aM.e.modal('show')
probeWindow.modal('hide')
}else{
console.log('No Probe Result Loaded!')
} }
}) })
probeWindow.on('hidden.bs.modal',function(){ probeWindow.on('hidden.bs.modal',function(){

View File

@ -30,6 +30,7 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal"><i class="fa fa-times"></i> <%-lang.Close%></button> <button type="button" class="btn btn-default pull-left" data-dismiss="modal"><i class="fa fa-times"></i> <%-lang.Close%></button>
<button type="button" class="btn btn-primary fill"><%-lang.Import%></button>
<a class="btn btn-danger stop" style="display:none"><%-lang.Stop%><span> &nbsp; <i class="fa fa-pulse fa-spinner"></i></span></a> <a class="btn btn-danger stop" style="display:none"><%-lang.Stop%><span> &nbsp; <i class="fa fa-pulse fa-spinner"></i></span></a>
<button type="submit" class="btn btn-success"><%-lang.Check%></button> <button type="submit" class="btn btn-success"><%-lang.Check%></button>
</div> </div>