资源简介
在一些视频服务中,如VOD推流的快进、快退中,经常需要快速从ts节目流中找出I帧(I-frame)来,以便推流服务器可以推送只包含视频画面而没有声音的ts数据到终端,而终端并不需要做任何特殊处理,即可实现快进/快退的画面效果。
因此,实现上需要做到以下三点:
1、要找到I帧
2、确保找出来的I帧数据前后都要完整,即符合MPEG-2的188长度的封包格式
3、去掉其中的音频数据
本资源直接给出用java实现的从ts流中提取I帧的代码
代码片段和文件信息
/**
* 从ts字节流中提取出I帧数据,且去掉其中的音频数据,输出的内容仍然符合MPEG-2的188结构
* @param src:ts数据字节内容
* @param pos:提取I帧的起始位置,即从ts数据字节内容的什么位置开始提取,默认给0即可
* @param audioPid:ts数据中音频的pid,以便去掉音频数据,否则推送I帧数据时会听到异常的声音
* @return:符合MPEG-2的188数据封装结构的I帧数据(可能是多个I帧数据)可以直接把返回内容写到文件,用vlc播放看到效果
*/
public static byte[] getiframes(byte[] srcint posint audioPid){
List list = new linkedList();
int start = 0;
int idx = 0;
idx = pos;
boolean iframe = false;
int offset = 0;
int suffix = 0;
int totalLen = 0;
while(idx < (src.length-6)){
if(src[idx]==0x0 && src[idx+1]==0x0&&src[idx+2]==0x01 && src[idx+3]==0x00){
if(((src[idx+5]>>3)&0x07)==0x01){
if(!iframe){
start = idx;
iframe = true;
}
else{
if(idx>start){
offset = start%188;
suffix = 188-(idx%188);
byte[] buff = new byte[idx+offset+suffix-start];
System.arraycopy(src start-offset buff 0 idx+offset+suffix-start);
totalLen += buff.length;
list.add(buff);
}
start = idx+suffix;
- 上一篇:zookeeper的相关介绍
- 下一篇:java毕业设计外文文献翻译
相关资源
- java毕业设计外文文献翻译
- 《剑指Offer》Java代码带目录.pdf
- vox转wav文件Java实现
- 网络交友网站源码javabean+JSP+Mysql
- pagehelper-4.2.1.jar和jsqlparser-0.9.4.jar
- 高效敏感词过滤JAVA实现DFA算法 5000字
- CSharp to Java Converter破解版
- 一头扎进 centos7 视频教程 java1234出品
- Java开发手册68个常用开发手册
- Java EE框架整合开发入门到实战:Spr
- 个人免签支付即时到账网站源码易语
- eclipse-jee-2020-06-R-win32-x86_64.zip
- Java实现的小型文件管理系统
- 《剑指offer》Java版代码
- 小型超市信息管理系统Java代码和设计
- JSP+JavaBean+Servlet技术实现某网站用户注
- java汉字转化为拼音的工具类
- 日语java面试问题集
- 餐饮管理系统用java编写,供毕设和学
- Java课程设计扫雷游戏代码及报告
- java随机生成用户名(qq、手机、邮箱
- 图书馆管理系统(jsp+Servlet+Javabean+m
- java版本图书管理系统.rar
- 酒店管理系统源码完整版(Java+SQL 2
- java贪吃蛇项目代码+报告
- Java 学生信息管理系统(自己做的,连
- 遗传算法旅行者问题java实现
- 北大青鸟的S1Java的作业
- Java门禁系统
- java版多媒体教室管系统源文件
评论
共有 条评论