UMV Files and SimplePlayer_H264

If this is your version of SimplePlayer, and not the M4 version discussed here – prepare to be disappointed! (Dec 2013 Update: GOOD NEWS – See Report at bottom)

new_umv

The disk format is the same as before. There is a .cdb file that details the playlist of UMV files. Each umv video file has an associated .idx file containing timecode and then there is the player and it’s linked files.

These linked files, avcodec-52.dll etc are the open source video library files that enable the software to correctly read, control and render the video on the display. My hopes were therefore raised that we would be able to effectively deal with the video!

The reason for this is that the player suffers from the same problems as the M4 version.

Upon  opening the player it automatically detects the presence of video files and an index page appears. When the data is selected, the player disables all visual themes in Win7 and the video plays.

The problem of not being able to do anything with the video is a big challenge, and one that could be overcome when the company involved here retained the M4V standard and used stream mapping to separate their camera streams.

With the H264 version things are different.

Player Version

Player Version

new_umv_interface

The player does not display the video as it was recorded. There is no method to do so. There is no method to identify frame type. There is no method to extract an image. There is no method to remove the video from the inferior and restricted interface.

From analysing the UMV streams and identifying the .h264 frame headers, it would appear that some form of modification is being used to separate the individual cameras. Usually the stream itself would be able to be identified as h264 video but these are not.

frameheader

An example of the frame header

So, at the time of writing, we are hitting that common brick wall of being denied the information required by a poorly designed and implemented system. This one is now a work in progress and if I or anyone else figures it out, I will update the post!

Dec 2013 Update: 

These things always come back around and tonight I have had to make a concerted effort to figure out what was going on. My attempts to manually decrypt the h264 streams failed so reverted back to researching players and clients that ‘should’ have the capability built in.

My research led me to a resellers site in the UK and then an installers site in Australia, with a set of DVR’s branded as XDH & UNIMO

On here were a number of players….

Snap 2013-12-04-23_18_00

and then the UMV H264 Converter…

Snap 2013-12-04-23_19_36

This ‘converter’ worked much better than the MP4 version detailed in the SimplePlayer_M4 post. It retains the h264 coding and keeps with the original recording resolution. Upon comparison of the raw data, the hex matched.

It would appear that the index structure is removed from the UMV file. The index helps the simpleplayer control a video backwards – something that is a bit tricky with h264 mpeg video. After the index is removed, it gets placed into the .avi container through a re-wrap process.The .avi itself is still not perfect. It did have problems scrubbing and some software could not detect and read the frame type (I,P etc). The added empty audio stream may not have done it any good! A simple removal of the audio, a re-wrap and a re-index in FFmpeg solved the problem.  

ffmpeg -f h264 -i problemfile.avi -an -vcodec copy -fflags genpts -f avi newcleanfile.avi 

So, a minor breakthrough!!

As always, hope it helps….. and the Players and Converter are in my shared Box on the right (UMV_H264). IMPORTANT: Avast AV software detects the two players with network interfaces as suspected Malware. I believe this is due to their ability to communicate over a network. Please ensure you have up to date AV software – just in case!

Advertisements
By Spreadys Posted in EEPIP

