Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

stream dicom pixel data

branch: master
README
This project provides a Linux streaming server for full-resolution Dicom
pixel data. 

The code has been designed for speed and scalability.

Currently, it only supports single frame images.

Dependencies:

0) boost thread library (http://www.boost.org/)
1) libev - high perf event loop (http://software.schmorp.de/pkg/libev.html)
2) libeio - event based, fully asynchronous IO library (http://software.schmorp.de/pkg/libeio.html)
3) Imebra Dicom toolkit: I have forked a version of this excellent toolkit
and put it on Github. It is included as a submodule of DicomStream. 
4) Google protocol buffers: 
   Google's data interchange format (http://code.google.com/apis/protocolbuffers/)


Installation


After cloning this project, do the following:

A) set up git submodules

$ git submodule init
$ git submodule update


B) Install boost thread library

C) Install libev

D) Install libeio

F) install protocol buffers. protoc compiler is called from stream.sh shell script
in DicomStream project. Change ROOT folder in stream.sh to match your environment
(protoc does not accept relative paths)

////////////////////////////////////////////////////////////////////////


ToDo:

HIGH

- c# client 

- handle multi-frame images - For compressed images, assume that each frame is 
stored in a separate pixel chunk; otherwise, server must decode entire multi-frame
object and then serve frames one at a time.

- devise protobuf file format to serialize parser info; write parser info to disk
and use this for subsequent reads. PACS server will use same format.

- improve error handling, check for leaks, decide when to close connection
 with client(FIN socket, etc)

MEDIUM

- improve prefetch
   a) open all files
   b) on open, do readahead if parser doesn't exist
   c) on readahead, do fadvise 
   d) on fadvise, exit

- flesh out installation guide

- in a branch, trim down Imebra to bare essentials, to avoid code bloat

- implement different streaming strategies on queue of frame groups, such as weighted round-robin 

- add Pantheios logging framework - replace printf statements
Something went wrong with that request. Please try again.