mpg文件切片之后,不能播放问题分析

使用ffmpeg切片命令

ffmpeg -i test.mpg -codec copy -map 0:v -map 0:a -f segment seg_%04d.mpg

对于大部分mpg文件切片都能正常播放,而少部分mpg切片之后只有第一个切片能播放,后续的切片视频播放均失败,只能播放视频。

1.使用kmplayer分析文件信息

通过分析文件信息发现,不能找到视频的分辨率、帧率、码率等信息

左边为可以正常播放的视频信息,右边是不能正常播放的视频信息。

2.使用Elecard Stream Analyzer分析视频文件的mpeg2-ps包信息

分析第一个PES包发现,正常情况下,第一个视频帧,PES包中应该含有Video Sequence Header以及Sequence Extension Header信息

左图包含Seuence Header和Sequence Extention信息,因此能正常播放,有图缺少这些信息,因此不能正常播放。

3.使用UltraEdit分析视频文件

Sequence Header信息数据的起始码为0x00 00 01 B3,Sequence Extention信息数据的起始码为0x00 00 01 B5

可以通过搜索查看文件中是否包含这两个视频类型信息。

4.解决方法

通过上述的分析,我们已经可以清楚的知道mpg切片不能播放的原因。

解决办法只需在每个切片的第一个视频帧前面插入Sequence Header以及Sequence Extention信息即可。

在mpeg_mux_write_packet函数中添加下面的代码,重新编译即可。

下面为插入上述信息的代码。

	//add by tuyuandong@gmail.com
	if (is_iframe && (s->packet_number % s->pack_header_freq) == 0)
	{
		//find SEQ_START_CODEC
		if(buf[0] == 0x0 && buf[1] == 0x0 && buf[2] == 0x01 && buf[3] != 0xb3)
		{
			if (av_fifo_realloc2(stream->fifo, av_fifo_size(stream->fifo) + size + st->codec->extradata_size) < 0)
				return -1;
			pkt_desc->unwritten_size=
			pkt_desc->size += st->codec->extradata_size;
			av_fifo_generic_write(stream->fifo, st->codec->extradata, st->codec->extradata_size, NULL);
		}
	}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

新鲜出炉的百度-春招-前端面经

1. 自我介绍 2. 项目经验,我说项目名说错了,然后又说了一遍,面试官不知道什么心态的鬼魅一下 3. Html5不同于以前版本的特点 4. Html5新增ap...

37211
来自专栏hightopo

原 荐 快速开发 HTML5 WebGL 的

8603
来自专栏逍遥剑客的游戏开发

Introduction to RenderMonkey

28510
来自专栏偏前端工程师的驿站

动手写个数字输入框1:input[type=number]的遗憾

前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方。本系列打算分4篇来叙述这段可歌可泣的踩坑经历: 《动手写个数字输...

2665
来自专栏C语言及其他语言

【程序源码】猜拳游戏

关注我们 今天来给大家来一段游戏源码(猜拳游戏) ? 程序截图如上。话不多说,上源码!! #include <stdio.h> #include <stdlib...

3046
来自专栏十月梦想

CSS3动画animation

        animation和上次说的transform动画有点不同,需要进行定义动画规则,而animation则无需受体,自动执行动画,translat...

973
来自专栏程序员宝库

爬虫攻防之前端策略简析

文章里介绍了几个大的网站,在反爬虫过程中,采取的各式各样的策略,无不体现出前端工程师的奇葩脑洞。

1562
来自专栏数据小魔方

ggplot2多维分面多图层对应规则

今天只给大家讲一个知识点,是属于ggplot2高阶用法中的分面与多图层关系如何对应,这个用法之前困扰我很久,也是最近帮朋友做东西才发现这个漏洞,于是感觉分享给大...

3314
来自专栏葬爱家族

Android高级动画(3)

上一篇文章我们讲了Android中的矢量动画,虽然文中展示的Demo并不多,但是相信大家还是体会到了矢量动画的强大。这里再做一个温故总结:

1461
来自专栏数据小魔方

Excel单元格内容合并的技巧!!!

今天给大家分享单元格内容合并的技巧! ▽ 之前推送过一篇单元格数据分裂的技巧,很多同学都私信我说很实用,并且希望以后能够多写一些这种可以瞬间提升工作效率的小技巧...

3027

扫码关注云+社区

领取腾讯云代金券