原因:为了了解ffmpeg内部有关rtmp与hls的实现流程,故在此使用nginx搭建一个服务器用于进行数据转发,实现点播与直播功能。

概述:系统win64,首先安装nginx进行配置,通过ffmpeg进行rtmp推流以及ffplay进行播放,同理hls通过通过ffmpeg进行推流与ffplay实现播放

简单命令行如下:下面命令讲述了如何利用FFmpeg生成m3u8与ts文件,以及如何使用FFmpeg和FFplay进行rtmp推流和拉流.

RTMP直播:

推流:ffmpeg.exe -re -i q.wmv -f flv rtmp://192.168.27.161/live/1
拉流:ffplay.exe -i rtmp://192.168.27.161/live/1

RTMP点播:
拉流:ffplay -i rtmp://192.168.27.161/demand/q.flv



FFmpeg生成ts与m3u8文件:
FFmpeg.exe -i q.flv -vcodec libx264 -acodec copy  -vbsf h264_mp4toannexb -map 0 -f segment -segment_format mpegts -segment_list “q.m3U8” -segment_time 10 hls-%03d.ts

播放:ffplay.exe “http://192.168.27.161:8080/hls/q.m3u8”

接下来安装nginx流程与配置

1)下载http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip

2)下载https://github.com/arut/nginx-rtmp-module/releases 选择1.2.0zip

将nginx-rtmp-moduble文件夹放到nginx1.7.11.3下面,接下来配置nginx-win.conf文件,如果出现错误查看对应的log文件夹下错误日志即可。

start nginx.exe      nginx.exe -s stop.

首先在rtmp键值下面添加点播与直播,比如application live对应的属性值live为on,则表明该application为直播模式,而如果需要进行录制则需要扩展recorder属性。application demand点播模式下只需要添加play属性,通过设置play对应的文件路径,则可以将手动生成的文件放到该路径下,即可观看。通过下面的配置可以看出文件路径暂时都配置到了exe当前目录下的video文件夹,直播过程中会将推流的数据存放到video文件夹下,而点播时也是需要拉取video文件夹下文件进行播放,hls模式生成的文件也需要放置到video下。需要注意的是推流使用的是RTMP对应的端口和ip,而由于hls播放使用http拉流,故需要进行http对应的ip与端口。hls的直播简单实现方式为通过FFmpeg进行实时生成m3u8和ts文件到video目录下,远端即可播放对应的m3u8文件。而且ts文件nginx会定期清理。nginx内部具体如何维护暂时不清楚。

rtmp{
	server{
		listen 1935;#服务端口
		
		chunk_size 4000;#数据块传输大小
		
		application demand{#点播
			play video/; #视频文件存放位置
		}

		application live { #直播
			live on;
			recorder rec1{
				record all;
				record_unique on;
				record_path video/;
				record_suffix -%Y-%m-%d-%H_%M_%S.flv;
			}
		}
		
		#HLS配置
		application hls{#直播
			live on;
			hls on;
			hls_path video/;#切片文件存放位置
			hls_fragment 10s;#每个切片时长
					
		}
	}
}


http {
location /stat{
		rtmp_stat all;
		rtmp_stat_stylesheet stat.xsl;
	}
	
	location /stat.xsl{
		root nginx-rtmp-module/;
	}
	location /hls{
			types{
				application/vnd.apple.mpegurl m3u8;
				video/mp2t ts;
			}
			alias video/;
			expires -1;
			add_header Cache-Control no-cache;
	}
		
	location /control{
		rtmp_control all;
	}
}

 

 总结:通过nginx服务器搭建,可以简单实现rtmp模式与hls模式推流与拉流,简单模拟直播与点播模式,接下来将根据现有模型针对ffmpeg有关hls流程源代码进行分析。