爬虫15.C语言下载B站单个视频
一、C语言与libcurl库访问
先访问后下载。
0.使用vcpkg安装libcurl库。
1. 抓包链接
在浏览器中打开视频通过浏览器开发者工具抓包视频链接.
选择类型fetch/xhr->点击按大小排序->点击其中一个链接
1 | https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000 |
2.访问视频链接并打印状态码
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main(void) {
CURL* curl;
CURLcode res;
long response_code;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://cn-zjjh-ct-04-06.bilivideo.com/upgcxcode/12/23/1043862312/1043862312-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740903656&gen=playurlv2&os=bcache&oi=22049212&trid=0000dc411d7db69e4c15bd5be682cad39fb5u&mid=67077312&platform=pc&og=hw&upsig=e19fb3c4e1a59cdac50635ec63b051ea&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=6591&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=12625&logo=80000000");
// Follow redirects if necessary
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// Perform the request, res will get the return code
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
else {
// Get the response code
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
printf("Response Code: %ld\n", response_code);
}
// Clean up
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}编译后运行
运行结果显示状态码403.
3.添加请求头访问,尝试修复403
请求头
1
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
编写代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int main(void) {
CURL* curl;
CURLcode res;
long response_code;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000");
// 添加User-Agent头
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
// 设置请求头
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 跟随重定向
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// 执行请求
res = curl_easy_perform(curl);
// 检查请求是否成功
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
else {
// 获取HTTP响应码
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
printf("Response Code: %ld\n", response_code);
}
// 清理
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}编译后运行
运行后状态码依旧显示403
4.请求头中添加referer,修复403成功
referer内容
1
Referer: https://www.bilibili.com/video/BV1d54y1g7db/?spm_id_from=333.788.videopod.episodes&vd_source=5777815674b3f4e5c227299a8de61c9b&p=10
编写代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int main(void) {
CURL *curl;
CURLcode res;
long response_code;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000");
// 添加User-Agent头
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
// 添加Referer头
headers = curl_slist_append(headers, "Referer: https://www.bilibili.com/video/BV1d54y1g7db/?spm_id_from=333.788.videopod.episodes&vd_source=5777815674b3f4e5c227299a8de61c9b&p=10");
// 设置请求头
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 跟随重定向
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// 执行请求
res = curl_easy_perform(curl);
// 检查请求是否成功
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
} else {
// 获取HTTP响应码
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
printf("Response Code: %ld\n", response_code);
}
// 清理
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}编译后运行
运行后持续接收视频流。
5.添加其他请求头,好像没什么用
- 编写代码
1 |
|
编译后运行
运行后持续接收视频流。
6.测试视频文件链接访问是否成功
1.测试直接在浏览器中访问链接,出现403.
1 | https://cn-zjjh-ct-04-06.bilivideo.com/upgcxcode/12/23/1043862312/1043862312-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740903656&gen=playurlv2&os=bcache&oi=22049212&trid=0000dc411d7db69e4c15bd5be682cad39fb5u&mid=67077312&platform=pc&og=hw&upsig=e19fb3c4e1a59cdac50635ec63b051ea&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=6591&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=12625&logo=80000000 |
2.html文件中的video标签访问链接,播放成功
1 | <video controls> |
3.更换其他网站的图片链接,访问成功
1 | https://tx-video.acfun.cn/mediacloud/acfun/acfun_video/bd6c475a93d9ebb4-4b26b55bd0d2cefd0ba7bfecb0fd183d-video_sprite_1.00000.webp?sign=0f4ed05c0a4a37878abcc9855ba34e04&t=1740928838&us=1258026745 |
4. 在代码中下载其他网站中的图片链接,下载成功
1 | https://tx-video.acfun.cn/mediacloud/acfun/acfun_video/bd6c475a93d9ebb4-4b26b55bd0d2cefd0ba7bfecb0fd183d-video_sprite_1.00000.webp?sign=0f4ed05c0a4a37878abcc9855ba34e04&t=1740928838&us=1258026745 |
5.在浏览器中访问bilibili中的图片链接,访问成功
1 | https://bimp.hdslb.com/videoshotpvhdboss/1043862312_bznjdb-0001.jpg@3200w_1800h_50q.avif |
6.在代码中访问http://www.bilibili.com返回状态码200,访问成功
7.在代码中访问视频播放链接,状态码200但是会中断
1 | https://www.bilibili.com/video/BV1d54y1g7db/?spm_id_from=333.788.videopod.episodes&vd_source=5777815674b3f4e5c227299a8de61c9b&p=10 |
8.重新抓包获取视频文件链接,代码中访问成功
1 | https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000 |
7.测试后的结论,抓包链接需要正确,构造头中必须要有User-Agent与 Referer,隔断时间链接会更新
- 抓包到的正确链接
1 | https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000 |
此视频链接中的正确
Referer1
Referer: https://www.bilibili.com/video/BV1d54y1g7db/?spm_id_from=333.788.videopod.episodes&vd_source=5777815674b3f4e5c227299a8de61c9b&p=10
通用的
User-Agent1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
二、下载视频
1.访问并下载到本地
1 |
|
2.打印响应码后下载
1 |
|
3.C语言使用winsock与openssl库下载
- 代码
1 |
|
编译后运行
1
crawlerc.exe "https://xy223x111x152x17xy2409y8c20y5a63y1300y4000yy17xy.mcdn.bilivideo.cn:4483/upgcxcode/12/23/1043862312/1043862312-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740915748&gen=playurlv2&os=mcdn&oi=22049212&trid=0000853733529a33423ab23e6df32ec97c7au&mid=67077312&platform=pc&og=cos&upsig=e51b6e2808d7ec442c434a41391d08d1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50014703&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=1&bw=19327&logo=A0020000"
三、下载视频与音频并合并
B站的文件视频与音频是分开传输的,分别下载视频与音频后再合并就能得到完整的视频。
1.抓包链接
- 视频链接
1 | https://xy118x184x254x15xy.mcdn.bilivideo.cn:8082/v1/resource/1043862312-1-100026.m4s?agrr=0&build=0&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&bvc=vod&bw=19327&cdnid=6591&deadline=1740924377&e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D&f=u_0_0&gen=playurlv2&logo=80000000&mid=67077312&nbs=1&nettype=0&og=cos&oi=22049212&orderid=0%2C3&os=bcache&platform=pc&sign=ba852a&traceid=trxQIUbutkbpFD_0_e_N&uipk=5&uparams=e%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%2Cog&upsig=272fd5db6d304e4cac870e2f6f771dea |
2.音频链接
1 | https://cn-zjjh-ct-04-06.bilivideo.com/upgcxcode/12/23/1043862312/1043862312-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740924377&gen=playurlv2&os=bcache&oi=22049212&trid=000087aa51a0452d416f943b2a10666881a9u&mid=67077312&platform=pc&og=cos&upsig=4dee0bce11d6688494f942a70766ec5b&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=6591&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=0&bw=11342&logo=80000000 |
2.C语言代码分别下载视频与音频
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// 回调函数,将下载的数据写入文件
size_t write_data(void* ptr, size_t size, size_t nmemb, FILE* stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}
// 下载文件函数
void download_file(const char* url, const char* file_name, const char* url_referer) {
CURL* curl;
FILE* fp;
CURLcode res;
// 初始化libcurl
curl = curl_easy_init();
if (curl) {
// 打开文件用于写入
fp = fopen(file_name, "wb");
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
// 设置curl选项
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36");
curl_easy_setopt(curl, CURLOPT_REFERER, url_referer);
// 执行请求
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
// 如果请求失败,打印错误信息
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
// 关闭文件
fclose(fp);
// 清理curl
curl_easy_cleanup(curl);
}
}
// 发送HTTP请求并打印响应状态码函数
void http_request(const char* url, const char* url_referer) {
CURL* curl;
CURLcode res;
long response_code;
// 初始化libcurl
curl = curl_easy_init();
if (curl) {
// 设置curl选项
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_NOBODY, 1); // 不下载内容,只获取响应头
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36");
curl_easy_setopt(curl, CURLOPT_REFERER, url_referer);
// 执行请求
res = curl_easy_perform(curl);
if (res == CURLE_OK) {
// 获取响应状态码
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
printf("Status Code: %ld\n", response_code);
}
else {
// 如果请求失败,打印错误信息
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
// 清理curl
curl_easy_cleanup(curl);
}
}
void DownloadHttp(const char* url, const char* file_name)
{
// 发送HTTP请求并打印响应状态码
const char* url_referer = "https://www.bilibili.com/video/BV1d54y1g7db/?spm_id_from=333.788.videopod.episodes&vd_source=5777815674b3f4e5c227299a8de61c9b&p=10";
http_request(url, url_referer);
fprintf(stdout, "%s\tdownloading....\n", file_name);
// 下载视频文件
download_file(url, file_name, url_referer);
}
int main() {
// 视频文件URL
const char* url_mp4 = "https://xy118x184x254x15xy.mcdn.bilivideo.cn:8082/v1/resource/1043862312-1-100026.m4s?agrr=0&build=0&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&bvc=vod&bw=19327&cdnid=6591&deadline=1740924377&e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D&f=u_0_0&gen=playurlv2&logo=80000000&mid=67077312&nbs=1&nettype=0&og=cos&oi=22049212&orderid=0%2C3&os=bcache&platform=pc&sign=ba852a&traceid=trxQIUbutkbpFD_0_e_N&uipk=5&uparams=e%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%2Cog&upsig=272fd5db6d304e4cac870e2f6f771dea";
// 保存文件名
const char* file_name_mp4 = "video.mp4";
DownloadHttp(url_mp4, file_name_mp4);
// 音频文件URL
const char* url_mp3 = "https://cn-zjjh-ct-04-06.bilivideo.com/upgcxcode/12/23/1043862312/1043862312-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1740924377&gen=playurlv2&os=bcache&oi=22049212&trid=000087aa51a0452d416f943b2a10666881a9u&mid=67077312&platform=pc&og=cos&upsig=4dee0bce11d6688494f942a70766ec5b&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&cdnid=6591&bvc=vod&nettype=0&orderid=0,3&buvid=FF674AE6-BF8E-C29D-963F-A06253F2C1D539260infoc&build=0&f=u_0_0&agrr=0&bw=11342&logo=80000000";
// 保存文件名
const char* file_name_mp3 = "audio.mp3";
DownloadHttp(url_mp3, file_name_mp3);
return 0;
}编译后运行
运行后下载成功。
3.下载后调用FFMPEG合并音频与视频
- 安装ffmpeg
- 编写代码
1 |
|
4.C语言使用ffmpeg库下载并合并音频与视频,合并的视频文件播放速度不对
1 |
|
- 编译后运行
5.最终版,修复播放速度
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
