急!求大神指导:c读取视频数据时如何跳过包头并另存为文件?
求代码实现:数据data中包含不定数量的数据包,每个数据包里存的都是视频数据,现在需要读取data中数据的过程时跳过PACKAGE_HEAD,读取完毕以后把跳过PACKAGE_HEAD的纯视频数据另存为一个(纯码流的)文件中,读取data的过程中只要遇到 zxel标识 就认为是读到一个包头。
/**包头的标识**/
#define SFUNIT_PACKAGE_HEAD htonl(('z' << 24 ) | ('x' << 16) | ('e' << 8) | ('l')) zxel
/**构造数据包头**/
stPackHead.uKey = SFUNIT_PACKAGE_HEAD;
stPackHead.uLen = (AOS_UINT16)ulDataBufferLen;
stPackHead.uMilliSecond = (AOS_UINT16)(pstRcvTime->tv_usec / 1000);
stPackHead.uSeconds.time = pstRcvTime->tv_sec;
/**包的结构**/
typedef struct _PACKAGE_HEAD_
{
AOS_UINT32 uKey; // before each data package, is a magic words, should be SFUNIT_PACKAGE_HEAD
AOS_UINT16 uLen; // the data package length, the data len must less than 65535.
AOS_UINT16 uMilliSecond; // the data reveived time offset in second, in millisecond
AOS_TIME_T uSeconds; // the data reveived time, it is a absult time, in second
}PACKAGE_HEAD;
之前尝试过用fseek,但最后得到的数据总是不对,再另存文件的时候可能也有问题,所以希望各位帮忙指导下,很感谢!
可能语言描述上不太明白,画张图可能会更理解些。 图中1是原始数据,需要达到图中2所示的结果,最后再把省略包头数据保存到一个新的文件即可。
形象的说就好比读一个磁带,每首歌之间有空白的时间间隔,这个空白的部分相当于包头,每首歌的内容相当于数据,不需要知道每首歌的内容是英文还是中文还是粤语,最终需要把空白部分去掉,把剩下所有歌曲的内容再保存到另外一个新的文件即可。
[ 本帖最后由 duoduodx 于 2015-2-4 14:57 编辑 ]