用HTTP协议传输媒体文件 学习
用HTTP协议传输媒体文件可以分两个阶段,第一个阶段是Progressive Download(渐进式下载方式)阶段,第二个阶段是HTTP streaming(HTTP流化)阶段。其中,第一个阶段可以看成第二个阶段的前身。
- Progressive Download
渐进式下载是一种顺序流式传输,它是一种简单的从HTTP WEB服务器进行文件下载的方式,其中“渐进”指的是用户可以一边下载一边播放,而不需将整个媒体文件下载完毕再播放。在渐进式下载中,客户端用户发送HTTP请求流媒体文件,服务器收到请求之后通过HTTP响应发送媒体文件给客户端用户。客户端与服务器交互过程如图:

从严格意义上讲,这种下载方式不是真正的流式传输,所以它也称为“伪流媒体”,主要原因是它与普通文件下载方式没有本质的区别,不支持实时的流媒体传输,当用户停止播放它仍然继续下载,直到整个媒体文件下载完毕或者播放界面被关闭,下载的媒体文件会被保存在客户端的磁盘上。
- HTTP streaming
HTTP流化技术的主要思想是在服务器端将多码率的媒体文件分割成一个个小的媒体切片,客户端通过HTTP请求一个个小的媒体切片,服务器收到请求通过HTTP响应发送媒体切片。服务器和客户端交互的过程中,可以由客户端或服务器实时检测网络带宽情况,随时可以切换媒体切片的质量级别(不同码率对应不同质量级别)。保证播放的连续性和流畅性,提升用户体验

采用HTTP协议作为流媒体传输的协议栈,主要分成网络层、传输层和应用层。

在HTTP流化方式中,一个媒体文件有多种码率的版本(可以砸服务器端动态产生也可以静态存储),其中高码率对应较高质量级别,反之亦然。服务器实现媒体文件的切片、容器格式封装等等之后,在服务器和客户端交互的过程中,根据宽带资源的变化,动态的在不同质量级别的媒体文件切片之间切换,这种切换的发起者可以是服务器或者客户端,即有服务器控制的自适应策略和客户端控制的自适应策略。
- 网络部署
HTTP流化技术在网络部署中不需要假设专有的流媒体服务器,使用标准的HTTP WEB服务器即可,便于大规模部署,而且,因为采用HTTP协议,HTTP流化能很好的支持防火墙的穿越与NAT的转换。
- 流媒体编码格式
数字化的音频和视频信息携带着大量的数据量,而数据量又是网络传输的敏感因素,因此,在进行网络传输之前,需要对音频和视频进行必要的压缩编码,降低网络传输的压力,目前主流的基于HTTP流化的流媒体技术中,一般采用H.264+AAC的视频和音频编码组合。
H.264的编码分为两层,视频编码层VCL(video coding layer)和网络提取层NAL(network abstraction layer).视频编码层负责对视频数据的编解码,包括运动估计、熵编码等内容;网络提取层负责将编码后的数据进行封装,方便视频数据在异构网络上传输。网络提取层的引入,使得H.264视频编码格式的媒体文件具有较强的网络适应性,能容易地在不同网络上传输。
- 流媒体文件的容器格式
我们一般说流媒体文件格式或者其后缀名指的就是文件的容器格式,如MP4格式。对于一种容器格式, 可以包含多种不同的轨道,每个轨道可以是压缩编码后的视频、音频或者文本等信息。容器的作用是把压缩编码后的视频和音频数据放在同一个文件的不同轨道,添加一些信息方便同时回放,并且将数据尽可能紧凑的排布。
容器格式一般应包含三个部分:
Header:标记文件类型,音视频码流等基本属性信息。
Index:索引表,视频frame对应的offset,size,timestamp等信息。
Stream:音视频裸数据。
有些容器格式(如AVI)可能没有索引表,但在需要的时候要根据其他信息找到offset和size等信息,自己建立索引表。
MP4文件格式是个十分开放的容器,几乎可以用来描述所有的媒体结构。MP4容器中的媒体格式描述与媒体数据时分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列。

图中给出了MP4容器格式的一些主要box,可以看出,MP4容器格式是一种逐级嵌套的容器格式。MP4容器格式由若干个box组成,每个box有类型和长度,可以填充不同的信息或者数据。box可以理解为俄数据对象块,有些box中可以包含其他box,这种box称为contained box。标准的box开头的四个字节(32位)为box size,该大小包括box header 和box body整个box的大小。size 后面紧跟的32位为box type,一般是四个字符,如“ftyp"、”moov"等,每个box都有固定的格式和需要填充的信息。其中ftyp box有且只有一个,不能被其他box包含。该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。moov box同样只有一个,一般情况下,“moov"会紧随"ftyp"出现,一般情况下,moov中会包含1个mvhd和若干个trak。其中mvhd为header box,一般作为moov的第一个子box出现(对于其他container box来说,header box都应作为首个子box出现),trak必须包含一个tkhd和一个mdiz,此外还有很多可选的box.
在所有的box中,填充信息和数据比较多且比较重要的box为stbl box(sample table box),该box包含了sample所有时间和位置的信息,以及sample的编码信息等,是MP4最复杂的box,可以含有stsd,stts,stsz等下一级box.
stsd(sample description box):该box必不可少,包含了数据类型信息和编码的信息,例如:音视频的编码方式、视频的宽和高、音频的声道。
stts(Time to Sample Box):存储了sample的时长信息,描述了sample时序的映射关系,我们通过它可以找到任何时间的sample.
stsz(sample size box): 包含了每个sample的大小信息。
以上box都 属于容器格式的索引表部分,在MP4容器格式中,音视频的裸数据在mdat box中存储。
H.264编码视频流是由一个个NAL(network abstraction Layer)单元组成的,同城一帧视频数据封装在一个或多个NAL单元。

