徐高翔的个人网站

基于nginx-rtmp实现电视回看业务

2017-07-11

软硬件环境

  • ubuntu 16.04 64bit
  • Android Studio 2.2.3
  • OTT BOx with android 5.1.1
  • nginx 1.11.3
  • nginx-rtmp-module

简介

电视回看是数字电视领域的另一项基础功能,它能提供一定时长的电视回放,可以实现像点播业务中的暂停,快进,快退等功能,一般的运营商都会提供回看的服务.本文讲述如何基于nginx-rtmp来实现电视回看.

原理

电视回看的核心是节目的录制.你可以选择与直播同步录制或者指定时间段录制,录制结束后生成节目资源的播放url,客户端拿到url进行播放,播放的过程和点播一样.

实践

nginx-rtmp配置文件

先来看看配置文件nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#user  nobody;
worker_processes auto;

rtmp_auto_push on;

error_log logs/error.log debug;
#error_log logs/error.log notice;
#error_log logs/error.log info;

events {
worker_connections 1024;
}

rtmp {

server {

listen 1935;

chunk_size 4000;

# HLS
application hls {
live on;
hls on;
hls_path /opt/www/live;
hls_continuous on;
hls_sync 100ms;
hls_nested on;
wait_key on;
hls_playlist_length 5m;
hls_cleanup on;
hls_fragment 10s;

# hls_keys on;
# hls_key_path /opt/www/keys;
# hls_key_url http://10.10.10.79:8081/keys;
# hls_fragments_per_key 10;

recorder all {
record all manual;
record_suffix -%Y-%m-%d-%H_%M_%S.flv;
record_unique on;
record_path /opt/www/record;
}
}
}
}

# http
http {

server {

listen 8081;

location / {
root /opt/www/;
}

# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
root /home/djstava/Workshop/Web/nginx-rtmp-module/;
}

location /control {
rtmp_control all;
}

location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}

root /opt/www/;
add_header Cache-Control no-cache;
}

location /dash {
root /opt/www/;
add_header Cache-Control no-cache;
}
}
}

主要关注下rtmp标签下的recorder和http标签下的control,录制的节目保存在/opt/www/record,/opt/www是nginx的根目录,便于http播放.

直播模拟

利用ffmpeg推送本地文件到服务器模拟直播

1
ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -y -f flv rtmp://10.10.10.52/hls/live

节目录制

开始录制

1
curl "http://10.10.10.52:8081/control/record/start?app=hls&name=live&rec=all"

结束录制

1
curl "http://10.10.10.52:8081/control/record/stop?app=hls&name=live&rec=all"

录制完成后会在/opt/www/record目录下生成相应的flv文件

nginx_rtmp_record

客户端播放

播放需要的是url,把录制的文件名和主机nginx访问目录拼接一下,很简单,这里的话就是http://10.10.10.52:8081/record/-1483066808-2016-12-30-11_00_08.flv

参考文献

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!