using System.Collections.Generic;\r
using Myriadbits.MXF;\r
using MaestroShared.Metadata;\r
+using NLog;\r
\r
namespace DxPlay {\r
\r
internal class DxPlayer : ISampleGrabberCB, IDisposable {\r
+ private static readonly Logger logger = LogManager.GetCurrentClassLogger();\r
\r
[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")]\r
private static extern void CopyMemory(IntPtr Destination, IntPtr Source, [MarshalAs(UnmanagedType.U4)] uint Length);\r
int hr;\r
IntPtr hEvent;\r
MediaDescription = mediaDesc;\r
- Debug.WriteLine("SetupGraph");\r
// Set up the graph\r
playerWindow = hWin;\r
\r
public void Play() {\r
// If we aren't already playing (or shutting down)\r
if (State == GraphState.Completed)\r
- Stop();\r
+ Stop();\r
if (State == GraphState.Stopped || State == GraphState.Paused) {\r
int hr = m_mediaCtrl.Run();\r
DsError.ThrowExceptionForHR(hr);\r
#if DEBUG\r
m_DsRot = new DsROTEntry(m_FilterGraph);\r
#endif\r
+ logger.Debug("Add SourceFilter to graph");\r
IBaseFilter sourceFilter = null;\r
hr = m_FilterGraph.AddSourceFilter(MediaDescription.FileName, MediaDescription.FileName, out sourceFilter);\r
DsError.ThrowExceptionForHR(hr);\r
//m_FilterGraph.AddFilter(splitter, "MXF Splitter");\r
//splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "Sony MXF Splitter");\r
\r
+ logger.Debug("Add LAVSplitter to graph");\r
IBaseFilter splitter = LoadSplitter(graphBuilder);\r
if (splitter == null)\r
throw new Exception("No splitter!");\r
\r
+ logger.Debug("Connect SourceFilter -> LAVSplitter");\r
FilterGraphTools.ConnectFilters(graphBuilder, sourceFilter, "Output", splitter, "Input", true);\r
\r
//IAMStreamSelect amStreamSelect = (IAMStreamSelect)splitter;\r
// Debug.WriteLine("Audio count: " + audioCount);\r
//}\r
\r
+ logger.Debug("Add LAVVideo to graph");\r
IBaseFilter videoDecoder = LoadVideoDecoder(graphBuilder);\r
\r
if (videoDecoder == null)\r
throw new Exception("No video decoder!");\r
\r
+ logger.Debug("Connect LAVSplitter -> LAVVideo");\r
FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Video", videoDecoder, "Input", true);\r
\r
+ logger.Debug("Add SampleGrabber to graph");\r
IBaseFilter sampGrabber = (IBaseFilter)new SampleGrabber();\r
ConfigureSampleGrabber((ISampleGrabber)sampGrabber);\r
hr = m_FilterGraph.AddFilter(sampGrabber, "Sample Grabber");\r
DsError.ThrowExceptionForHR(hr);\r
\r
+ logger.Debug("Connect LAVVideo -> SampleGrabber");\r
FilterGraphTools.ConnectFilters(graphBuilder, videoDecoder, "Output", sampGrabber, "Input", true);\r
\r
+ logger.Debug("Add VideoMixingRenderer9 to graph");\r
m_videoRenderer = (IBaseFilter)new VideoMixingRenderer9();\r
hr = m_FilterGraph.AddFilter(m_videoRenderer, "Video Mixing Renderer 9");\r
DsError.ThrowExceptionForHR(hr);\r
\r
- IVMRDeinterlaceControl9 deinterlace = (IVMRDeinterlaceControl9)m_videoRenderer;\r
- Guid interlaceMode;\r
- deinterlace.GetActualDeinterlaceMode(0, out interlaceMode);\r
+ //logger.Debug("Add VideoMixingRenderer9 to graph");\r
+ //IVMRDeinterlaceControl9 deinterlace = (IVMRDeinterlaceControl9)m_videoRenderer;\r
+ //Guid interlaceMode;\r
+ //deinterlace.GetActualDeinterlaceMode(0, out interlaceMode);\r
\r
- FilterGraphTools.ConnectFilters(graphBuilder, sampGrabber, "Output", m_videoRenderer, "VMR Input0", true);\r
-\r
- if (DsFindPin.ByName(splitter, "Audio") != null) {\r
- IBaseFilter audioDecoder = null;\r
- audioDecoder = LoadAudioDecoder(graphBuilder);\r
- if (audioDecoder == null)\r
- throw new Exception("No audio decoder!");\r
+ try {\r
+ logger.Debug("Connect SampleGrabber -> VideoMixingRenderer9");\r
+ FilterGraphTools.ConnectFilters(graphBuilder, sampGrabber, "Output", m_videoRenderer, "VMR Input0", true);\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e);\r
+ }\r
\r
- FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Audio", audioDecoder, "Input", true);\r
- FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output");\r
+ try {\r
+ if (DsFindPin.ByName(splitter, "Audio") != null) {\r
+ logger.Debug("Add LAVAudio to graph");\r
+ IBaseFilter audioDecoder = null;\r
+ audioDecoder = LoadAudioDecoder(graphBuilder);\r
+ if (audioDecoder == null)\r
+ throw new Exception("No audio decoder!");\r
+\r
+ logger.Debug("Connect LAVSplitter -> LAVAudio");\r
+ FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Audio", audioDecoder, "Input", true);\r
+ FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output");\r
+ } else {\r
+ logger.Warn("Audio pin not available");\r
+ }\r
+ }\r
+ catch (Exception ex) {\r
+ logger.Warn("Audio pin not available");\r
}\r
\r
+ logger.Debug("SaveSizeInfo");\r
SaveSizeInfo(sampGrabber as ISampleGrabber);\r
+ logger.Debug("SetTimeCodes");\r
SetTimeCodes();\r
+ logger.Debug("ConfigureVideoWindow");\r
ConfigureVideoWindow();\r
\r
+ logger.Debug("Enable YADIF deinterlace");\r
ILAVVideoSettings settings = (ILAVVideoSettings)videoDecoder;\r
//settings.SetSWDeintMode(LAVSWDeintModes.SWDeintMode_None);\r
settings.SetSWDeintMode(LAVSWDeintModes.SWDeintMode_YADIF);\r
MXFFile mxf = new MXFFile(MediaDescription.FileName);\r
mxf.Inspect();\r
//MediaDescription.firstFrame = new Timecode(mxf.FirstSystemItem?.UserDateFullFrameNb, MediaDescription.FrameRate);\r
- MediaDescription.firstFrame = new Timecode((int) mxf.TimecodeComponent.StartTimecode,(float) mxf.TimecodeComponent.RoundedTimecodeBase);\r
+ MediaDescription.firstFrame = new Timecode((int)mxf.TimecodeComponent.StartTimecode, (float)mxf.TimecodeComponent.RoundedTimecodeBase);\r
}\r
catch (Exception ex) {\r
MediaDescription.firstFrame = new Timecode();\r
- } \r
+ }\r
}\r
//MediaDescription.firstFrame = new Timecode();\r
CurrentTC = new Timecode(MediaDescription.FirstFrame);\r
--- /dev/null
+{\r
+ "title": "TQC check",\r
+ "active": true,\r
+ "startInTray": false,\r
+ "enableCustomMetadataId": true,\r
+ "player": {\r
+ "enabled": true,\r
+ "autoStart": false,\r
+ "segmentEditor": true\r
+ },\r
+ "source": {\r
+ "$type": "UNCSource",\r
+ "filter": "avi,wav,mxf",\r
+ "local": {\r
+ "address": "file://10.10.1.100/BRAAVOS/TQC/CHECK",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ },\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/TQC/CHECK",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ "metadatas": [\r
+ {\r
+ "$type": "TrafficMetadata",\r
+ "server": {\r
+ "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
+ "userName": "MAM",\r
+ "password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "http://10.10.1.27/services/rest/jobengine/",\r
+ "timeout": 1000\r
+ }\r
+ }\r
+ ],\r
+ "targets": [\r
+ {\r
+ "label": "Adáskész",\r
+ "processor": "FXPTargetProcessor",\r
+ "outputFormat": "%ID%",\r
+ "saveSegments": true,\r
+ "tag": "Adáskész",\r
+ "disableFileVersioning": true,\r
+ "enableOverride": true,\r
+ "saveMorpheusMetadata": true,\r
+ "pathMorpheusMetadata": "/PLAYOUT/MorpheusGateway/Input",\r
+ "deviceIdMorpheus": "ISILON",\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/PLAYOUT/Video",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "label": "Újravágás",\r
+ "processor": "FXPTargetProcessor",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "outputFormat": "%ID%-%TEXT%",\r
+ "tag": "Újravágás",\r
+ "disableFileVersioning": true,\r
+ "enableOverride": true,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ },\r
+ "sendEmailOnSuccess": true,\r
+ "successEmailRecipient": "vasary@elgekko.net",\r
+ "successEmailPattern": "A %TARGETNAME% újravágása szükséges."\r
+ },\r
+ {\r
+ "label": "Archiválás",\r
+ "processor": "FXPTargetProcessor",\r
+ "outputFormat": "%ID%",\r
+ "tag": "Archiválás",\r
+ "saveArchiveMetadata": true,\r
+ "disableFileVersioning": true,\r
+ "enableOverride": true,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/ARCHIVE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ }\r
+ ]\r
+}\r
<None Include="Configuration\-configuration-grafika.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
+ <None Include="Configuration\configuration-tqc-check.json">\r
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+ </None>\r
<None Include="Configuration\global.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
<None Include="Configuration\-configuration-nle.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
- <None Include="Configuration\configuration-playout-ingest.json">\r
+ <None Include="Configuration\-configuration-playout-ingest.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
<None Include="Configuration\-configuration-tqc-check.json">\r
<?xml version="1.0" encoding="UTF-8"?>\r
<Configuration status="ERROR" monitorInterval="10" packages="user.commons.log4j2.appender">\r
<Properties>\r
- <Property name="fileName">/opt/mediacube/log/mediacube.log</Property>\r
- <Property name="filePattern">/opt/mediacube/log/$${date:yyyy-MM}/mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
- <Property name="markeredFileName">/opt/mediacube/log/markered-mediacube.log</Property>\r
- <Property name="markeredFilePattern">/opt/mediacube/log/$${date:yyyy-MM}/markered-mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
- <Property name="fileName.err">/opt/mediacube/log/mediacube-err.log</Property>\r
- <Property name="filePattern.err">/opt/mediacube/log/$${date:yyyy-MM}/mediacube-err-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="logPath">/opt/mediacube/log</Property>\r
+ <Property name="fileName">${logPath}/mediacube.log</Property>\r
+ <Property name="filePattern">${logPath}/$${date:yyyy-MM}/mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="markeredFileName">${logPath}/markered-mediacube.log</Property>\r
+ <Property name="markeredFilePattern">${logPath}/$${date:yyyy-MM}/markered-mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="fileName.err">${logPath}/mediacube-err.log</Property>\r
+ <Property name="filePattern.err">${logPath}/$${date:yyyy-MM}/mediacube-err-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
</Properties>\r
<Appenders>\r
<Console name="Console" target="SYSTEM_OUT">\r
-Djobengine.loglevel=INFO
-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml\r
</vmArgs>\r
- <vmArgsLin>#Database
--Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
--Djobengine.db.user=db2admin
--Djobengine.db.password=password
--Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
--Djobengine.nosql.db.user=db2admin
--Djobengine.nosql.db.password=password
--Djobengine.nosql.db.schema=test
-
-#Octopus
--Djobengine.octopus.api.address=http://10.10.1.11/api/v1
--Djobengine.octopus.api.user=mam
--Djobengine.octopus.api.password=napocska
--Djobengine.octopus.rundowns.name=test_rundowns
--Djobengine.octopus.storyfolders.name=test_storyfolders
--Djobengine.octopus.stories.name=test_stories
-
-#Selenio
--Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl
--Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium
-
-#Nexio
--Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;
--Djobengine.nexio.db.user=sa
--Djobengine.nexio.db.password=resolve
--Dnexio.useMOSGateway=true
--Dnexio.host=10.10.1.55
--Dnexio.disable=true\r
+ <vmArgsLin>#Database\r
+-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
+-Djobengine.db.user=db2admin\r
+-Djobengine.db.password=password\r
+-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
+-Djobengine.nosql.db.user=db2admin\r
+-Djobengine.nosql.db.password=password\r
+-Djobengine.nosql.db.schema=test\r
+\r
+#Octopus\r
+-Djobengine.octopus.api.address=http://10.10.1.11/api/v1\r
+-Djobengine.octopus.api.user=mam\r
+-Djobengine.octopus.api.password=napocska\r
+-Djobengine.octopus.rundowns.name=rundowns\r
+-Djobengine.octopus.storyfolders.name=storyfolders\r
+-Djobengine.octopus.stories.name=stories\r
+\r
+#Selenio\r
+-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl\r
+-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium\r
+\r
+#Nexio\r
+-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;\r
+-Djobengine.nexio.db.user=sa\r
+-Djobengine.nexio.db.password=resolve\r
+-Dnexio.useMOSGateway=true\r
+-Dnexio.host=10.10.1.55\r
+-Dnexio.disable=false\r
</vmArgsLin>\r
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts\r
</vmArgsMac>\r
{"joblist":[\r
{\r
- "active": false,\r
+ "active": true,\r
+ "executeimmediate": true,\r
"name" : "OCTOPUS adatok szinkronizálása",\r
"template": "sync-octopus.xml",\r
- "executeimmediate": false,\r
"cronexpression": "0/30 * * * * ?",\r
"parameters": [\r
{"name": "includeArchived", "value": false, "type": "java.lang.Boolean"}\r
]\r
}, \r
{\r
- "active": false,\r
- "name" : "OCTOPUS adatok szinkronizálása (archivált tükrök is)",\r
- "template": "sync-octopus.xml",\r
- "executeimmediate": true,\r
- "cronexpression": "0/30 * * * * ?",\r
- "parameters": [\r
- {"name": "includeArchived", "value": true, "type": "java.lang.Boolean"}\r
- ]\r
- }, \r
- {\r
- "active": false,\r
+ "active": true,\r
"executeimmediate": false,\r
"name" : "Archiválás az ISILON/ARCHIVE mappából",\r
"template": "archive-ondemand.xml",\r
]\r
},\r
{\r
- "active": false,\r
+ "active": true,\r
+ "executeimmediate": false,\r
"name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
"template": "delete-materials.xml",\r
- "executeimmediate": false,\r
"cronexpression": "0 0 5 * * ?",\r
"parameters": [ \r
{"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "NEXIO anyagok másolása az ISILON/ARCHIVE mappába",\r
"template": "copyforarchive-nexio-materials.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
{"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"},\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "Archiválás az ISILON/ARCHIVE/ONE mappából",\r
"template": "archive-ondemand.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
{"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE/ONE", "type": "java.lang.String"},\r
},\r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "TRAFFIC anyagok visszatöltése",\r
"template": "retrieve-traffic-missing-materials.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [\r
{"name": "dbUrl", "value": "jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "type": "java.lang.String"},\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "MORPHEUS anyagok visszatöltése",\r
"template": "retrieve-morpheus-missing-materials.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [\r
{"name": "sourcePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "Lejárt ISISLON/ARCHIVE_TEMP anyagok törlése",\r
"template": "delete-materials.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
{"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE_TEMP", "type": "java.lang.String"}\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": true,\r
"name" : "NEXIO anyagok törlése",\r
"template": "delete-nexio-materials.xml",\r
- "executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
{"name": "port", "value": 2098, "type": "java.lang.Integer"},\r
}, \r
{\r
"active": false,\r
+ "executeimmediate": false,\r
"name" : "Párhuzamosított teszt folyamat",\r
"template": "fake-concurrent.xml",\r
- "executeimmediate": false,\r
"cronexpression": "0/10 * * ? * *",\r
"parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
},\r
{\r
"active": false,\r
+ "executeimmediate": false,\r
"name" : "Teszt folyamat",\r
"template": "fake.xml",\r
- "executeimmediate": false,\r
"cronexpression": "0/10 * * ? * *",\r
"parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
}\r
private static final Logger logger = LogManager.getLogger();\r
// private static final String UTF8 = "utf-8";\r
private static final String STATUSFOLDER = ".STATUS";\r
- private static final String MEDIAEXT = ".mxf";\r
+ private static final String MXFEXT = ".mxf";\r
+ private static final String WAVEXT = ".wav";\r
private static final String JSONEXT = ".json";\r
private static final String CATCHEDEXT = ".catched";\r
\r
private void processPathItem(Path mediaFilePath, final List<ArchiveItem> archiveList) {\r
File mediaFile = mediaFilePath.toFile();\r
\r
- if (mediaFile.isDirectory() || !mediaFile.getName().toLowerCase().endsWith(MEDIAEXT.toLowerCase())) {\r
+ if (mediaFile.isDirectory() || !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase())\r
+ || mediaFile.getName().toLowerCase().endsWith(WAVEXT.toLowerCase())) {\r
return;\r
}\r
\r
// "userName": "echotest"\r
// }\r
BasicDBObject result = new BasicDBObject();\r
- result.put("itemHouseID", rundownArchive.getItemHouseId());\r
+ result.put("itemHouseId", rundownArchive.getItemHouseId());\r
result.put("itemTitle", rundownArchive.getItemTitle());\r
result.put("itemDescription", rundownArchive.getItemDesc());\r
result.put("userName", "mediacube");\r
BasicDBObject clip = (BasicDBObject) clips.findOne(new BasicDBObject(LONGNAMEID, mosID));\r
if (clip == null) {\r
logger.debug("File NOT exists {}", mosID);\r
- throw new Exception(String.format("File NOT exists %s", mosID));\r
+ return null;\r
+ //throw new Exception(String.format("File NOT exists %s", mosID));\r
} else {\r
logger.debug("File exists {}", mosID);\r
}\r
for (DBObject r : rundowns) {\r
BasicDBObject rundown = (BasicDBObject) r;\r
setProgress(index * 100 / rundowns.size());\r
+ long rundownID = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
+ String rundownName = NoSQLUtils.asString(rundown, IOctopusAPI.NAME);\r
try {\r
- long rundownID = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
BasicDBObject currentRundownID = new BasicDBObject(IOctopusAPI.ID, rundownID);\r
- String rundownName = rundown.getString(IOctopusAPI.NAME);\r
if (archivedRundowns != null && archivedRundowns.contains(currentRundownID)) {\r
logger.info("Skipping archived rundown {} {}", rundownID, rundownName);\r
continue;\r
\r
RundownArchive rundownArchive = processRundow(r);\r
if (rundownArchive == null || rundownArchive.isEmpty()) {\r
- logger.info("Skipping rundown {} {}", NoSQLUtils.asLong(rundown, IOctopusAPI.ID), rundown.getString(IOctopusAPI.NAME));\r
+ logger.info("Skipping rundown {} {}", rundownID, rundownName);\r
continue;\r
}\r
\r
} catch (Exception e) {\r
logger.catching(e);\r
logger.error(getMarker(),\r
- "A {} tükör archiválása nem lehetséges, mert a annak ellenőrzése hibát jelzett. A rendszer üzenete: " + e.getMessage());\r
+ String.format("A %s %s tükör archiválása nem lehetséges, mert a annak ellenőrzése hibát jelzett. A rendszer üzenete: %s", rundownID,\r
+ rundownName, e.getMessage()));\r
}\r
index++;\r
}\r
package user.jobengine.server.steps;\r
\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+import java.util.List;\r
+\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.ItemDAOEx;\r
+import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.Media;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class CreateMissingLowresStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- private IItemManager manager;\r
+ private static final String targetNamePattern = "%s";\r
+ private String workPath = "/mnt/ISILON/ARCHIVE_RESTORE";\r
+ private String transcoderPath = "/mnt/SELENIO";\r
+ private String webPath = "/mediacube/data/lowres/www/video";\r
\r
@StepEntry\r
public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ ItemDAOEx dao = new ItemDAOEx((ItemManager) jobEngine.getItemManager());\r
+ List<Media> medias = dao.getUntranscodedMedias();\r
+ if (medias == null)\r
+ return null;\r
+\r
+ int i = 1;\r
+ for (Media media : medias) {\r
+ String name = media.getMediaFilesName();\r
+ logger.info("Processing {}", name);\r
+ restore(jobEngine, jobRuntime, media);\r
+ transcode(jobEngine, jobRuntime, media);\r
+ Files.delete(Paths.get(workPath, name));\r
+ setProgress(i * 100 / medias.size());\r
+ i++;\r
+ }\r
+\r
return null;\r
}\r
+\r
+ private void restore(IJobEngine jobEngine, IJobRuntime jobRuntime, Media media) throws Exception {\r
+ TSMRestoreStep restore = new TSMRestoreStep();\r
+ restore.execute(media, workPath, targetNamePattern, null, 0, jobEngine, jobRuntime);\r
+ }\r
+\r
+ private void transcode(IJobEngine jobEngine, IJobRuntime jobRuntime, Media media) throws Exception {\r
+ TranscodeSELENIOStep selenio = new TranscodeSELENIOStep();\r
+ ArchiveItem archiveItem = new ArchiveItem();\r
+ archiveItem.setMediaFile(media.getMediaFilesName());\r
+ selenio.execute(workPath, archiveItem, media, transcoderPath, webPath, jobEngine, jobRuntime);\r
+ }\r
}\r
private String apiUser;\r
private String apiPwd;\r
private HashSet<Long> storyIDs = new HashSet<>();\r
+ private HashSet<Long> folderIDs = new HashSet<>();\r
+ private HashSet<Long> rundownIDs = new HashSet<>();\r
private EventListenerList progressListenerList;\r
private ProgressEvent progressEvent = new ProgressEvent(this, 0);\r
private Map<Long, BasicDBList> storyRundowns;\r
List<BasicDBObject> stories = NoSQLUtils.asList(storyFolderWithStoryIds, IOctopusAPI.STORIES);\r
if (stories == null)\r
continue;\r
+ if (!folderIDs.contains(storyFolderId))\r
+ folderIDs.add(storyFolderId);\r
long position = 1;\r
for (BasicDBObject story : stories) {\r
long storyId = story.getLong(IOctopusAPI.ID);\r
+\r
BasicDBList references = result.get(storyId);\r
if (references == null) {\r
references = new BasicDBList();\r
List<BasicDBObject> slugs = NoSQLUtils.asList(rundownWithStoryids, IOctopusAPI.SLUGS);\r
if (slugs == null)\r
continue;\r
+\r
+ if (!rundownIDs.contains(rundownId))\r
+ rundownIDs.add(rundownId);\r
+\r
for (BasicDBObject slug : slugs) {\r
if (!slug.containsKey(IOctopusAPI.STORYID))\r
continue;\r
processRundowns(rundowns);\r
processStoryFolders(storyFolders);\r
\r
- deleteDiff(currentRundowns.keySet(), storyRundowns.keySet(), RUNDOWN_COLLECTION);\r
- deleteDiff(currentFolder.keySet(), storyStoryFolders.keySet(), RUNDOWN_COLLECTION);\r
- deleteDiff(currentStories.keySet(), storyIDs, RUNDOWN_COLLECTION);\r
+ deleteDiff(currentRundowns.keySet(), rundownIDs, RUNDOWN_COLLECTION);\r
+ deleteDiff(currentFolder.keySet(), folderIDs, FOLDER_COLLECTION);\r
+ deleteDiff(currentStories.keySet(), storyIDs, STORY_COLLECTION);\r
// deleteOrphanRundowns();\r
// deleteOrphanStoryFolders();\r
// deleteOrphanStories();\r
// }\r
\r
logger.trace(FINISHED);\r
- throw new Exception("Mérés");\r
+ //throw new Exception("Mérés");\r
}\r
\r
private String extractContent(BasicDBObject content) {\r
List<user.commons.selenio.wsclient.MediaFile> outputs = of.getOutputFiles();\r
if (outputs.size() != 1)\r
throw new IndexOutOfBoundsException("There are more than 1 file in the response: " + transcodeTask.getId());\r
-\r
user.commons.selenio.wsclient.MediaFile selenioMediaFile = outputs.get(0);\r
String outFile = selenioMediaFile.getFile();\r
- outFile = outFile.substring(outFile.lastIndexOf("\\") + 1);\r
- user.jobengine.db.MediaFile mediaFile = manager.createMediaFile(outFile, fileType, store, mediaCubeMedia);\r
- mediaFile.add();\r
try {\r
- Files.move(Paths.get(transcoderTargetPath, outFile), Paths.get(webPath, outFile), StandardCopyOption.REPLACE_EXISTING);\r
+\r
+ outFile = outFile.substring(outFile.lastIndexOf("\\") + 1);\r
+ if (outFile.indexOf(".") > 2) {\r
+ Path subdir = Paths.get(outFile.substring(0, 1), outFile.substring(1, 2), outFile.substring(2, 3));\r
+ manager.createMediaFile(Paths.get(subdir.toString(), outFile).toString(), fileType, store, mediaCubeMedia).add();\r
+ subdir = Paths.get(webPath, subdir.toString());\r
+ subdir.toFile().mkdirs();\r
+ Files.move(Paths.get(transcoderTargetPath, outFile), Paths.get(subdir.toString(), outFile), StandardCopyOption.REPLACE_EXISTING);\r
+ } else {\r
+ manager.createMediaFile(outFile, fileType, store, mediaCubeMedia).add();\r
+ Files.move(Paths.get(transcoderTargetPath, outFile), Paths.get(webPath, outFile), StandardCopyOption.REPLACE_EXISTING);\r
+ }\r
} catch (IOException e) {\r
logger.catching(e);\r
logger.error(getMarker(), "A {} állomány mozgatása a {} mappába nem sikerült.", outFile, webPath);\r
\r
@Test\r
public void testClient() {\r
- ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.29/services/rest/octopus/");\r
+ ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/");\r
Response response = null;\r
for (int i = 0; i < 10000; i++) {\r
response = webTarget.path("rundowns").request().get();\r
<?xml version="1.0" encoding="UTF-8"?>\r
<classpath>\r
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>\r
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
<classpathentry excluding="user/jobengine/remotefiles/jcifs/smb/" kind="src" path="src"/>\r
<classpathentry kind="src" path="test"/>\r
<classpathentry kind="src" path="generated"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<classpathentry kind="output" path="bin"/>\r
</classpath>\r
-#Mon Feb 06 13:26:25 CET 2012\r
eclipse.preferences.version=1\r
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7\r
-org.eclipse.jdt.core.compiler.compliance=1.7\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8\r
+org.eclipse.jdt.core.compiler.compliance=1.8\r
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
-org.eclipse.jdt.core.compiler.source=1.7\r
+org.eclipse.jdt.core.compiler.source=1.8\r
--- /dev/null
+default.configuration=\r
+eclipse.preferences.version=1\r
+hibernate3.enabled=false\r
import org.apache.logging.log4j.Logger;\r
\r
import sqlj.runtime.ref.DefaultContext;\r
+import user.commons.ListUtils;\r
\r
public class ItemDAOEx {\r
private static final Logger logger = LogManager.getLogger();\r
return results;\r
}\r
\r
+ public List<Media> getUntranscodedMedias() {\r
+ List<Media> result = null;\r
+\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = manager.getDbContext();\r
+ Connection connection = context.getConnection();\r
+ try {\r
+\r
+ String query = "select m.ID, m.TITLE, m.DESCRIPTION, m.ITEMID, m.ITEMTYPEID, m.HOUSEID, m.LENGTH, m.CREATED, m.ARCHIVED, m.POSTER from MEDIA m right outer join VW_MEDIAFILES f on (f.MEDIAID = m.ID) where m.CREATED > '2017-12-14' and f.MEDIAFILECOUNT = 1";\r
+ st = connection.prepareStatement(query);\r
+ rs = st.executeQuery();\r
+ MediaDAO dao = (MediaDAO) manager.getBaseDAO(Media.class);\r
+ result = ListUtils.cast(dao.entities(context, rs));\r
+ if (result != null)\r
+ result.forEach(m -> m.setPersister(manager));\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ e1.printStackTrace();\r
+ }\r
+ manager.throwError(e);\r
+ } finally {\r
+ try {\r
+ if (rs != null)\r
+ rs.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ try {\r
+ if (st != null)\r
+ st.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ manager.putDbContext(context);\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
@SuppressWarnings("unchecked")\r
public List<SearchResult> search(QueryObject queryObject) {\r
manager.traceIn();\r
package user.jobengine.zk.model;\r
\r
-import java.io.File;\r
+import java.net.URL;\r
import java.nio.file.Paths;\r
import java.util.HashMap;\r
import java.util.List;\r
private static final Logger logger = LogManager.getLogger();\r
private static final String MEDIACUBEMEDIA = "mediaCubeMedia";\r
private static final String PAGES_RETRIEVESELECTOR_ZUL = "/pages/retrieveselector.zul";\r
+ private static final String PAGES_MEDIAPLAYER = "/pages/mediaplayer.jsp?mediaurl=";\r
\r
private String searchValue = null;\r
protected CachedListModel searchResult = null;\r
Store store = mf.getStore();\r
if (store.isLowres()) {\r
StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
- File f = new File("file://" + mf.getRelativePath().replace("\\", "/"));\r
- ret = String.format("%s%s%s", "/pages/mediaplayer.jsp?mediaurl=", sourceStoreUri.toString(), f.getName()).toString();\r
+ URL base = new URL(sourceStoreUri.toString());\r
+ String relative = mf.getRelativePath().replace("\\", "/");\r
+ ret = PAGES_MEDIAPLAYER + new URL(base, relative).toString();\r
+ // File f = new File("file://" + mf.getRelativePath().replace("\\", "/"));\r
+ // ret = String.format("%s%s%s", "/pages/mediaplayer.jsp?mediaurl=", sourceStoreUri.toString(), f.getName()).toString();\r
break;\r
}\r
}\r
package user.jobengine.zk.util;\r
\r
-\r
import java.util.Map;\r
-import org.zkoss.zk.ui.*;\r
-import org.zkoss.zk.ui.util.Initiator;\r
\r
+import org.zkoss.zk.ui.Page;\r
+import org.zkoss.zk.ui.util.Initiator;\r
\r
/**\r
- Ellenorzi, hogy van e beloginelt user, ha nincs,\r
- akkor -> login.zul\r
- Minden oldal belinkeli ezt az ellenorzest.\r
-*/\r
+ * Ellenorzi, hogy van e beloginelt user, ha nincs, akkor -> login.zul Minden oldal belinkeli ezt az ellenorzest.\r
+ */\r
public class AuthInitiator implements Initiator {\r
- \r
- public void doInit(Page page, Map<String, Object> args) throws Exception{\r
- //nincs beloginelt felhasznalo\r
-// if(SessionUtil.getAttribute(SessionUtil.PRINCIPALNAME) == null){\r
-// Executions.sendRedirect("/index.jsp");\r
-// return;\r
-// }\r
- }\r
- \r
+\r
+ @Override\r
+ public void doInit(Page page, Map<String, Object> args) throws Exception {\r
+ //nincs beloginelt felhasznalo\r
+ // if(SessionUtil.getAttribute(SessionUtil.PRINCIPALNAME) == null){\r
+ // Executions.sendRedirect("/index.jsp");\r
+ // return;\r
+ // }\r
+ }\r
\r
}
\ No newline at end of file
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.net.URL;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.junit.Test;\r
+\r
+import user.jobengine.db.TestBase;\r
+\r
+public class General extends TestBase {\r
+\r
+ @Test\r
+ public void test1() throws Exception {\r
+ String webPath = "c:\\xxxx";\r
+ String outFile = "M012345.MXF";\r
+ Path subdir = Paths.get(outFile.substring(0, 1), outFile.substring(1, 2), outFile.substring(2, 3));\r
+ String rel = Paths.get(subdir.toString(), outFile).toString();\r
+ System.out.println(rel);\r
+ subdir = Paths.get(webPath, subdir.toString());\r
+ System.out.println(subdir.toString());\r
+ //subdir.toFile().mkdirs();\r
+ System.out.println(new URL(new URL("http://host/"), rel.replace("\\", "/")).toString());\r
+ }\r
+\r
+}\r