前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mpg文件切片之后,不能播放问题分析

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

作者头像
雪影
发布2018-08-02 12:04:55
1.2K0
发布2018-08-02 12:04:55
举报
文章被收录于专栏:流媒体人生流媒体人生

使用ffmpeg切片命令

代码语言:javascript
复制
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函数中添加下面的代码,重新编译即可。

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

代码语言:javascript
复制
	//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);
		}
	}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年07月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.使用kmplayer分析文件信息
  • 2.使用Elecard Stream Analyzer分析视频文件的mpeg2-ps包信息
  • 3.使用UltraEdit分析视频文件
  • 4.解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档