Android4 学习笔记 4-视频技术概述
流媒体传输分两类
- 实时流媒体:视频为现场直播或使用专用流媒体服务器或使用RTSP等实时协议,它可以传输实况直播,也可以传输完整的音视频文件(专用协议流式)。
- 顺序流媒体:使用普通HTTP服务器,将音视频数据从头到尾方式发送,仅能传输完整的音视频文件。
|
实时流 |
顺序流 |
数据源 |
实时从录制设备上采集(或使用专用协议传输的文件) |
可播放的音频文件 |
服务器类型 |
专用的流媒体服务器:如QuickTime Streaming Server、RealServer、Windwos Media Server、Flash Media Server |
普通HTTP服务器 |
传输协议 |
专用协议 HLS 或RTMP等 |
HTTP协议 |
跳播 |
可随机访问任意片段 |
给定时间,用户只能看已下载部分,而不能跳到还未下载部分 |
主流流媒体协议
|
RTMP |
HLS |
RTSP |
全称 |
Real Time Message Protocol
|
http live stream |
Real Time Streaming Protocol |
上层协议 |
TCP/HTTP |
HTTP |
RTP,RTCP |
软件模型 |
C/S |
B/S |
C/S |
客户端 |
支持Flash类产品的浏览器 支持HTML5浏览器
|
支持HTML5的浏览器 |
播放器 |
二、HLS协议简介 整理自 http://wenku.baidu.com/link?url=bgQtEnrPSvtWGIMAg120cPkDqExA3pP-mgI-6PcII9eUL7b6Gih1Rw7I-R9CbYtn2g5EYet57ed2oB4EEQw6CFmURorR8QfVS-fS-95p83S HLS(HTTP Live Streaming)是苹果公司针对移动设备而开发的基于HTTP协议的流媒体解决方案。在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流,但在使用的过程中是使用的标准的 HTTP 协议,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。在App Store中的视频相关的应用,基本都是应用的此种技术。该技术基本原理是将视频文件或视频流切分成小片(ts)并建立索引文件(m3u8)。支持的视频流编码为H.264,音频流编码为AAC.
三、直播步骤
视频采集 ->编码器 -> 流分割 -> 普通 web 服务(索引文件和视频文件) -> 客户端
视频采集,编码器首先将摄像机实时采集的音视频数据压缩编码为符合特定标准的音视频基本流(一定要使用H.264视频和AAC音频,因为发明这个的是苹果公司,只支持这个),然后给这些封装成成为符合MPEG-2(MPEG 2 TS、MPEG2 PS之所以使用这个,主要是因为声音和视频会交织在一起,也会有关键帧来让视频可以直接播放).
流分割部分在这个中,比起 RTSP 之类和普通点播的最大不同,就是他会给 MPEG-2 分割成很多个 ts 的文件。分割过程大多是按时间来切,根据国外的资料,建议切 10s 一个的文件,如果码流高可以 5 秒一次。在分割还有一点不同,就是这时流分割器会生成一个含有指向这些小TS文件指针的索引文件,所以这个文件也必须在 web 服务器上。每多 10s 时,就会多一个 ts 文件,所以索引也会根着修改成最新的几段视频。最后,这些切分了的小的一系列的 ts 文件,放到普通的 web 服务器中就行了。这时在 CDN 中也是一样,因为请求这些文件会使用标准的 HTTP 协议。索引文件后缀是.m3u8 ,索引文件采用扩展的M3U播放列表格式,其实就一文本。
四、M3u8文件解析
1. Playlist file
一个M3U的Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个URI空白行或是以“#”号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。一个URI表示一个媒体段或是”variant Playlist file“(最多支持一层嵌套,即一个mm3u8文件中嵌套另一个m3u8)以”#EXT“开头的表示一个”tag“,否则表示注释,直接忽略。
2. Tags
#EXTM3U:每个M3U文件第一行必须是这个tag.
#EXT-X-TARGETDURATION:指定最大的媒体段时间长(秒).
#xxx/41551f6d636a0d85815bb407139615bc.ts ts文件路径
- Mars Android视频学习笔记——01_14/15_Handler的使用
- 工作学习笔记——Alljoyn技术、初试Android开发
- 私房库视频学习笔记-小清新BBS系统开发技术归纳
- Mars Android视频学习笔记——01_21/22_广播机制
- Mars Android视频学习笔记——01_18_文件下载
- Android(java)学习笔记144:Android音视频录制类MediaRecorder用法举例
- 视频学习笔记:Android ffmpeg解码多路h264视频并显示
- Android开发学习笔记(13):Android开发常用技术点整理(更新中...)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android(java)学习笔记77:网络编程的概述
- PHP第一季视频教程.李炎恢.学习笔记(一)(第1章 PHP概述(1)、(2)、(3))
- android 学习笔记之开源开发技术和框架
- 视频学习笔记:Android ffmpeg解码多路h264视频并显示
- Android(java)学习笔记102:Map集合功能概述
- android 多媒体部分学习笔记十--简单视频播放
- android 多媒体部分学习笔记十五-----视频录制
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Mars Android视频学习笔记——01_20_XML文件解析
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之02-Objective-C 编程环境概述——黑马 IOS 技术博客