- 流媒体文件切片

- 流媒体文件切片



- 容器格式转换

- 自适应算法的两种模式

- HTTP层自适应算法



用HTTP协议传输媒体文件 学习的更多相关文章
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- [转] 用协议分析工具学习TCP/IP
一.前言 目前,网络的速度发展非常快,学习网络的人也越来越多,稍有网络常识的人都知道TCP/IP协议是网络的基础,是Internet的语言,可以说没有TCP/IP协议就没有互联网的今天.目前号称搞网的 ...
- 基于BT协议的文件分发系统
基于BT协议的文件分发系统构成: 1.一个Web服务器:保存着种子文件 2.一个种子文件:保存共享文件的一些信息(文件名,文件大小 ,Tracker服务器地址,torrent为后缀) ...
- python调用Moxa PCOMM Lite通过串口Ymodem协议发送文件
本文采用python 2.7编写. 经过长期搜寻,终于找到了Moxa PCOMM Lite.调用PCOMM.DLL可以非常方便的通过串口的Xmodem.Ymodem.Zmodem等协议传输文件,而无需 ...
- PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...
- Python文件学习
Python文件学习 文章 Python文件学习 open函数 基本的用法模式:file_object=open('',access_mode='r',buffering=-1) 其中access_m ...
- vsftpd-基于ftp协议的文件传输服务器软件
第一部分:在Linux上部署vsftpd服务 1. vsftpd简介 1.1 vsftpd是什么? ftp(File Transfer Protocol)文件传输协议.(实现不同操作系统之间文件的传输 ...
- Delphi/XE2 使用TIdHttp控件下载Https协议服务器文件[转]
之前的一篇博文详细描述了使用TIdhttp控件下载http协议的文件,在我项目的使用过程中发现对于下载Https协议中的文件与Http协议的文件不同,毕竟Https在HTTP协议基础上增加了SSL协议 ...
- python第三方库——xlrd和xlwt操作Excel文件学习
python第三方库——xlrd和xlwt操作Excel文件学习 1安装: C:\Users\Lenovo>pip install xlwtCollecting xlwt Downloadin ...
随机推荐
- go语言之进阶篇结构体指针类型匿名字段
1.结构体指针类型匿名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte ...
- SCSI contrller的几种类型的区别
在VMware vSphere Web Client中, 可以为虚拟机添加一个新的SCSI controller, 选项中包含如下的类型, 那么他们有什么区别呢? 如何选择呢? BusLogic ...
- Android -- 保存文件
背景 我们以常见 ...
- ECMAScript5之Object学习笔记(二)
继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...
- javascript进行遍历
javascript进行遍历 <!doctype html> <html lang="en"> <head> <meta charset= ...
- [Android系列—] 2. Android 项目文件夹结构与用户界面的创建
前言 在 [Android系列-] 1. Android 开发环境搭建与Hello World 这一篇中介绍了怎样高速搭建Android开发环境, 并成功了建立一个没有不论什么代码更改的 Androi ...
- docker入门——构建镜像
前面我们已经介绍了如何拉取已经构建好的带有定制内容的Docker镜像,那么如何构建自己的镜像呢? 构建Docker镜像有以下两种方法: 使用docker commit命令. 使用docker buil ...
- 开源 免费 java CMS - FreeCMS1.9 会员权限管理
项目地址:http://www.freeteam.cn/ 会员权限管理 管理会员可使用的权限.会员在使用某一特定功能时,如投稿.可依据此会员所在会员组是否有投稿权限来决定会员能否够使用投稿功能. 1. ...
- QQ2010如何开启透明效果皮肤
QQ2010可在WIN7下实现皮肤透明效果. 腾讯已于近日发布了QQ2010的BETA版本,经笔者试验,可在WIN7下实现皮肤透明化效果. 设置如下: 1.先打开QQ皮肤控制面板,如下: 2.然后任选 ...
- linux 用户管理,用户权限管理,用户组管理
linux 用户管理,用户权限管理,用户组管理 一:ls -l 命令 解释 第个d表示是目录,如果是文件是-,如果是连接是l 第2到4个 rwx 表示创建者的操作权限 r 读,w 写,x 执行 第5到 ...