HLS 学习

m3u8 笔记:


在IOS device和mac上可以用http的方式进行分发,其中playlist标准为由m3u扩展而来的m3u8文件,媒体文件为MPEG2-TS或者AAC文件(audio only)。


m3u8文件有两种应用场景:
multi bitrate adaptive streaming
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8
sbr bitrate adaptive streaming
#EXTM3U
#EXT-X-TARGETDURATION:5220
#EXTINF:5220,
http://media.example.com/entire.ts
#EXT-X-ENDLIST
 
 
rfc doc:
http://tools.ietf.org/html/draft-pantos-http-live-streaming-06
m3u8 文件是m3u文件的扩展。在该rfc中定义了扩展的关键字:
其中:
#EXT-X-TARGETDURATION
定义每个TS的最大的duration。
#EXT-X-MEDIA-SEQUENCE
定义当前m3u8文件中第一个文件的序列号,每个ts文件在m3u8文件中都有固定唯一的序列号,该序列号用于在MBR时切换码率进行对齐。
#EXT-X-KEY
定义加密方式和key文件的url,用于取得16bytes的key文件解码ts文件。
属性:
METHOD
URL
#EXT-X-PROGRAM-DATE-TIME
第一个文件的绝对时间
#EXT-X-ALLOW-CACHE
是否允许cache。
#EXT-X-ENDLIST
表明m3u8文件的结束。live m3u8没有该tag。
#EXT-X-STREAM-INF
属性:
BANDWIDTH
PROGRAM-ID
CODECS
#EXT-X-DISCONTINUITY
当遇到该tag的时候说明以下属性发生了变化:
file format 
number and type of tracks
encoding parameters
encoding sequence
timestamp sequence
#EXT-X-VERSION
-------------------------------------------------------------------------------------




MPEG2-TS是一种封装格式,所有的video,audio以及辅助信息(PAT,PMT)都被封装成为188bytes的TS_packet.在TS中用PID来区分不同的stream.其中有一些特殊的PID,如PAT的pid固定是0x0000.
标准是:iso13818-1
优点是每个包都有固定大小,在网络传输中和文件切割时比较方便;
缺点是因为每个包都是188bytes,所以必然会有padding;从而浪费一定的空间,当sample比较小的时候浪费是比较严重的,此时能够通过将多个sample压缩进行打包的方式来实现。
在http live streaming中只需要实现部分标准。
PSI(program specific information)信息:
PAT(program_association_table):是由program_association_section构成。
每个PAS的结构如下图所示:


由上图可以看出PAS用来指定program_map_pid和network PID。对于m3u8 streaming 中network PID 并不需要实现。


PMT(program_map_table):用来指定每个节目中有几路es stream,其中每个stream的PID以及一些相关的描述信息。


