java ts文件 播放_移动端自动播放视频之TS视频

ts简介

TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。是一种视频格式,一般用于实时流媒体和广播电视领域。

Ts与Mp4优势对比

Mp4在IOS下可以自动播放,但是在部分安卓机下无法自动播放产生黑屏。

Ts可实现自动播放,IOS8以上和Android4.4以上都支持。

基于自动播放的优势,本妹子在本厂的618大促主会场及各个活动需求上就用了Ts技术。先show下具体效果:

f3c265e950f8a8fd6cc056eb315df797.png

生成ts视频

需要下ffmpeg来将Mp4转化成Ts视频。下面下载操作如下所示:

mac下可以运行

brew install ffmpeg

复制代码

windows下可以在ffmpeg.zeranoe.com/builds/中下载。

然后用ffmpeg 转化

ffmpeg -i in.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 -b 0 out.ts

复制代码

还可以控制视频大小(-s),帧速率(-r),视频比特率(-b:v),音频比特率(-b:a),音频通道数(-ac),采样率(-ar ) 以及更多。 有关详细信息,请参阅ffmpeg文档。

如下所示

ffmpeg -i in.mp4 -f mpegts \

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以通过解析文件的头部信息来判断TS文件视频还是音频。TS文件的头部信息包含了很多有用的信息,比如文件类型、分辨率、音频/视频编码等等。其中,可以通过检查PAT/PMT表来判断TS文件视频还是音频。PAT表是Program Association Table,PMT表是Program Map Table,它们都是TS流的一部分,可以在TS文件头部找到。 下面是一个示例代码,展示了如何使用Java解析TS文件头部信息来判断TS文件视频还是音频: ``` import java.io.File; import java.io.FileInputStream; public class TsFileChecker { public static final int TS_PACKET_SIZE = 188; // TS分组大小 public static final int PAT_PID = 0x0000; // PAT表的PID public static final int PMT_PID = 0x1000; // PMT表的PID public static final int VIDEO_STREAM_TYPE = 0x1B; // 视频流的类型 public static final int AUDIO_STREAM_TYPE = 0x0F; // 音频流的类型 public static boolean isVideoFile(String filePath) { try { FileInputStream fis = new FileInputStream(new File(filePath)); byte[] buffer = new byte[TS_PACKET_SIZE]; int bytesRead = fis.read(buffer); while (bytesRead >= 0) { if (bytesRead == TS_PACKET_SIZE && buffer[0] == 0x47) { // 检查分组头 int pid = ((buffer[1] & 0x1F) << 8) | (buffer[2] & 0xFF); int payloadStart = (buffer[1] & 0x40) != 0 ? 4 + buffer[4] : 4; if (pid == PAT_PID && buffer[payloadStart] == 0) { // 检查PAT表 int pmtPid = ((buffer[payloadStart + 1] & 0x1F) << 8) | (buffer[payloadStart + 2] & 0xFF); bytesRead = fis.read(buffer); while (bytesRead >= 0) { if (bytesRead == TS_PACKET_SIZE && buffer[0] == 0x47 && ((buffer[1] & 0x1F) == pmtPid)) { // 检查PMT表 int streamType = buffer[payloadStart + 1]; if (streamType == VIDEO_STREAM_TYPE) { return true; // 视频流 } else if (streamType == AUDIO_STREAM_TYPE) { return false; // 音频流 } } bytesRead = fis.read(buffer); } } } bytesRead = fis.read(buffer); } fis.close(); } catch (Exception e) { e.printStackTrace(); } return false; // 未知文件类型 } } ``` 这个示例代码通过读取TS文件的头部信息,检查PAT表和PMT表来判断TS文件视频还是音频。如果PAT表中包含PMT表的PID,就读取PMT表,检查其中的音频流和视频流的类型来判断文件类型。如果流类型为视频流,则返回true,表示TS文件视频;如果流类型为音频流,则返回false,表示TS文件是音频。如果不能识别文件类型,则返回false。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值