我正在尝试为视频播放器编写Roadhawk dash摄像头中显示速度计和地图的剪辑。我已经讲过基本知识,它可以播放视频和声音,并从视频中提取原始元数据。

此原始元数据包括速度,GPS坐标和G力。
我的第一个目标是Roadhawk DC2。 Roadhawk已经提供了用于执行此操作的软件,但它是封闭源。 http://www.roadhawk.co.uk/roadhawk-dc2-software
我可以对软件甚至相机固件进行反向工程,但是我想知道是否有更好的方法。 br />
元数据存储在视频文件的字幕流中。我已经通过软件播放了一个一分钟的文件,并将所有原始数据转储出去,并查看了现有软件中的同一文件,以获取第一帧的解码值。 (由于现有软件中的查找分辨率,要确定第一帧以外的位置比较麻烦。这是编写我自己的原因。)

它们似乎都是可打印的ASCII字符(可能是一个约束) qt-text字幕编码系统)。

查看所有数据时,我可以看到在数据帧的后三分之一中,某些文本大部分保持不变。在视频的最后三分之一中,汽车正在等待一组灯光,这可能是gforce数据。这是我调查的结果。

我知道解码的帧看起来像这样:

.+;;;D=;-;6;;;;D;JP;4;;;=D;P?;O;;;=D=L;-HO71G>F=;;;JJF:FNJNBDL=R?F3F;;=;PDLR;;F0F;;=DRFJJ?DRJF??;J=LF;;;D;F:*59~


然后解码像这样:

Gforce X = +0.108
       Y = +0.036
Lat      = 53.99020
Long     = -1.10792
Speed    = 2.0mph


完整的捕获帧列表在这里:http://bitofahack.com/stuff/capture

我不不能将其识别为任何特定的编码方法。它甚至可以进行某种压缩,尽管我怀疑当我认为帧的长度比简单地打印为一个长字符串的所有数据更长时。

我应该怎么做才能进一步调查? br />

#1 楼

查看随软件分发的文件,视频播放部分是通过Flowplayer完成的,这些文件都嵌入在这些文件中:

assets/webthings/local_me.html
assets/webthings/local_me_OSM.html
assets/webthings/local_me_slowmo.html
assets/webthings/local_me_with_file_select.html


这些功能还控制着UI字段的更新-显然flowplayer通过回调提供字幕(字幕)数据。搜索函数“ parse_gps_data”。函数“ zgps_decode”中是实际的解码例程,它是一个简单的一对一替换。

实现:

#include <stdio.h>

const char *decode_table = "#I8XQWRVNZOYPUTA0B1C2SJ9K.L,M$D3E4F5G6H7";

void decode_in_place(char *s) {
    while (*s) {
        *s = decode_table[*s-43];
        s++;
    }
}

int main(void) {
    char data[] = ".+;;;D=;-;6;;;;D;JP;4;;;=D;P?;O;;;=D=L;-HO71G>F=;;;JJF:FNJNBDL=R?F3F;;=;PDLR;;F0F;;=DRFJJ?DRJF??;J=LF;;;D;F:*59~";
    decode_in_place(data);
    printf("%s", data);
    return 0;
}
// Output: X#000.1080Y0000.0360Z0001.0620G0001.1408$GPRMC,100033,A,5359.4172,N,00106.4700,W,001.7,332.73,220314,000.0,A


相同的html文件包含有关如何解释此数据的注释:

X0000.0000Y0000.0000Z0000.0000G0000.0000$GPRMC,UTS_Position,Status,Latitude,N/S,Longitude,E/W,Speed,Course_Over,Ground,Date,Magnetic_variation,Checksum~


评论


啊哈,太好了。我钻了反编译.swf的麻烦,我什至没有想到这部分代码会在某个html文件中。谢谢。

– DanJAB
15年12月18日在8:41