视频文件(任意文件)二进制读写

当前老师的项目需要在硬件平台上运行,为了直观验证我们的传输方案的正确性,现打算传输一个视频文件。

google之后很快得到一个可用的模板,代码如下:

#include <stdio.h>

int BUFFER_SIZE = 1024;
FILE *source;
FILE *destination;
int n;
int count = 0;
int written = 0;

int main() {
    unsigned char buffer[BUFFER_SIZE];

    source = fopen("./source.txt", "r");

    if (source) {
        destination = fopen("dest.txt", "w");

        while (!feof(source)) {
            n = fread(buffer, 1, BUFFER_SIZE, source);
            count += n;
            printf("n = %d\n", n);
            fwrite(buffer, 1, n, destination);
        }
        printf("%d bytes read from the source.\n", count);
    } else {
        printf("fail\n");
    }

    fclose(source);
    fclose(destination);

    return 0;
}


注意事项:
1、文件的读写以字节为单位,传输时可根据实际情况将 buffer 里的 byte 换成 bit 继续下面的操作,最后还要在收端转换回来;

2、我这里文件的打开模式没有加 "b" ,是因为在我是在 linux 系统下,如果是在 windows 下,必须加上;

3、文件要分块传输,但最后一块基本是不可能刚好一整块的,可以在最后补0,貌似对源文件不会有太大影响,如下:

n = fread(buffer, 1, BUFFER_SIZE, source);
count += n;
if(n != BUFFER_SIZE)
    for(i = n - 1; i < BUFFER_SIZE; ++i)
         buffer[i] = 0;


关于测试时用的视频格式,开始我使用的是常见格式 mkv,结果就是不加噪时得到的新文件可以正常打开播放,因为完全没有错只是视频尾多了一些 0,而一旦加噪,得到的视频文件就会完全打不开了。和小项交流后,他推荐我使用 yuv 后缀的视频文件,因为这是未压缩的视频源文件,出错的概率小,结果成功,有噪的情况下文件还是能打开,不过有些噪点罢了。附:

pyuv播放器下载地址:http://blog.csdn.net/chris_magic/article/details/6298554

yuv 后缀视频下载地址:http://trace.eas.asu.edu/yuv/index.html

你可能感兴趣的:(视频文件(任意文件)二进制读写)