PES_packet():用来打包es的格式。其中比较重要的信息有DTS、PTS信息。详细信息请查阅iso13818-1标准。
TS_packet(transport_packet):用来打包PES_packet和PSI信息。
在MPEG2-TS中PID是一个很重要的概念,PID是流的唯一标示符,相同的PID指定的是相同类型的内容。服务器和客户端端是通过PID来实现复用和解复用的。
客户端的解码过程:
1.找到TS_packet的开始位0x47。
3.找到PID为0x0000的PAT,将PAT进行解包,得到每路节目对应的PMT PID(在m3u8 streaming中只有一路节目)。
4.根据PAT解包得到的PMT PID得到PMT,同理将PMT进行解包得到ES pid和对应的类型。
5.根据PMT解包得到的ES PID,将该路流解包得到PES_packet,从而得到ES流和DTS,PTS。此时就能送到decoder去解码了。
服务器端的编码过程:
1.更具PMT PID来生成PAT,并打包成TS_packet来写入文件。
2.根据ES的PID和类型生成PMT,并打包成TS_packet来写入文件。
4.接收video/audio sample,并将一个或者多个sample打包成为PES_packet.
5.将打包好的PES_packet封装成TS_packet写入文件。
<think>嗯,用户之前询问了关于Vitis HLS学习资料和方法,现在又补充了一个引用内容,看起来是想深入了解这方面的学习路径。用户提到的引用[1]主要涉及TLP(任务级并行)和控制驱动TLP的具体示例,以及Vitis HLS工具的一些特性,如自动化代码修改、接口推断和应用加速流程。这些内容属于Vitis HLS中较高级的主题。 用户可能是个FPGA开发者或学生,正在尝试使用Vitis HLS进行高层次综合开发,特别是关注如何利用其加速计算性能。ta特意提到"学习资料和方法",说明需要的是系统性的学习资源而非零散信息。考虑到Vitis HLS的复杂性,用户应该具备一定的硬件描述语言基础。 从专业角度,学习Vitis HLS需要分层推进: 基础部分必须掌握接口协议(如AXI-Stream/MM)和编译指示(pragma)的使用方法,这在官方文档UG1399中有详细说明; 中级应用需要理解流水线优化和数据流控制,用户引用的TLP示例就属于这个层面; 高级优化则涉及内存布局调整和计算单元复制,这对实现低延迟高吞吐很关键。 用户提供的引用中提到的"Vitis内核流程接口标准"很重要,因为.xo文件的生成必须严格遵循这些规范。另外提到的"接口推断"功能是Vitis HLS的核心优势,能自动生成硬件接口,这点在学习时需要重点实践。 值得注意的潜在需求是:用户可能正在尝试实现某个具体加速算法(比如图像处理或矩阵运算),需要通过学习来解决问题。因此在推荐资源时,除了通用教程,还应该包含具体领域的应用案例。 </think>以下是为您整理的Vitis HLS系统学习路径及核心资源,结合官方文档和工程实践方法论: ### 一、官方核心文档(必读) 1. **基础教程** 📚 [UG1399 - Vitis HLS用户指南](https://docs.xilinx.com/r/2022.2-English/ug1399-vitis-hls) - 完整工具链操作流程 - 接口协议详解(AXI-Stream/MM, FIFO等) - 关键编译指示(pragma)语法手册 2. **优化方法论** 📘 [UG1237 - 高层次综合优化指南](https://docs.xilinx.com/r/2022.2-English/ug1237-vitis-hls-optimization) - 流水线(PIPELINE)与数据流(DATAFLOW)优化技巧 - 内存分区策略(partition/reshape) - 循环展开(unroll)与数组映射(map) ### 二、实战学习路径 #### ▶ 阶段1:基础开发流程 ```mermaid graph LR A[创建C++算法] --> B[接口约束指定] B --> C[优化指令插入] C --> D[综合生成RTL] D --> E[协同仿真验证] ``` - **关键实验**:矩阵乘法/图像滤波器的HLS实现 - **要点**:掌握`#pragma HLS INTERFACE`接口生成规则[^1] #### ▶ 阶段2:性能优化进阶 | 优化维度 | 技术手段 | 预期收益 | |----------------|---------------------------|------------------------| | 吞吐量 | 流水线+数据流 | 提升2-5倍时钟效率 | | 资源利用率 | 循环分割+数组重构 | 减少BRAM/DSP消耗 | | 时延 | 任务级并行(TLP) | 降低任务启动间隔 | #### ▶ 阶段3:系统集成 ```python # 典型Vitis内核集成流程 project = vitis.create_project(name="accel_kernel") project.add_kernel("kernel.cpp", target=hw_platform) project.build(target="hw_emu") # 硬件仿真模式 project.package(output_file="accel.xclbin") # 生成可编程逻辑文件 ``` ### 三、补充学习资源 1. **GitHub工程案例** - [Xilinx/Vitis-Tutorials](https://github.com/Xilinx/Vitis-Tutorials) 中的`HLS`目录 - 重点练习:`introspection`(设计分析)和`optimization`(优化案例) 2. **视频课程** - 赛灵思官方YouTube频道《Vitis HLS Code Examples》系列 - 北大《高能效计算加速》MOOC(第5章HLS专题) 3. **调试技巧** - 使用`#pragma HLS LATENCY min/max`约束时延 - `vitis_analyzer`查看综合报告中的`Timing/Loop Analysis` > ⚠️ 注意:开发时需严格遵循**Vitis内核接口标准**[^1],包括: > - 顶层函数参数必须通过`INTERFACE`编译指示显式定义 > - 控制信号需采用`ap_ctrl_chain`协议 > - 突发传输需使用`max_read_burst_length`属性 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值