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