文件操作的实例——下载并合并流式视频文件

本文通过一个实例介绍了如何使用C语言在Windows环境下下载m3u8流媒体文件并合并其包含的ts片段。首先,通过开发者工具获取m3u8链接,然后利用curl命令下载ts文件,最后编写C程序合并所有ts文件为一个merge.ts。整个过程涉及到文件操作、命令行调用等技巧,是学习C语言文件操作的好练习。
摘要由CSDN通过智能技术生成

目录

前言

一、操作环境

二、操作步骤

说明



前言

c语言的文件操作内容比较繁琐,如果只看代码不上机的话就没办法有效掌握。最近我在线观看学习视频,我就突发灵感,想到可以通过下载流式媒体文件并进行合并来熟悉文件操作。

一、操作环境

win11家庭中文版和vs2022

二、操作步骤

1.登录学习页面

2.按F12,打开开发人员工具窗口


3.按下ctrl+R,记录页面活动,然后点击Fetch/XHR

4.在下面的列表中,找到扩展名为m3u8的文件,右击->copy->copy link address

5.粘贴到记事本里面观察

可以发现它的完整路径是https://r1-ndr.ykt.cbern.com.cn/edu_product/78/video/76b578c33eca409e850c294a4b25273e/3a3d0d00cf4057722d63668579b3f696.1280.720.false/3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8记住这个文件所在的网页文件夹,后面要用到。

6.在第4步的列表中对那个m3u8再右击,选open in new tab,把那个文件下载下来,之后用记事本打开观察

可以看到里面列举了很多ts文件,而且文件名长度都是50个字符。 

7.在vs中建立空项目copy,将这个m3u8文件复制到与项目文件copy.vcxproj同一文件夹下,比如 D:\实验室\copy\copy ,注意有两个copy

8.按图示添加源文件


 

9.编写程序代码

a)下载.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//此程序必须在win10/11上运行,否则需要安装curl!
#pragma warning(disable:4996)
extern void download()//下载所有的ts文件
{
	FILE* fp = fopen("3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8", "r");
	char name[51];//待下载的文件名
	char cmd[500];//待调用的命令行
	while (fscanf(fp, "%s", name) != EOF)
		if (strlen(name) == 50)//文件名长度刚好都一样
		{
			sprintf(cmd, "curl https://r1-ndr.ykt.cbern.com.cn/edu_product/78/video/76b578c33eca409e850c294a4b25273e/3a3d0d00cf4057722d63668579b3f696.1280.720.false/%s -o .\\%s", name, name);//组装调用curl下载文件的命令
			system(cmd);//执行命令
		}
	fclose(fp);
}

 b)合并.c

#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
extern void merge()//合并ts文件
{
	FILE* fpM = fopen("merge.ts", "wb+");
	FILE* fp = fopen("3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8", "r");
	FILE* temp = NULL;
	char name[51];
	while (fscanf(fp, "%s", name) != EOF)
		if (strlen(name) == 50)//文件名长度刚好都一样
		{
			temp = fopen(name, "rb");
			char ch = fgetc(temp);
			while (!feof(temp))
			{
				fputc(ch, fpM);
				ch = fgetc(temp);//最后一次执行此行,文件读不出,ch仍然是上一次的值,之后feof(temp)成立
			}
		}
	fclose(fpM);
	fclose(fp);
	fclose(temp);
}

10.执行程序

在 入口.c 中编写如下代码:

main()
{
    download();
    merge();
}

然后按工具栏上的“本地windows调试器”按钮执行。

耐心等待一会儿,然后到 D:\实验室\copy\copy 下提取merge.ts即可。

说明

1.今天并不研究使用纯粹的c语言下载文件,所以下载文件的时候调用了系统自带的curl命令。

2.不难看出其中用到的文本文件读写和二进制文件读写的过程。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄铎彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值