赞
踩
我们这次利用ffmpeg实现rtmp推流(最终推流地址统一为rtmp://127.0.0.1:1935/live/123)
官方下载链接为:FFmpeg
下载后开始配置环境变量:
系统属性-环境变量-path-添加ffmpeg/bin的路径;
打开命令窗口,输入ffmpeg,检测是否配置成功
以上代表正常安装配置(这一步很简单,很容易)
输入下面的语句即可列出电脑的设备
ffmpeg -list_devices true -f dshow -i dummy
可以看到我电脑里面有一个名为 VGA USB Camera 摄像头,没有麦克风
如果设备名称有中文,会出现乱码,想看设备原名,可以去设备管理器中查看
最后一行可看到设备的名字;
cmd中输入下面语句并回车(VGA USB Camera为摄像头名称)
ffplay -f dshow -i video="VGA USB Camera"
或者
ffplay -f vfwcap -i 0
如果成功弹出播放窗口,则代表设备可用,否则可能是设备不可用或者设备被占用
cmd中输入下面语句即可查询摄像头信息
ffmpeg -list_options true -f dshow -i video="VGA USB Camera"
麦克风的信息:
ffmpeg -list_options true -f dshow -i audio="麦克风名字"
搭建服务器
可选择nginx 1.7.11.3 Gryphon
解压后,在nginx 1.7.11.3 Gryphon目录下新建三个文件夹:
在conf目录下,新建一个文件“nginx.conf”
- worker_processes 1; #Nginx进程数,建议设置为等于CPU总核数
-
- events {
- worker_connections 1024; #工作模式与连接数上限
- }
-
- rtmp_auto_push on;
-
- #RTMP服务
- rtmp{
- server{
- listen 1935; #服务端口
- chunk_size 4096; #数据传输块的大小
-
- application vod{
- play ./vod; #视频文件存放位置
- }
- application live{
- live on; #
-
-
- hls on; #开启hls直播。这个参数把直播服务器改造成实时回放服务器
- #wait_key on; #对视频切片进行保护,这样就不会产生马赛克了
- hls_path ./html/hls; #切片视频文件存放位置(HLS,m3u8文件存放位置)
- hls_fragment 2s; #每个视频切片的时长
- hls_playlist_length 16s;
- recorder myRecord{
- record all manual;
- record_suffix _.flv;
- record_path ./rec;
- }
- #hls_continuous on; #连续模式
- #hls_cleanup on; #对多余的切片进行删除
- #hls_nested on; #嵌套模式
- }
- }
- }
-
- #HTTP服务
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- keepalive_timeout 65;
-
- server {
- listen 80;
- server_name localhost;
-
- location / {
- root html;
- index index.html index.htm;
- }
-
- location /live_hls{
- types{
- #m3u8 type设置
- application/vnd.apple.mpegurl m3u8;
- #ts分片文件设置
- video/mp2t ts;
- }
- #指向访问m3u8文件目录
- alias ./html/hls;
- add_header Cache-Control no-cache; #禁止缓存
- }
-
- location /control{
- rtmp_control all;
- }
-
- location /stat{
- rtmp_stat all;
- rtmp_stat_stylesheet stat.xsl;
- }
-
- location /stat.xsl{
- root ./nginx-rtmp-module-master;
- }
-
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
cmd在nginx.exe所在的目录启动nginx,输入命令: start nginx
在浏览器输入127.0.0.1或者localhost
先进行简单的本地视频推流模拟,我们在ffmpeg的目录下放置一个视频,然后cmd进入该目录,把视频推流至rtmp://127.0.0.1:1935/live/123(127.0.0.1:1935为rtmp服务器地址、live为nginx配置节点、123当做密钥,推流拉流地址一样即可播放),语句如下
ffmpeg -re -i test1.mp4 -f flv rtmp://127.0.0.1:1935/live/123
此时ffmpeg源源不断的把视频推流至服务器,如果地址没错,可以利用vlc或其他手段实现拉流,这里就先不解释如何拉流
接下来正式把对摄像头进行推流,从前面我们知道摄像头名称为VGA USB Camera,而且推流服务器ip为127.0.0.1:1935,关键字为live,所以cmd中输入以下语句:
ffmpeg -f dshow -i video="VGA USB Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
和本地视频推流一样,摄像头拍到的画面会实时推流出去(当然会有延迟而且现在是没有声音的),当地址正确时,可以实现拉流
前面介绍了摄像头画面推流,可是没有声音,这次我们把麦克风声音推流出去,cmd中输入下面语句
ffmpeg -f dshow -i audio="麦克风" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
和前面差不多,声音被推流出去了,通过vlc拉流可以听到录制的声音,但很明显不会有画面
要实现同时推流摄像头画面与声音,此时我们的语句应该如下
ffmpeg -f dshow -i video="VGA USB Camera" -f dshow -i audio="麦克风name" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
或者
ffmpeg -f dshow -i video="VGA USB Camera":audio="麦克风 name" -vcodec libx264 -r 25 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
将推送的服务器的视频流拉下来播放,我们使用vlc播放器。
OK,到此,我们简单的推流服务器就搭起来了,拉流也可以用其他方式,比如web端的开发等,这个不熟,所以暂时使用VLC可检测
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。