10 comments on “UMV Files and SimplePlayer_H264

  1. Pingback: UMV Files and SimplePlayer_M4.exe | Spreadys Space

  2. Hi, i’m working to integrate a dvr from Unimo (UDR 416) in a software solution but i have some trouble. I receive the stream after sending a cgi command then i clean the manufacturer header to get MPEG4 frames (i guess) begining with 00 00 01 B6 but i don’t know how to build them to get a correct mpe4g stream and push it to ffmpeg.

    Could you help me please ?

    • If its the H264 DVR then reverse engineering the software’s demuxing capability could be quite a task. If its the Mpeg4 Part 2 DVR then you may find they have retained the stream mapping functionality so its possible to map the streams out using -map 0:0 for stream 0, or 0:1 for stream 1 etc…

      You may find that something like Gstreamer or Mencoder may work better with incoming streams and then demux on the fly.

      The H264 based DVR mentioned above luckily has a software solution to demux but trying to figure out how to demux manually would be a very intensive challenge!

      The hex code to identify stream number is usually somewhere near the frame header. The software uses this in order to match up the correct P frames to the I frames etc. Again, finding this and then pushing the frames into the correct stream could be a nightmare.

      From a quick runaround the web, this appears to be a DVR that is no longer manufactured. It may be better to put in a Hybrid DVR/NVR that has the capability of pushing the streams to your software through a modern API rather than waste days of your time. It also future proofs your system.
      Another option would be to integrate with the Unimo CMS… but dont know how locked down that is!

      Good luck!

  3. Hi, I tried to find a timestamp of umv file. I analysed UM frame header (started 55 4D 00 00 00 50 00 01) and found some growth of hex value. But I couldn’t match it to time. How can I find a timestamp of umv file.

    Could you help me plz?

  4. Hi, i think this will help you :

    typedef struct tFrameHeader_t{
    /* Structure Info[8bytes] */
    unsigned char marker[ 2];
    unsigned long int headersize;
    unsigned short int version;
    unsigned long packetsize; // total packet size(64+256+m4_size)
    /* video info */
    unsigned char : 1 ;
    unsigned char videoFormat: 1 ; //!< Video format, NTSC_SYSTEM or PAL_SYSTEM
    unsigned char record: 1 ; //!< Recording: 1, No recording : 0
    unsigned char mux_event: 2; //!< Motion/Sensor state. [01:MotionOn,10:SensorOn,11:MotionSensorOn]
    unsigned char resolution: 2; //!< resolution info. [0:720×240, 1:360×240]
    unsigned char audio: 1 ; //!< Audio Sync info.
    unsigned char recordReason; //!< Record reason. Use 3bits of LSB. \sa g_omRecord.nRecordReason
    unsigned short int videoLoss; //!< videoLoss Info. LSB is CH1, MSB is CH16.
    unsigned char model_info; //!< Model indicator. [0:UDR204, 1:UDR208, 2:UDR216, 3:UDR304, 4:UDR308, 5:UDR316]
    /* VE_STATUS0 */
    unsigned long int progressive: 1 ;
    unsigned long int interlace: 1 ;
    unsigned long int field: 1 ;
    unsigned long int vchannel: 5; /* Don't use this value. Use channel field. */
    unsigned long int type: 2;
    unsigned long int vmflag: 1 ;
    unsigned long int smflag: 1 ;
    unsigned long int m4_size: 20; /* Don't use this value. Use m4_code_size field. */
    /* VE_STATUS1 */
    unsigned long int scale: 4;
    unsigned long int : 8;
    unsigned long int lq_pos0: 4;
    unsigned long int hsize: 8;
    unsigned long int vsize: 8;
    /* VE_STATUS2 */
    unsigned long int m4_offset;
    /* VE_STATUS3 */
    unsigned long int jp_offset;
    /* VE_STATUS4 */
    unsigned long int : 2;
    unsigned long int interval: 10;
    unsigned long int jpeg_size: 20;
    /* VE_STATUS5, VE_STATUS6 */
    struct timeval tv; /* sec, usec */
    /* VE_STATUS7 */
    unsigned long int watermk_status;
    /* VE_STATUS8 */
    unsigned long int encryption_status;
    /* VE_STATUS9 */
    unsigned long int : 27;
    unsigned long int channel: 5; /* Use this value instead of vchannel. */
    /* VE_STATUS10 */
    unsigned long int : 12;
    unsigned long int m4_code_size: 20; /* Use this value instead of m4_size. */
    /* VE_STATUS11 */

  5. spready,
    I have a UMV file I need to view, but much liek others I can’t with anything I have. The links to the UMV concerter are broken – is there any way to get it from you? Appreciate the help,

    Tom

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s