前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[建议收藏]RTSP|RTMP直播流录制下来的MP4文件起播慢怎么办?

[建议收藏]RTSP|RTMP直播流录制下来的MP4文件起播慢怎么办?

原创
作者头像
音视频牛哥
修改2024-09-05 15:41:14
1230
修改2024-09-05 15:41:14
举报
文章被收录于专栏:RTSP/RTMP直播相关

MP4文件起播慢原因

我们在做录制的时候,会遇到这样的问题,有的开发者会把直播录制的mp4文件,用来做点播之用,这时候,会发现需要文件下载下来,才可以正常播放,也就我们常说的起播比较慢。

这个问题产生的原因,是因为源视频的moov(音视频数据索引)在mdat(音视频数据)之后造成的,为什么会出现这种情况呢?因为直播流,一般是最后些moov信息。

如何处理MP4文件?

可以通过转码源视频将moov移到mdat之前,以加快播放解析:

代码语言:javascript
复制
ffmpeg -i in.mp4 -movflags faststart out.mp4

如何查看moov和mdat?方便一些,可以直接用ffmpeg命令或Mp4Info类似的工具:

如果用ffmpeg查看:

用mp4info工具直接打开文件查看:

直播录制下来的文件,如果需要做这样的转换,如何处理?

以大牛直播SDK的Windows RTSP|RTMP播放器(SmartPlayer)为例,页面点击“录像”按钮后,开始录像和一个文件录制完成,我们都会有录像事件回调上来,如果需要将moov移到mdat之前,那么,可以在单个文件写入完成后,调用ffmpeg,直接从做转换,生成新的文件即可。

对应的录像状态回调事件如下:

代码语言:csharp
复制
/*
 * SmartPlayerForm.cs
 * Author: daniusdk.com
 * WeChat: xinsheng120
 */
private void RecordCallBack(UInt32 status, [MarshalAs(UnmanagedType.LPStr)] String file_name)
{
	byte[] utf8_bytes = Encoding.Default.GetBytes(file_name);
	byte[] default_bytes = Encoding.Convert(Encoding.UTF8, Encoding.Default, utf8_bytes);
	String recorder_file_name = Encoding.Default.GetString(default_bytes);

	StringBuilder sb = new StringBuilder();
	sb.Append("录像状态:");
	
	if (status == 1)
	{
		sb.Append("new file: ");
	}
	else if(status == 2)
	{
		sb.Append("finished file: ");
	}

	sb.Append(recorder_file_name);

	MessageBox.Show(sb.ToString());
}

总结

以上是针对直播流录制起播慢的处理,如果录制下来的文件,需要做在线点播,这块非常必要,有问题或感兴趣的开发者,可以单独跟我沟通探讨。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MP4文件起播慢原因
  • 如何处理MP4文件?
  • 总结
相关产品与服务
播放器 SDK
播放器 SDK 是音视频终端 SDK(腾讯云视立方)的子产品之一,提供直播、点播场景的视频播放能力,支持Web/H5、iOS、Android、Flutter平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档