├── README.md
├── ffserver.conf
├── start_stream.sh
├── stream_camera.sh
├── stream_net.sh
└── stream_tv.sh
/README.md:
--------------------------------------------------------------------------------
1 | multi_stream_server
2 | ===================
3 |
4 | a multi_stream_server configure use ffserver
5 |
--------------------------------------------------------------------------------
/ffserver.conf:
--------------------------------------------------------------------------------
1 | Port 8090
2 | RTSPPort 5554
3 | BindAddress 0.0.0.0
4 | #RTSPBindAddress 192.168.2.184
5 | MaxHTTPConnections 2000
6 | MaxClients 1000
7 | MaxBandwidth 10000000
8 | CustomLog -
9 | ##################################################################
10 |
11 |
12 | File /tmp/feed_net.ffm
13 | FileMaxSize 20000K
14 | ACL allow 127.0.0.1
15 |
16 |
17 | ################################################################
18 |
19 |
20 | File /tmp/feed_camera.ffm
21 | FileMaxSize 20000K
22 | ACL allow 127.0.0.1
23 |
24 |
25 | ################################################################
26 |
27 |
28 | File /tmp/feed_tv.ffm
29 | FileMaxSize 20000K
30 | ACL allow 127.0.0.1
31 | Truncate
32 |
33 | ################################################################
34 |
35 |
36 | Feed feed_tv.ffm
37 |
38 | Format rtp
39 |
40 | VideoCodec mpeg2video
41 | #VideoFrameRate 0
42 | VideoBitRate 800k
43 | #VideoBufferSize 1000000
44 | VideoSize 640x480
45 | #VideoSize 1280x720
46 | #AVPresetVideo default
47 | #AVPresetVideo superfast
48 | VideoBitRateTolerance 1000
49 | VideoGopSize 12
50 | StartSendOnKey
51 |
52 | VideoQMin 3
53 | VideoQMax 31
54 | AVOptionVideo flags +global_header
55 | AVOptionVideo qmin 3
56 | AVOptionVideo qmax 31
57 | #AVOptionVideo me_range 4
58 | AVOptionVideo qdiff 4
59 |
60 | #MulticastAddress 224.124.0.1
61 | #MulticastPort 5000
62 | #MulticastTTL 16
63 | #NoLoop
64 |
65 | #NoAudio
66 | #AudioCodec mp2 #libmp3lame #libvorbis #libogg #libfaac
67 | AudioBitRate 128kb
68 | AudioChannels 2
69 | AudioSampleRate 44100
70 | AVOptionAudio flags +global_header
71 |
72 | ##################################################################
73 |
74 | Format rtp
75 | Feed feed_camera.ffm
76 |
77 | #VideoCodec libx264
78 | VideoFrameRate 24
79 | VideoBitRate 1000
80 | #VideoBufferSize 1000000
81 | VideoSize 640x480
82 | #VideoSize 1280x720
83 | #AVPresetVideo default
84 | #AVPresetVideo superfast
85 | VideoBitRateTolerance 1000
86 | VideoGopSize 12
87 | StartSendOnKey
88 |
89 | VideoQMin 3
90 | VideoQMax 31
91 | AVOptionVideo flags +global_header
92 | AVOptionVideo qmin 3
93 | AVOptionVideo qmax 31
94 | #AVOptionVideo me_range 4
95 | AVOptionVideo qdiff 4
96 |
97 | #MulticastAddress 224.124.0.1
98 | #MulticastPort 5000
99 | #MulticastTTL 16
100 | #NoLoop
101 |
102 | #NoAudio
103 | #AudioCodec libmp3lame
104 | #AudioBitRate 32
105 | #AudioChannels 2
106 | #AudioSampleRate 22050
107 | #AVOptionAudio flags +global_header
108 |
109 | ##################################################################
110 |
111 | Format rtp
112 | Feed feed_net.ffm
113 |
114 | #VideoCodec libx264
115 | VideoFrameRate 24
116 | VideoBitRate 1000
117 | #VideoBufferSize 1000000
118 | VideoSize 640x480
119 | #VideoSize 1280x720
120 | #AVPresetVideo default
121 | #AVPresetVideo superfast
122 | VideoBitRateTolerance 1000
123 | VideoGopSize 12
124 | StartSendOnKey
125 |
126 | VideoQMin 3
127 | VideoQMax 31
128 | AVOptionVideo flags +global_header
129 | AVOptionVideo qmin 3
130 | AVOptionVideo qmax 31
131 | #AVOptionVideo me_range 4
132 | AVOptionVideo qdiff 4
133 |
134 | #MulticastAddress 224.124.0.1
135 | #MulticastPort 5000
136 | #MulticastTTL 16
137 | #NoLoop
138 |
139 | NoAudio
140 | #AudioCodec libfaac
141 | #AudioBitRate 32
142 | #AudioChannels 2
143 | #AudioSampleRate 22050
144 | #AVOptionAudio flags +global_header
145 |
146 | ##################################################################
147 |
148 |
149 | Format status
150 | ACL allow 127.0.0.1
151 | ACL allow 192.168.0.0 192.168.255.255
152 |
153 |
154 |
155 |
156 |
157 | URL http://www.ffmpeg.org/
158 |
159 |
160 |
--------------------------------------------------------------------------------
/start_stream.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | QUIT() {
4 | trap INT
5 | trap TERM
6 | exit
7 | }
8 |
9 | INTSIG() {
10 | STOP_STREAM
11 | QUIT
12 | }
13 |
14 | START_STREAM() {
15 | ./stream_net.sh &
16 | netpid=$!
17 | echo "net pid="$netpid
18 |
19 | ./stream_camera.sh &
20 | camerapid=$!
21 | echo "camera pid="$camerapid
22 |
23 | ./stream_tv.sh &
24 | tvpid=$!
25 | echo "tv pid="$tvpid
26 | }
27 |
28 | STOP_STREAM() {
29 | kill -s INT $ffserverpid
30 | kill -s INT $netpid
31 | kill -s INT $camerapid
32 | kill -s INT $tvpid
33 | }
34 |
35 | #Main
36 | set -bm
37 | trap "INTSIG" INT
38 |
39 | while [ true ];
40 | do
41 | ffserver -f /etc/ffserver.conf &
42 | ffserverpid=$!
43 | echo "ffserver pid="$ffserverpid
44 | START_STREAM
45 | wait $ffserverpid
46 | STOP_STREAM
47 | sleep 5
48 | done
49 |
50 | QUIT
51 |
52 | #end
53 |
54 | #ffmpeg -re -fix_sub_duration -i "rtsp://192.168.2.191:554/user=admin&password=admin&channel=1&stream=0.sdp" -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 1000K http://localhost:8090/feed1.ffm
55 | #while [ true ]
56 | #do
57 | #find /root/ffmpeg/video -name "*.mov" -print | xargs -I {} ./ffmpeg -re -fix_sub_duration -i {} -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
58 | #done
59 |
60 | #cat ./video/lastexorcism-tlr2_h1080p.mov ./video/mollystheory-tlr1_h480p.mov ./video/21over-tlr1_h1080p.mov | ./ffmpeg -re -fix_sub_duration -i - -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
61 |
62 |
63 | #while [ true ]
64 | #do
65 |
66 | #./ffmpeg -re -fix_sub_duration -i ./video/lastexorcism-tlr2_h1080p.mov -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
67 |
68 |
69 | #./ffmpeg -re -fix_sub_duration -i ./video/mollystheory-tlr1_h480p.mov -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
70 |
71 | #./ffmpeg -re -fix_sub_duration -i ./video/21over-tlr1_h1080p.mov -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
72 |
73 | #./ffmpeg -re -fix_sub_duration -i ./video/cxqd.avi -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
74 |
75 | #./ffmpeg -re -fix_sub_duration -i ./video/fairhaven-tlr1_h1080p.mov -vcodec libx264 -qmin 3 -qmax 31 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6 -b:v 9000K http://localhost:8090/feed1.ffm
76 | #done
77 |
--------------------------------------------------------------------------------
/stream_camera.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | QUIT() {
4 | trap INT
5 | exit
6 | }
7 |
8 | INTSIG() {
9 | kill -s INT $ffmpid
10 | QUIT
11 | }
12 |
13 | trap "INTSIG" INT
14 |
15 | while [ true ];
16 | do
17 |
18 | if [ ! -e /dev/video4 ]; then
19 | echo "***ERROR***: No USB Camera plugin!!!"
20 | QUIT
21 | fi
22 |
23 | ffmpeg -f video4linux2 -i /dev/video4 http://127.0.0.1:8090/feed_camera.ffm &
24 | ffmpid=$!
25 | echo "camera ffmpid="$ffmpid
26 | wait $ffmpid
27 | done
28 |
29 |
--------------------------------------------------------------------------------
/stream_net.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | QUIT() {
4 | trap INT
5 | exit
6 | }
7 |
8 | INTSIG() {
9 | kill -s INT $ffmpid
10 | QUIT
11 | }
12 |
13 | trap "INTSIG" INT
14 |
15 | while [ true ];
16 | do
17 |
18 | ffmpeg -i "rtsp://192.168.2.191:554/user=admin&password=admin&channel=1&stream=0.sdp" http://localhost:8090/feed_net.ffm &
19 | ffmpid=$!
20 | echo "net ffmpid="$ffmpid
21 | wait $ffmpid
22 | done
23 |
24 |
--------------------------------------------------------------------------------
/stream_tv.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | QUIT() {
4 | trap INT
5 | exit
6 | }
7 |
8 | INTSIG() {
9 | kill -s INT $ffmpid
10 | QUIT
11 | }
12 |
13 | trap "INTSIG" INT
14 |
15 | while [ true ];
16 | do
17 | if [ ! -e /dev/video0 ]; then
18 | echo "***ERROR***: No tv card plugin!!!"
19 | QUIT
20 | fi
21 |
22 | ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0,0 http://127.0.0.1:8090/feed_tv.ffm &
23 | ffmpid=$!
24 | echo "TV ffmpid="$ffmpid
25 | wait $ffmpid
26 | done
27 |
28 |
--------------------------------------------------------------------------------