一、采集:使用python调用摄像头采集,原设想是使用树莓派摄像头采集,但是经费紧张买不起,先用摄像头凑合下,反正很简单。
原理就是先录一小段视频,然后循环播放,用celery做任务控制,每5秒钟录一段很小的视频,然后再循环录制。控制录制开始和停止的方法就是在redis钟设置一个键,录像程序运行的前提是这个键允许录制,如果要求录制停止就把这个键设置为停止。每5秒循环录制。正式使用后用python调用ffmpeg的命令进行推流直播,录制视频的格式是avi格式,要记得定时删除。录视频使用opencv的cv2库。注意安装最新版的opencv
二、安装simple rtmp server:从github上下载simple rtmp server,使用rtmp播放https://github.com/ossrs/srs。
安装时记得apt-get的源要使用默认源
安装好之后改配置文件,目录在trunk/conf/rtmp.conf,配置文件如下
# the config for srs to delivery RTMP # @see https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP # @see full.conf for detail config. listen 1935; max_connections 1000; daemon off; srs_log_tank console; vhost __defaultVhost__ { transcode { # whether the transcode enabled. # if off, donot transcode. # default: off. enabled on; # the ffmpeg ffmpeg ./objs/ffmpeg/bin/ffmpeg; # the transcode engine for matched stream. # all matched stream will transcoded to the following stream. # the transcode set name(ie. hd) is optional and not used. engine example { # whether the engine is enabled # default: off. enabled on; # input format, can be: # off, do not specifies the format, ffmpeg will guess it. # flv, for flv or RTMP stream. # other format, for example, mp4/aac whatever. # default: flv iformat avi; # ffmpeg filters, follows the main input. vfilter { # the logo input file. i ./doc/ffmpeg-logo.png; # the ffmpeg complex filter. # for filters, @see: http://ffmpeg.org/ffmpeg-filters.html filter_complex 'overlay=10:10'; } # video encoder name. can be: # libx264: use h.264(libx264) video encoder. # copy: donot encoder the video stream, copy it. # vn: disable video output. vcodec libx264; # video bitrate, in kbps # @remark 0 to use source video bitrate. # default: 0 vbitrate 1500; # video framerate. # @remark 0 to use source video fps. # default: 0 vfps 25; # video width, must be even numbers. # @remark 0 to use source video width. # default: 0 vwidth 768; # video height, must be even numbers. # @remark 0 to use source video height. # default: 0 vheight 320; # the max threads for ffmpeg to used. # default: 1 vthreads 12; # x264 profile, @see x264 -help, can be: # high,main,baseline vprofile main; # x264 preset, @see x264 -help, can be: # ultrafast,superfast,veryfast,faster,fast # medium,slow,slower,veryslow,placebo vpreset medium; # other x264 or ffmpeg video params vparams { # ffmpeg options, @see: http://ffmpeg.org/ffmpeg.html t 100; # 264 params, @see: http://ffmpeg.org/ffmpeg-codecs.html#libx264 coder 1; b_strategy 2; bf 3; refs 10; } # audio encoder name. can be: # libfdk_aac: use aac(libfdk_aac) audio encoder. # copy: donot encoder the audio stream, copy it. # an: disable audio output. acodec libfdk_aac; # audio bitrate, in kbps. [16, 72] for libfdk_aac. # @remark 0 to use source audio bitrate. # default: 0 abitrate 70; # audio sample rate. for flv/rtmp, it must be: # 44100,22050,11025,5512 # @remark 0 to use source audio sample rate. # default: 0 asample_rate 44100; # audio channel, 1 for mono, 2 for stereo. # @remark 0 to use source audio channels. # default: 0 achannels 2; # other ffmpeg audio params aparams { # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders # @remark SRS supported aac profile for HLS is: aac_low, aac_he, aac_he_v2 profile:a aac_low; bsf:a aac_adtstoasc; } # output format, can be: # off, do not specifies the format, ffmpeg will guess it. # flv, for flv or RTMP stream. # other format, for example, mp4/aac whatever. # default: flv oformat flv; # output stream. variables: # [vhost] the input stream vhost. # [port] the intput stream port. # [app] the input stream app. # [stream] the input stream name. # [engine] the tanscode engine name. output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; } } } |
改好配置文件后启动srs,命令./obj/srs -c conf/rtmp这样就可以了
三、编码、推流:
这个都使用工具完成了,是使用shell命令推流,命令为ffmpeg -re -i ./output.avi -vcodec libx264 -acodec copy -f flv -y rtmp://192.168.56.101/live/livestream;
是使用.246编码
四、分发: 用nginx反向代理,在nginx配置文件中加入如下,位置是和http同级
stream{ upstream proxybackend{ server localhost:1935; } server { listen 8888; proxy_pass proxybackend; } } |
五、解码、播放:都用vlc media player来做了。http://mirror.os6.org/videolan/vlc/2.2.6/win32/vlc-2.2.6-win32.exe
六、播放地址是:rtmp://192.168.56.101/live/livestream
七、没有互动没有弹幕没有打赏没有美颜,就是那么任性
八、关于循环录制推流的代码还在进一步测试中