Thank you for responding!
Based on that, since we're using Orthanc Peers on the mobile Orthanc instances, we could theoretically transcode them there differently for each peer? That would still be sending the studies over the mobile network twice, but what would the syntax be for that?
Right now the peers list in the orthanc.json on a mobile unit looks like this:
"Central Server_DCM1" : [ "
https://dcm.domain.com", "USER_DCM1", "<PASSWORD>" ],
"Central Server_DCM2" : [ "
https://dcm.domain.com", "USER_DCM2", "<PASSWORD>" ],
"Central Server_DCM3" : [ "
https://dcm.domain.com", "USER_DCM3", "<PASSWORD>" ],
"Central Server_DCM4" : [ "
https://dcm.domain.com", "USER_DCM4", "<PASSWORD>" ],
"Central Server_DCM5" : [ "
https://dcm.domain.com", "USER_DCM5", "<PASSWORD>" ]
And the LUA routing script on each unit looks like this:
function OnStoredInstance(instanceId, tags, metadata, origin)
print((origin['CalledAet']), (instanceId), ('OnStoredInstance'))
-- PrintRecursive(origin)
local CalledAETVar = string.upper(origin['CalledAet'])
-- Extract the value of the "CalledAet" DICOM tag
if origin['CalledAet'] ~= nil then
-- Skip processing rules if CalledAet is nil.
print(CalledAETVar)
if string.find(CalledAETVar, '_DCM1') ~= nil then
-- Send _DCM1 studies to Destination 1.
print('Routing to
DCM.DOMAIN.COM Destination 1')
SendToPeer(instanceId, 'CentralServer_DCM1')
print('SendToPeer - Destination 1 - done...')
end
if string.find(CalledAETVar, '_DCM2') ~= nil then
-- Send _DCM2 studies to Destination 2.
print('Routing to
DCM.DOMAIN.COM Destination 2')
SendToPeer(instanceId, 'CentralServer_DCM2')
print('SendToPeer - Destination 2 - done...')
end
if string.find(CalledAETVar, '_DCM3') ~= nil then
-- Send _DCM3 studies to Destination 3.
print('Routing to
DCM.DOMAIN.COM Destination 3')
SendToPeer(instanceId, 'CentralServer_DCM3')
print('SendToPeer - Destination 3 - done...')
end
if string.find(CalledAETVar, '_DCM4') ~= nil then
-- Send _DCM4 studies to Destination 4.
print('Routing to
DCM.DOMAIN.COM Destination 4')
SendToPeer(instanceId, 'CentralServer_DCM4')
print('SendToPeer - Destination 4 - done...')
end
if string.find(CalledAETVar, '_DCM5') ~= nil then
-- Send _DCM5 studies to Destination 5.
print('Routing to
DCM.DOMAIN.COM Destination 5')
SendToPeer(instanceId, 'CentralServer_DCM5')
print('SendToPeer - Destination 5 - done...')
end
end
print('DICOM Routing Complete')
end
On the central server, the destinations are just using this format in the Orthanc.json file:
"Destination A" : [ "DESTA_SCP", "XXX.XXX.XXX.XXX", 4004 ],
"Destination B" : [ "DESTB_SCP", "XXX.XXX.XXX.XXX", 104 ],
I did try adding a block like this to the file, but it did not change the result previously. (Which was likely because the preferred syntax was still J2K... lol) I also wasn't sure if this could be mixed in with the simpler version of the list, too.
"Destination B" : {
"AET" : "DESTB_SCP",
"Port" : 104,
"Host" : "XXX.XXX.XXX.XXX",
"Manufacturer" : "Generic",
"AllowTranscoding" : true,
}
On the central server, due to confusion trying to make sure studies for Destination A were J2K since that destination does long-term storage, but will not transcode even uncompressed studies, it was previously set to this:
"DicomScuPreferredTransferSyntax" : "1.2.840.10008.1.2.4.90",
I changed it to this while I was writing the first post up, and tested it before posting:
"DicomScuPreferredTransferSyntax" : "1.2.840.10008.1.2",
It didn't resolve the errors from Destination B... However, I missed this setting, which was likely also changed for Dest A, and likely prevents the fall-back functionality from sending the images to Dest B in an uncompressed format:
"TranscodeDicomProtocol" : false,
I've just changed that one to true, to see if it will at least allow the J2K studies bound for Dest B to get there in the meantime.
I do still have a second instance of Orthanc on the central server, from earlier efforts before I figured out how to route the peer-to-peer; I was hoping there was something I could do in the config or the LUA to handle it, though.