RTMP延时问题

文章链接:http://www.liuschen.com

用的是方案一的流媒体传输,如果只传输视频,延时非常严重。分析原因无非两个,一个是推流客户端的问题,一个是播放器的问题。

在window上收流时发现,延时主要发生在两个函数上

1.avformat_open_input

2.avformat_find_stream_info

这个是用来解析流信息的,可以在之前设置这个

ifmt_ctx->probesize = 100 * 1024;
ifmt_ctx->max_analyze_duration = 5 * AV_TIME_BASE;

if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0) {
	printf( "Failed to retrieve input stream information");
	goto end;
}

可以大大提高解析速度

其实用ffplay播放时,通过

-fflags nobuffer -analyzeduration 1000000

参数已经解决了这个问题,但是播放延迟还在,那么就有可能是客户端的问题了,之前是通过

	recorder = new FFmpegFrameRecorder(url, width, height, 1);
    recorder.setVideoBitrate(2000000);
    recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
    recorder.setFormat("flv");
    recorder.setFrameRate(10);
    recorder.setVideoOption("tune","zerolatency");
    recorder.setVideoOption("preset","ultrafast");
    recorder.setGopSize(GOP_LENGTH_IN_FRAMES);
    recorder.setVideoQuality(28);

单纯设置了视频的参数,但是通过阅读FFmpegFrameRecorder源码,发现音视频参数都设置了初始值,所以可能是默认仍然传输了音频。所以添加了

    recorder.setAudioBitrate(0);
    recorder.setAudioChannels(-1);

果然本来延时10多秒,恢复到了正常范围,延迟大约1s左右。

Loading Disqus comments...
Table of Contents