一.问题:基于海思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.csdn.net/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的几个概念 - CSDN博客",知道,其实stss是mp4v2库形成mp4文件必选的一个box。不可能是因为少了stss,但绝对和sync table [stss]有关系。

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

里面提到MP4WriteSample的isSyncSample 参数,

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

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

四.备注

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

“MP4V2 判断帧是否为关键帧 IsSyncSample 异常. - CSDN博客 https://blog.csdn.net/w839687571/article/details/44946571”

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

  1. 使用FFmpeg的SDK库实现将H.264流封装进MP4文件时全局SPS、PPS与流中SPS、PPS冲突的问题

    一.问题 1. 使用FFmpeg的SDK库实现将H.264流封装进MP4文件的源码大致如下: char* filename = "./test.mp4" AVOutputForma ...

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

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

  3. 利用编程解决索尼A7S3相机视频MP4文件丢失数据恢复

    异常换相机电池导致视频丢失 索尼微单相机A7S3拍摄访谈节目,导素材时发现少了1段,应该是一共录了5段,缺了第3段.了解到拍摄过程确实是有人为操作异常,摄像师回忆在第3段结尾电池快没电可能存在换电池操 ...

  4. 部分mp4视频在ios手机端上无法播放问题

    ios手机访问mp4格式的视频时,显示加载失败图片的问题.ios不兼容视频编码. 解决方法: 使用格式工厂Format Factory软件,进行配置         第一步:点击mp4 第二步:添加视 ...

  5. mp4v2再学习 -- H264视频编码成MP4文件

    一.H264视频编码成MP4文件 参看:H264视频编码成MP4文件 参看:mp4v2在VS2010下的编译与在项目中的使用 最近做项目需要将H264文件封装为mp4文件,从网上找到了MP4V2库,下 ...

  6. mp4v2 写mp4 java_使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  7. 使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  8. 嵌入式 使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  9. java h264 aac合成_使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

最新文章

  1. 数据结构(07)— 线性顺序表基本操作
  2. 读后感与机翻《人类因果学习的分解:自下而上的联想学习和自上而下的图式推理》
  3. 逻辑分析推理(五小姐问题)
  4. MySQL数据库-笔记06【SQL的4种连接查询、事务】
  5. 62. Unique Paths
  6. [转]关于有偿提供拼图响应式后台的通知
  7. 华为手机输入键盘声音_华为手机键盘隐藏7个秘密,你只用来打电话?来一起解锁新玩法...
  8. HYSBZ - 3676 回文串(回文自动机)
  9. 如何禁止SAP Fiorigateway系统上的病毒扫描
  10. 微信版花呗将上线;苹果在华支持以旧换新;谷歌推出 Flutter1.9 | 极客头条
  11. 华为当个pl怎么样_华为员工吐槽:画饼、忽悠、洗脑,有些pl、pm怎么可以那么坏?...
  12. 使用Data studio开发opengauss数据库
  13. 锐浪报表 Grid++Report 子报表 Delphi
  14. 吹捧导师师娘“神论文”的作者,被处理了
  15. 解决sublime中文输入问题
  16. oracle exadata x7发布,没有对比就没有伤害 QData T5完虐Oracle Exadata X7
  17. IIS、Asp.net 编译时的临时文件路径
  18. ssm电子族谱信息管理系统的设计与实现毕业设计-附源码161714
  19. Linux USB 驱动开发—— 热插拔
  20. BLAST+使用方法

热门文章

  1. windo10系统哪个版本运行最快呢?
  2. MCE公司:肺癌治疗新希望——HSP90 抑制剂
  3. PPT中加水印的方法
  4. java从输入中获取经纬度_java从百度后台接口获取经纬度
  5. 查看手机IMEI IMSI
  6. 携程 Apollo 配置中心 | 学习笔记(七) | 如何将配置文件敏感信息加密?
  7. 程序员常用英文单词汇总
  8. DICOM协议学习笔记(二)
  9. git版本管理,有这一篇就够了(后端开发人员必备技能)
  10. 把服务器sql数据库导出excel文件,将mysql数据库数据以Excel文件的形式导出