了解如何获取mpd视频

1、mpd概述

1.定义:MPD文件本质上是一个描述性文件,它不包含实际的视频或音频数据,而是提供了获取这些数据的路径和方式。
2.结构:MPD文件的结构由多个元素组成,每个元素描述了一种媒体资源的不同表现形式,如不同的分辨率或码率
3.分段传输:MPD文件中的媒体资源通常被分割成多个小片段,这些片段以m4s为扩展名,并通过HTTP进行传输。
4.自适应播放:MPD文件支持动态自适应流媒体播放,可以根据网络状况自动调整视频质量,以保证流畅播放
5.移动端播放:MPD格式适用于多种移动设备,特别是在iOS设备上有较好的兼容性。
6.实时流媒体:由于其自适应特性,MPD格式非常适合用于实时流媒体传输,如在线直播和视频点播服务

2、具体解析mpd文件

我们下载mpd链接后,会得到一个文件,使用记事本打开文件后,会得到一个类似如下例子的文本。(文字发不出来,就看图吧)
在这里插入图片描述

mpd内描述了两种类型(mimeType)的文件:
audio和video,即音频和视频。
视频又分为不同分辨率的video,如上图就分为720p和1080p
audio包括了一个*.mp4的初始段一连串*.m4s媒体段
video包括了一个*.mp4的初始段一连串*.m4s媒体段

注:
1.上图的媒体段是一个MP4, Number通常是从1开始一直增加到某个整数,因为m4s有很多个,这个大家下载的时候可以试探一下。
2.有些mpd文件内的媒体段是一个列表,包含了要下载的媒体段。

3、下载mpd文件内视频的思路

操作思路是
1、合并音频的*.mp4+*.m4s > 得到 audio.mp4
2、合并视频的*.mp4+*.m4s > 得到 video.mp4
最后再合并音频和视频
3、合并audio.mp4和video.mp4 > 得到final.mp4

4、需要注意的一些问题

4.1 单独的m4s打不开

单独下载的音频或者视频的.mp4和.m4s,都是无法打开的
只有分别合并后,成为audio.mp4和video.mp4才可以打开
当然,audio.mp4只有声音video.mp4只有视频

4.2 使用ffmpeg合并m4s报错

我在用ffmpeg合并音频的*.mp4+*.m4s 和视频的*.mp4+*.m4s时,报错了,如下图

合并时的报错

之后查询了资料,发现是音视频的初始段内,一般用来存储解码器初始化参数和配置信息 SPS、PPS 等元数据。而媒体段内没有这些元数据,使用ffmpeg合并时,就显示文件不完整、损坏或格式不正确。
所以我是用了shutil.copyfileobj合并这些文件,不过最后的合并还是使用了ffmpeg,合并函数如下图

def mpd_merge_files_with_shutil(file_list, output_file):
    """
    使用shutil库将多个文件合并为一个文件。
    :param file_list: 要合并的文件列表
    :param output_file: 输出文件的路径
    """
    with open(output_file, 'wb') as outfile:
        for fname in file_list:
            with open(fname, 'rb') as infile:
                shutil.copyfileobj(infile, outfile)

参考资料
从M3U8(TS)或MPD(M4S)获取视频
M4S格式介绍及对B站缓存文件方案的思考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值