1. dash是什么
关于介绍百度一下就好了,以下是相关介绍
https://it3q.com/article/78
2. 关于dash的开源代码
https://github.com/ireader/media-server
我参照的相关例子是media-server\libdash\test\dash-dynamic-test.cpp,这是用一个flv文件作为输入进行的dash实现
flv解析可以参照:https://www.cnblogs.com/musicfans/archive/2012/11/07/2819291.html
编译好之后,可以直接跑一下开源的例子,例子显示会一卡一卡的,是因为http请求数据速度 < 生成视频片段的速度,导致会丢一些数据,同步做的不好。
3. 海思上实现dash直播
1)fmp4的生成
首先海思上venc出来的数据不同于flv封装好的数据,需要知道其中的差异,然后再将venc编码好的数据封装成dash所需要的格式
venc出来的数据叫annex-b,本人配置的是h265的编码
转换其实media-server那边也有相关的例子,media-server\libmov\test\mov_writer_h265.c
实际上annex-b转fmp4只需用到了media-server\libflv\source下的mpeg4-annexbtomp4.c和hevc-annexbtomp4.c上面的接口
关于HVCC的生成这边也有相关的例子:
hevc-annexbtomp4.c --》void hevc_annexbtomp4_test(void)
到这里应该可以实时将venc编码出来的h265数据装换成fmp4
2)数据的传输
数据传输采用的是http,流程如下:
播放器请求.mpd,服务器发送.mpd
播放器请求init.m4v,服务器发送init.m4v
播放器请求.mpd,服务器发送.mpd
播放器请求time.m4v,服务器发送time.m4v
播放器请求.mpd,服务器发送.mpd
播放器请求time.m4v,服务器发送time.m4v
黄色部分循环
4. 关于我遇到的问题
1)花屏
因为linux和liteos对于venc编码出来的数据处理不同,具体看海思提供的demo
2)编码速度快于播放器请求数据的速度,因为我用了队列在存储转换得到的fmp4,播放太慢就会导致队列满了,丢弃掉一些数据,画面看起来一卡一卡的
大概率是pts/dts不对,我看media-server上的例子pts基本是1s,因为不太清楚里面的实现,我把帧率改成30,一个GOP刚好就1s,一个GOP存储成一个fmp4片段,结果就好了很多
标签:播放器,dash,mpd,m4v,笔记,server,DASH,直播,服务器发送 From: https://www.cnblogs.com/Just-a-calm-programmer/p/17012634.html