解决使用mp4v2封装的mp4文件在Wowza的hls上无法播放问题

针对基于海思35xx的嵌入式设备录制的mp4文件,在Wowza服务器上通过HLS推送时出现有声无画的问题进行了深入分析。通过调整mp4v2库中的MP4WriteSample函数参数isSyncSample,确保关键帧正确标记,最终解决了HLS播放问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

一.问题:基于海思35xx的嵌入式设备使用mp4v2封装的mp4文件,放在Wowza的点播中,用hls推流出去,无法播放。

二.准备:由于需要使用了wowza作为推流服务器。所以嵌入式设备录制的mp4文件需要兼容wowza的

rtmp(rtmp://192.168.45.200:1935/vod/sample.mp4)、

rtsp(rtsp://192.168.45.200:1935/vod/sample.mp4)、

hls(http://192.168.45.200:1935/vod/mp4:sample.mp4/playlist.m3u8,苹果设备播放所用大都带m3u8索引)

在测试间的服务器(服务器IP:192.168.45.200)上搭建了wowza(WowzaStreamingEngine-4.3.0-windows),安装及使用方法参见下面链接下载后的附件:

wowza软件及使用文档

https://pan.baidu.com/s/1h2js29Onbtce8gmqXlHx8Q

安装好后,在浏览器输入http://192.168.45.200:8088/  可以访问Wowza

在页面上点击 Test Players

 

会显示出:

 

 

关于Apple Hls,在很多电脑的浏览器上是不能播放的,因为不支持html5:“HTML5 or HLS is notsupported in this browser”

但可以在手机上验证这个mp4文件的hls和rtsp播放效果。点击Mobile,会看到生成的两个地址。

在Wowza网页上验证:

rtmp(rtmp://192.168.45.200:1935/vod/sample.mp4)、

在手机浏览器验证:

rtsp(rtsp://192.168.45.200:1935/vod/sample.mp4)、

hls(http://192.168.45.200:1935/vod/mp4:sample.mp4/playlist.m3u8),

 

如果都都能正常播放,说明这个视频没问题。

 

 

这里面的sample.mp4文件所在的服务器位置是Wowza的安装位置:

 

C:\Program Files (x86)\Wowza Media Systems\WowzaStreaming Engine 4.3.0\content

 

 

如果需要验证本地生成的文件是否正确,只需要替换这个sample.mp4即可。

三.分析及解决

将本地的视频替换sample.mp4后,发现rtmp、rtsp播放正常,但hls有声音无视频,

 

查看Wowza的log日志发现:

 

 

提示:

MediaReaderH264Cupertino.indexFile[vod/_definst_/sample.mp4]:MP4 video sync table [stss] is empty, will not be able to play video track.

①.说文件stss是空的,查看生成mp4的mp4v2库源码,没找到stss的启动的方法。

查看了(MP4的几个概念 https://blog.youkuaiyun.com/charleslei/article/details/51084046)。没有头绪。

②.网上搜,看到一篇“[html5]解决html5中video标签无法播放mp4问题的办法_极酷播放器官方网站 http://www.cuplayer.com/player/PlayerCode/Html5/2017/1030/3228.html

       因为将本地录制的mp4用格式工厂转码后(输出mp4,输出的配置选择AVC高质量和大小),hls能播放了。所以以为是编码问题。

       后同事说是封装问题,因为他用vlc对比了hls能播放的mp4文件和不能播放的mp4文件,发现两者的视频都是h.264编码,音频都是aac编码。所以他猜测是封装的格式不一致导致的。

     因为本地录制的文件使用mp4v2库是mpeg封装,而参看“[html5]解决html5中video标签无法播放mp4问题的办法”说的html5能播放的是H264封装的文件。原来是我理解错了,mp4v2库只是负责封装的一个工具。

 

③.对比了Wowza的sample.mp4文件和本地录制的文件(也对比了格式转换前后的mp4文件),两者都是mpeg封装,所以不是封装的问题。依然需要回归到程序中进行追查问题。

 

④.再次查看"MP4的几个概念 - 优快云博客"知道,其实stss是mp4v2库形成mp4文件必选的一个box。不可能是因为少了stss,但绝对和sync table [stss]有关系。

       再次回到mp4v2库的使用上,看到一个文章使用mp4v2将aac音频h264视频数据封装成mp4开发心得https://blog.youkuaiyun.com/lh2016rocky/article/details/70882301”。

 

里面提到MP4WriteSample的isSyncSample 参数,

 

      查看程序的mp4模块,发现自己在用此函数时,没有考虑的到isSyncSample 参数,所以写入mp4文件里的视频帧都标记成了关键帧。不清楚是否和hls不能播放本地录制的文件有关系。

       尝试修改了下,将每帧是否关键帧的判断加上。生成的mp4文件替换到Wowza中,hls可以正常播放。

 

四.备注

本次在网上搜,发现mp4v2库包含封装和获取音视频两种功能,当获取时,会用到MP4ReadSample、MP4GetTrackNumberOfSamples等这些函数。

“MP4V2 判断帧是否为关键帧 IsSyncSample 异常. - 优快云博客 https://blog.youkuaiyun.com/w839687571/article/details/44946571”

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值