400分 请教nginx-rtmp-module 服务器端保存视频流为文件

QQ515311445 2017-11-07 05:14:31
已经在Ubuntu上搭建了nginx-rtmp-modeule的流媒体服务器, 目前可以推rtmp流到服务器,并用播放器播放rtmp, 也实现了rtmp转hls, 但我们目前需要把视频保存在服务器上(如: 保存30天), 需要怎么配置nginx.conf才能实现呢? 或者有没有其它办法?
...全文
3646 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ515311445 2018-06-07
  • 打赏
  • 举报
回复
引用 20 楼 qq_36241414 的回复:
保存视频按日期创建文件夹是如何做到的呢 没人了吗
只按日期创建了文件, 没创建文件夹
qq_36241414 2018-01-22
  • 打赏
  • 举报
回复
保存视频按日期创建文件夹是如何做到的呢 没人了吗
qq_36241414 2018-01-19
  • 打赏
  • 举报
回复
保存视频按日期创建文件夹是如何做到的呢
cch_44 2017-11-25
  • 打赏
  • 举报
回复
请移步http://bbs.csdn.net/topics/392290576
cch_44 2017-11-25
  • 打赏
  • 举报
回复
开了新帖了 请移步 嘿嘿
QQ515311445 2017-11-25
  • 打赏
  • 举报
回复
引用 14 楼 cch_44 的回复:
请各位大神指点一下 服务器的权限问题 我用的administrator用户 整个nginx文件夹都是完全控制权限 请大神指点一下 首先请教一下 这个record_path /tmp是在哪
怎么指点?
cch_44 2017-11-25
  • 打赏
  • 举报
回复
请各位大神指点一下 服务器的权限问题 我用的administrator用户 整个nginx文件夹都是完全控制权限 请大神指点一下 首先请教一下 这个record_path /tmp是在哪
cch_44 2017-11-25
  • 打赏
  • 举报
回复
我也在做这个 无论如何都录不上 我搭的环境是1.7.11.3的nginx+rtmp 写上record all以后没有报错 但没有录flv 说真的我也搞不清/tmp具体路径是在哪里 但是推了流一段时间以后 没有flv文件 在整个硬盘上搜的
cch_44 2017-11-25
  • 打赏
  • 举报
回复
错了 移步这里http://bbs.csdn.net/topics/392290583
L17171717 2017-11-14
  • 打赏
  • 举报
回复
嗯 昨天专门花了一个小时,搭建了下,可以录制。配置文件如下: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4000; # video on demand for flv files application vod { play /usr/local/nginx/html/flv; } # video on demand for mp4 files application vod2 { play /usr/local/nginx/html/mp4; } application hls { live on; hls on; hls_path /tmp/hls; } # MPEG-DASH is similar to HLS application dash { live on; dash on; dash_path /tmp/dash; } application myapp { live on; record all manual; record_path /tmp; record_max_size 1024M; record_suffix .flv; } } } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; log_format main '$remote_addr - $remote_user $server_name [$time_local] "$request" ' '$status $body_bytes_sent "$request_body" "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "clickaid=$cookie_clickaid"' '"$http_Forward_Stream"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 88; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ ^/get_json { default_type application/json; return 200 '{"message":"SUCCESS","content":{"list":[{"port":"1935","ip":"10.33.0.111"}]},"state":0}'; } location /control { #控制器 rtmp_control all; } location ~ ^/get_text { default_type text/html; return 200 'This is text!'; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} } 用FMLE或OBS推流成功后,使用curl http://127.0.0.1:88/control/record/start?app=myapp&name=wzf&rec=rec 调用开始录制; 到/tmp下能看到wzf.flv的文件生成、不断再变大; 使用curl http://127.0.0.1:88/control/record/stop?app=myapp&name=wzf&rec=rec 结束录制。 一个人不能连续回复超过3次,所以今天才发出来
QQ515311445 2017-11-14
  • 打赏
  • 举报
回复
引用 9 楼 L17171717 的回复:
录制的路径,得保证有权限
解决了, 400分是你的了, 谢谢
QQ515311445 2017-11-14
  • 打赏
  • 举报
回复
引用 9 楼 L17171717 的回复:
录制的路径,得保证有权限
你说对了, 我昨天试出来了, 今天才看到
QQ515311445 2017-11-13
  • 打赏
  • 举报
