H264和aac 或者mp3 合并成为ts,并生成m3u8,本地通过http进行观看,支持手机和浏览器播放器观看
ts文件分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息。
我们先看ts文件的格式分析
通过easyice的工具分析

工具的下载地址 https://pan.baidu.com/s/1o6MDf1C#list/path=%2Feasyice
可以看出ts 文件每一个片都是188个字节,TS 流都是固定等长的188字节包 ,
每个188个字节可以是pat、pmt、音视频包数据,pmt主要是说明这个ts有那些格式,具体格式可以参考pes的

参考的代码如下
第一步写入pat和pmt,在ts文件头就可以

int CTsEncoder::OpenFile(std::string tsFileName)
{
AutoLock(&mutex_Lock);
m_file = fopen(tsFileName.c_str(),"wb");
if (!m_file)
{
return -1;
}
//打开文件的时候写入pat和pmt
PutPat();
PutPmt();
return 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
第二部把视频帧进行188个字节的切片

void CTsEncoder::handleVideo(uint8_t* vidoebuf,uint32_t bufsize,int64_t tic,bool bkey)`在这z里插入代码片`
{
int64_t ticFrameRate;
ticFrameRate =tic;// CheckTimeStamp(tic);

// 查找NAL起始字节
bool bBegin = true;
buffer pesBuffer;
buffer tsBuffer;
//es 打包成为pes
CreatePesVideoPacket(&pesBuffer,(uint8_t *)vidoebuf,bufsize,bkey,ticFrameRate);
bool bFritsTsPacket = true;;
uint32_t nread = 0;
int remainSize;
//进行切片
while(nread < pesBuffer.d_cur)
{
if (bFritsTsPacket)
{
bFritsTsPacket = false;
remainSize = pesBuffer.d_cur - nread;
//进行第一个188字节打包,打包主要是adaptation_field 时间戳、pcr
if(remainSize <= FRISTTSLEN)
{
PutFristTsVideo(&tsBuffer,ticFrameRate,FRISTTSLEN - pesBuffer.d_cur);
append_data(&tsBuffer,pesBuffer.data,pesBuffer.d_cur);
}
else
{
PutFristTsVideo(&tsBuffer,ticFrameRate,0);
append_data(&tsBuffer,pesBuffer.data,FRISTTSLEN);
}
nread = FRISTTSLEN;
}
else
{
remainSize = pesBuffer.d_cur - nread;
//中间填充数据
if ( remainSize >= MINTSLEN )
{
PutMiddleTsVideo(&tsBuffer);
append_data(&tsBuffer,pesBuffer.data + nread,MINTSLEN);
nread += MINTSLEN;
}
else
{
//结尾由于数据不够需要填充0xff的数据
PutlastTsVideo(&tsBuffer,MINTSLEN - remainSize);
append_data(&tsBuffer,pesBuffer.data + nread,remainSize);
nread += remainSize;
}
}
}
WritetoFile(&tsBuffer);
tsBuffer.Clear();
m_bVideobegin = true;
}
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
本机生成的ts,通过本地的http服务器可以观看到hls协议

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:8
#EXTINF:8,
2019_04_10_14_31_42.ts
#EXTINF:8,
2019_04_10_14_31_58.ts
#EXTINF:8,
2019_04_10_14_32_08.ts
#EXTINF:8,
2019_04_10_14_32_17.ts
#EXTINF:8,
2019_04_10_14_32_25.ts
#EXTINF:8,
2019_04_10_14_32_33.ts
#EXTINF:8,
2019_04_10_14_32_42.ts
#EXTINF:8,
2019_04_10_14_32_50.ts

live.m3u8文件的详细内容
demo下载地址http://www.pudn.com/Download/item/id/3878596.html
demo的使用说明
1.打开testTs.exe 会在D:/live目录下生成ts文件和m3u8格式
2.nginx-1.5.7执行底下的exe文件,默认的http端口是80
3.通过http://ossrs.net/players/jwplayer6.html?vhost=demo.srs.com&app=live&hls_autostart=true&stream=livestream 地址打开http://127.0.0.1:80/live/live.m3u8 就可以观看
可以需要在d盘下配置一个flash的跨域文件
crossdomain.xml
如有问题请联系 qq595431256
---------------------
作者:du.剑子仙迹
来源:CSDN
原文:https://blog.csdn.net/weixin_42330091/article/details/89176924
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/meitooth/p/10684578.html

H264和aac 封装成为ts,并生成m3u8相关推荐

  1. ffmpeg h264和aac封装为mp4文件

    1.I帧/P帧/B帧 I帧:帧内编码图像帧,也叫关键帧,包含一幅完整的图像信息,不含运动矢量,在解码时不需要参考其它帧图像.在闭合式GOP(画面组)中,每个GOP的开始是IDR帧,且当前GOP的数据不 ...

  2. ffmpeg 视频转ts切片 生成m3u8视频播放列表

    近期做视频点播,要求将视频文件切片成ts文件.经搜索得到以下两个命令,可完成这个任务. 一  首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件       1.可以预先使用ffpro ...

  3. RTP协议封装H264/H265/AAC

    <RTSP实时音视频传输介绍> 目录 一.前言 二.RTP基本格式介绍 1.RTP 固定头 2.RTP 扩展头 3.RTP 载荷 三.RTP封装H264 1.封装包类型 四.RTP封装H2 ...

  4. h264和aac格式介绍及mp4文件的封装

    mp4封装 目录 h264视频流格式介绍 aac音频流格式介绍 h264视频文件读取 通过帧索引解析h264文件 通过解析h264结构读取文件 aac音频文件读取 mp4封装 初始化 数据封装 关闭m ...

  5. H264和音频流打包成TS流 (MPEG2-TS)

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80865920 [本系列相关文章] H26 ...

  6. H264和AAC合成FLV案例

    H264和AAC合成FLV案例 目录 FFmpeg合成流程 FFmpeg函数:avformat_write_header FFmpeg结构体:avformat_alloc_output_context ...

  7. Android直播开发之旅(17):使用FFmpeg提取MP4中的H264和AAC

    最近在开发中遇到了一个问题,即无法提取到MP4中H264流的关键帧进行处理,且保存到本地的AAC音频也无法正常播放.经过调试分析发现,这是由于解封装MP4得到的H264和AAC是ES流,它们缺失解码时 ...

  8. C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

    前言 当你认真的写完客户端和服务器端的时候可能不需要再继续往下看关于播放器的代码和说明,因为你已经掌握了如何转换VC++代码的技巧了,加上GOOGLE再来完成这个播放器应该算小菜了.但是作为我的系列, ...

  9. avi 生成 m3u8/ts 文件

    使用ffmpeg 下载:FFmpeg 点我进入官网 下载后解压文件,并把bin 目录 添加到环境变量中,步骤省略 测试环境变量  cmd 任意目录 ffmpeg.exe -version 生成m3u8 ...

  10. 1小时学会:最简单的iOS直播推流(六)h264、aac、flv介绍

    最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...

最新文章

  1. python formatters 与字符串 小结 (python 2)
  2. 第七天总结:字符编码
  3. springboot之jackson的两种配置方式
  4. [RHEL5企业级Linux服务攻略]--第2季 Samba服务全攻略答疑贴
  5. css 图片自适应_img图片自适应object-fit
  6. 大屏监控系统实战(5)-父工程搭建及前端相关配置
  7. NFS介绍,NFS服务端安装配置,NFS配置选项
  8. VS-RK3399 and VS-RK3288 Audio 开发指南
  9. 常用的MATLAB建模工具箱
  10. matlab打开慢的原因,Matlab运行速度/效率受哪些因素影响?
  11. 面试记录-蚂蚁金服-算法工程师(共四面)通过
  12. 修行一定要在寺院里吗,出家人离开寺院修行,都属邪门外道吗?
  13. 北大数学系女神推荐的几个硬核IT公众号
  14. python爬取下厨房网站首页图片request+bs4
  15. uniapp使用picker
  16. 计算机考试文科生报什么专业好就业,文科生也能报考理工科专业?这4个专业不仅能报考,毕业前景大好...
  17. linux下无法访问硬盘
  18. java wrap()_Java中的CharBuffer wrap()方法
  19. java撞南墙:桌面应用与web开发
  20. uni-app【数据缓存API】

热门文章

  1. 无线渗透-----aircrack-ng破解WEP加密
  2. pygame外星人入侵
  3. Java.util包简单总结
  4. Ubuntu系统如何屏幕截图
  5. Java 10大骚操作写法,亮瞎boss的双眼!
  6. 【BZOJ4484】【JSOI2015】最小表示(拓扑排序,bitset)
  7. Retrofit2+RxJava2+ButterKnife框架搭建步骤
  8. word2vec与相关应用
  9. linux 系统基本设置
  10. Elastic:关于索引生命周期ILM的一些试验;warm,cold,delete节点中min_age设置的是增量还是累计值