python实现实时视频流播放代码实例

  

这篇文章主要介绍了python实现实时视频流播放代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

        @action(方法=玫健?细节=True)   def视频(自我,请求,pk=None):   ”“”   获取设备实时视频流   请求参数:   :param pk:   返回:   ”“”   device_obj=self.get_object ()      如果device_obj #。状态==0:   #返回响应({‘错误’:“设备离线'})      如果不是device_obj.rtsp_address:   返回响应({‘错误’:“缺少rtsp地址'})      cache_id=' _video_stream_ {}“.format (device_obj.hash)   cache_status=缓存。get (cache_id,没有)   如果没有cache_status: #任务初始化,设置初始时间   缓存。集(cache_id time.time(),超时=60)      elif isinstance (cache_status浮动)和time.time ()——cache_status祝辞30:#任务已超时,返回错误信息,一段时间内不再入队   返回响应({‘错误’:“连接数目超过限制,请稍后再试'})      ret=job_queue.enqueue_video (rtsp_address=device_obj。rtsp_address device_hash=device_obj.hash)      logger.info('获取设备% s视频作业状态:% s的,pk, ret._status)      如果ret._status==b 'started”或“开始”:#视频流正常推送中,刷新播放时间,返回视频ID   缓存。集(cache_id,“继续”,超时=30)   返回响应({“视频”:" . join([设置。FFMPEG_VIDEO device_obj.hash])})      elif ret._status==b 'queued”或“排队”:#视频任务等待中   返回响应({“状态”:“等待建立视频连接'})      其他:#建立视频任务失败   返回响应({‘错误’:‘打开视频失败'})            类JobQueue:   ”““实时视频播放“”“   def __init__(自我):   自我。video_queue=django_rq.get_queue(视频)#视频推流消息队列      def enqueue_video(自我、rtsp_address device_hash):   ”““视频流队列”“”   job_id=' video_ {}“.format (device_hash)   工作=self.video_queue.fetch_job (job_id)      如果不是工作:   工作=self.video_queue.enqueue_call (   func=' utils.ffmpeg.ffmpeg_play ',   args=(rtsp_address device_hash),   timeout=1,   ttl=30 #最多等待30秒   result_ttl=0,   job_id=job_id   )      之前返回工作            # - * -编码:utf - 8 - *      导入子流程   进口线程   导入的时间   导入日志      从django.core。缓存进口缓存         记录器=logging.getLogger (“server.default”)         def ffmpeg_play(流、名称):      玩=True   cache_id=' _video_stream_ {}“.format(名称)   缓存。集(cache_id,“继续”,超时=30)   过程=没有      def上游():   cmd=" ffmpeg我“{}”- c: v h364 - f flv - r 25——“rtmp://127.0.0.1:1935/生活/{}’”。格式(流,名称)   过程=子流程。Popen (cmd, shell=True, stdin=子流程。管,stderr=subprocess.DEVNULL)   试一试:   logger.info(“设备:{}流线程开始:{}”。格式(名称、流))   虽然游戏:   time . sleep (1)      除了例外e:   logger.info(“设备:{}{}流线程错误”。格式(名称、e))      最后:   logger.info(“设备:{}流线程停止”.format(名字))   process.communicate (b 'q”)      用力推=threading.Thread(目标=上游)   thr.start ()      试一试:   而真正的:   玩=缓存。get (cache_id”)   如果玩!=凹绦?   logger.info(停止设备{}视频流的.format(名字))   玩=False   打破   time . sleep (1)      除了例外e:   logger.info(“设备:{}{}打流错误。格式(名称、e))   process.communicate (b 'q”)      logger.info(“等待设备{}视频线程停止.format(名字))   thr.join ()   logger.info(“设备{}视频工作停止”.format(名字))            #实时视频流播放   RQ_QUEUES={   “视频”:{   “USE_REDIS_CACHE”:“视频”,   }   }      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

python实现实时视频流播放代码实例