回复
引用 3 楼 L17171717 的回复:
1、在配置文件的rtmp->server下增加个application,比如myapp,里面配置上 record keyframes; record_path /tmp; record_max_size 128K; record_interval 30s; record_suffix .flv; 2、定期删除比较简单,可以按照年-月-日建立三级文件夹,一天的视频录制到同一个文件里,写个定时任务做删除业务
请问就您提到的这五条配置就可以吗? 我在网上看到的还有 record_all之类的, 但怎么试就是不行, 您这个是测试过的吗?
QQ515311445 2017-11-13
  • 打赏
  • 举报
回复
引用 4 楼 L17171717 的回复:
Record record 语法:record [off|all|audio|video|keyframes|manual]* 上下文:rtmp, server, application, recorder 描述:切换录制模式。流可以被记录到 flv 文件。本指令指定应该被记录的: * off - 什么也不录制 * all - 音频和视频(所有) * audio - 音频 * video - 视频 * keyframes - 只录制关键视频帧 * manual - 用不自动启动录制,使用控制接口来启动/停止 在单个记录指令中可以有任何兼容的组合键。 record all; record audio keyframes; record_path 语法:record_path path 上下文:rtmp, server, application, recorder 描述:指定录制的 flv 文件存放目录。 record_path /tmp/rec; record_suffix 语法:record_suffix value 上下文:rtmp, server, application, recorder 描述:设置录制文件后缀名。默认为 '.flv'。 record_suffix _recorded.flv; 录制后缀可以匹配 strftime 格式。以下指令 record_suffix -%d-%b-%y-%T.flv 将会产生形如 mystream-24-Apr-13-18:23:38.flv 的文件。所有支持 strftime 格式的选项可以在 strftime man page 里进行查找。 record_unique 语法:record_unique on|off 上下文:rtmp, server, application, recorder 描述:是否添加时间戳到录制文件。否则的话同样的文件在每一次新的录制发生时将被重写。默认为 off。 record_unique on; record_append 语法:record_append on|off 上下文:rtmp, server, application, recorder 描述:切换文件附加模式。当这一指令为开启是,录制时将把新数据附加到老文件,如果老文件丢失的话将重新创建一个。文件中的老数据和新数据没有时间差。默认为 off。 record_append on; record_lock 语法:record_lock on|off 上下文:rtmp, server, application, recorder 描述:当这一指令开启时,当前录制文件将被 fcntl 调用锁定。那样可以在其他地方来核实哪个文件正在进行录制。默认为 off。 record_max_size 语法:record_max_size size 上下文:rtmp, server, application, recorder 描述:设置录制文件的最大值。 record_max_size 128K; record_max_frames 语法:record_max_frames nframes 上下文:rtmp, server, application, recorder 描述:设置每个录制文件的视频帧的最大数量。 record_max_frames 2; record_interval 语法:record_interval time 上下文:rtmp, server, application, recorder 描述:在这个指令指定数量的(毫秒)秒之后重启录制。默认为 off。设置为 0 的话意味着录制中无延迟。如果 record_unique 为 off 的话所有记录片段会被写到同一个文件。否则(文件名)将附以时间戳以区分不同文件(给定的 record_interval 要大于 1 秒)。 record_interval 1s; record_interval 15m; recorder 语法:recorder name {...} 上下文:application 描述:创建录制块。可以在单个 application 中创建多个记录。上文提到的所有录制相关的指令都可以在 recorder{} 块中进行定义。继承高层次中的所有设置。 application { live on; # default recorder record all; record_path /var/rec; recorder audio { record audio; record_suffix .audio.flv; } recorder chunked { record all; record_interval 15s; record_path /var/rec/chunked; } } record_notify 语法:record_notify on|off 上下文:rtmp, server, application, recorder 描述:切换当定义录制启动或停止文件时发送 NetStream.Record.Start 和 NetStream.Record.Stop 状态信息(onStatus)到发布者。状态描述字段保存录制的名字(默认录制的话为空)。默认为 off。 recorder myrec { record all manual; record_path /var/rec; record_notify on; }
这个我看过很多次, 也试过很多次, 不管用
L17171717 2017-11-13
  • 打赏
  • 举报
回复
录制的路径,得保证有权限
L17171717 2017-11-13
  • 打赏
  • 举报
回复
端口、应用名称、流名称等,需要改成你实际环境的
L17171717 2017-11-13
  • 打赏
  • 举报
回复
引用 6 楼 llxxhm 的回复:
[quote=引用 3 楼 L17171717 的回复:] 1、在配置文件的rtmp->server下增加个application,比如myapp,里面配置上 record keyframes; record_path /tmp; record_max_size 128K; record_interval 30s; record_suffix .flv; 2、定期删除比较简单,可以按照年-月-日建立三级文件夹,一天的视频录制到同一个文件里,写个定时任务做删除业务
请问就您提到的这五条配置就可以吗? 我在网上看到的还有 record_all之类的, 但怎么试就是不行, 您这个是测试过的吗?[/quote] 好久之前搭建过,录制上了。录制一般都通过接口来控制,比如 record all manual; #手动控制录制启停 后在http->server下加上 location /control { #控制器 rtmp_control all; } 后通过http接口 http://127.0.0.1:18080/control/record/start?app=myapp&name=mystream&rec=rec http://127.0.0.1:18080/control/record/stop?app=myapp&name=mystream&rec=rec 进行开始录制和结束录制的访问
L17171717 2017-11-12
  • 打赏
  • 举报
回复
Record record 语法:record [off|all|audio|video|keyframes|manual]* 上下文:rtmp, server, application, recorder 描述:切换录制模式。流可以被记录到 flv 文件。本指令指定应该被记录的: * off - 什么也不录制 * all - 音频和视频(所有) * audio - 音频 * video - 视频 * keyframes - 只录制关键视频帧 * manual - 用不自动启动录制,使用控制接口来启动/停止 在单个记录指令中可以有任何兼容的组合键。 record all; record audio keyframes; record_path 语法:record_path path 上下文:rtmp, server, application, recorder 描述:指定录制的 flv 文件存放目录。 record_path /tmp/rec; record_suffix 语法:record_suffix value 上下文:rtmp, server, application, recorder 描述:设置录制文件后缀名。默认为 '.flv'。 record_suffix _recorded.flv; 录制后缀可以匹配 strftime 格式。以下指令 record_suffix -%d-%b-%y-%T.flv 将会产生形如 mystream-24-Apr-13-18:23:38.flv 的文件。所有支持 strftime 格式的选项可以在 strftime man page 里进行查找。 record_unique 语法:record_unique on|off 上下文:rtmp, server, application, recorder 描述:是否添加时间戳到录制文件。否则的话同样的文件在每一次新的录制发生时将被重写。默认为 off。 record_unique on; record_append 语法:record_append on|off 上下文:rtmp, server, application, recorder 描述:切换文件附加模式。当这一指令为开启是,录制时将把新数据附加到老文件,如果老文件丢失的话将重新创建一个。文件中的老数据和新数据没有时间差。默认为 off。 record_append on; record_lock 语法:record_lock on|off 上下文:rtmp, server, application, recorder 描述:当这一指令开启时,当前录制文件将被 fcntl 调用锁定。那样可以在其他地方来核实哪个文件正在进行录制。默认为 off。 record_max_size 语法:record_max_size size 上下文:rtmp, server, application, recorder 描述:设置录制文件的最大值。 record_max_size 128K; record_max_frames 语法:record_max_frames nframes 上下文:rtmp, server, application, recorder 描述:设置每个录制文件的视频帧的最大数量。 record_max_frames 2; record_interval 语法:record_interval time 上下文:rtmp, server, application, recorder 描述:在这个指令指定数量的(毫秒)秒之后重启录制。默认为 off。设置为 0 的话意味着录制中无延迟。如果 record_unique 为 off 的话所有记录片段会被写到同一个文件。否则(文件名)将附以时间戳以区分不同文件(给定的 record_interval 要大于 1 秒)。 record_interval 1s; record_interval 15m; recorder 语法:recorder name {...} 上下文:application 描述:创建录制块。可以在单个 application 中创建多个记录。上文提到的所有录制相关的指令都可以在 recorder{} 块中进行定义。继承高层次中的所有设置。 application { live on; # default recorder record all; record_path /var/rec; recorder audio { record audio; record_suffix .audio.flv; } recorder chunked { record all; record_interval 15s; record_path /var/rec/chunked; } } record_notify 语法:record_notify on|off 上下文:rtmp, server, application, recorder 描述:切换当定义录制启动或停止文件时发送 NetStream.Record.Start 和 NetStream.Record.Stop 状态信息(onStatus)到发布者。状态描述字段保存录制的名字(默认录制的话为空)。默认为 off。 recorder myrec { record all manual; record_path /var/rec; record_notify on; }
L17171717 2017-11-12
  • 打赏
  • 举报
回复
1、在配置文件的rtmp->server下增加个application,比如myapp,里面配置上 record keyframes; record_path /tmp; record_max_size 128K; record_interval 30s; record_suffix .flv; 2、定期删除比较简单,可以按照年-月-日建立三级文件夹,一天的视频录制到同一个文件里,写个定时任务做删除业务
QQ515311445 2017-11-10
  • 打赏
  • 举报
回复
不会吧, 四百分的帖子都没有人来灌水?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