├── 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 | --------------------------------------------------------------------------------