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

@action(methods=['GET'], detail=True)

def video(self, request, pk=None):

"""

获取设备实时视频流

:param request:

:param pk:

:return:

"""

device_obj = self.get_object()

# if device_obj.status == 0:

# return Response({'error': '设备离线'})

if not device_obj.rtsp_address:

return Response({'error': '缺少rtsp地址'})

cache_id = '_video_stream_{}'.format(device_obj.hash)

cache_status = cache.get(cache_id, None)

if cache_status is None: # 任务初始化,设置初始时间

cache.set(cache_id, time.time(), timeout=60)

elif isinstance(cache_status, float) and time.time() - cache_status > 30: # 任务已超时, 返回错误信息, 一段时间内不再入队

return Response({'error': '连接数目超过限制, 请稍后再试'})

ret = job_queue.enqueue_video(rtsp_address=device_obj.rtsp_address, device_hash=device_obj.hash)

logger.info('fetch device %s video job status: %s', pk, ret._status)

if ret._status == b'started' or 'started': # 视频流正常推送中, 刷新播放时间, 返回视频ID

cache.set(cache_id, 'continue', timeout=30)

return Response({'video': ''.join([settings.FFMPEG_VIDEO, device_obj.hash])})

elif ret._status == b'queued' or 'queued': # 视频任务等待中

return Response({'status': '等待建立视频连接'})

else: # 建立视频任务失败

return Response({'error': '打开视频失败'})

class JobQueue:

"""实时视频播放"""

def __init__(self):

self.video_queue = django_rq.get_queue('video') # 视频推流消息队列

def enqueue_video(self, rtsp_address, device_hash):

"""视频流队列"""

job_id = 'video_{}'.format(device_hash)

job = self.video_queue.fetch_job(job_id)

if not job:

job = 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

)

return job

# -*- coding: utf-8 -*-

import subprocess

import threading

import time

import logging

from django.core.cache import cache

logger = logging.getLogger('server.default')

def ffmpeg_play(stream, name):

play = True

cache_id = '_video_stream_{}'.format(name)

cache.set(cache_id, 'continue', timeout=30)

process = None

def upstream():

cmd = "ffmpeg -i '{}' -c:v h264 -f flv -r 25 -an 'rtmp://127.0.0.1:1935/live/{}'".format(stream, name)

process = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL)

try:

logger.info('device: {} stream thread start: {}'.format(name, stream))

while play:

time.sleep(1)

except Exception as e:

logger.info('device: {} stream thread error {}'.format(name, e))

finally:

logger.info('device: {} stream thread stop'.format(name))

process.communicate(b'q')

thr = threading.Thread(target=upstream)

thr.start()

try:

while True:

play = cache.get(cache_id, '')

if play != 'continue':

logger.info('stop device {} video stream'.format(name))

play = False

break

time.sleep(1)

except Exception as e:

logger.info('device: {} play stream error {}'.format(name, e))

process.communicate(b'q')

logger.info('wait device {} video thread stop'.format(name))

thr.join()

logger.info('device {} video job stop'.format(name))

# 实时视频流播放

RQ_QUEUES = {

'video': {

'USE_REDIS_CACHE': 'video',

}

}

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

本文标题: python实现实时视频流播放代码实例

本文地址: http://www.cppcns.com/jiaoben/python/298114.html

python播放视频代码_python实现实时视频流播放代码实例相关推荐

  1. python编程实例视屏-python实现实时视频流播放代码实例

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

  2. 基于python keras口罩检测人脸检测佩戴口罩可读视频可读摄像头实时视频流

    人脸识别技术已经非常普及啦,现在戴口罩的脸支付宝也可以识别,据报道阿里现在正在尝试主导人脸识别技术的某些标准.在商业上大多数公司会选择国内AI大咖,比如百度智能云.阿里智慧云.华为云.腾讯云等等.这些 ...

  3. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  4. 云小课 | 玩转HiLens Studio之手机实时视频流调试代码

    摘要:在开发技能过程中,搭配视频流调试技能是非常必要的环节,也是检验技能效果的重要环节.HiLens Studio推出使用手机实时视频流调试代码的功能,以手机摄像头实时的视频流作为技能输入,查看技能输 ...

  5. 百度云HTML5倍速播放视频方法(Microsoft Edge网页播放)

    百度云HTML5倍速播放视频方法(Microsoft Edge网页播放) 电脑端使用百度云播放视频有两种途径: 一是下载到本地,然后选择播放器播放,但是按百度的尿性,氪金才能成为人上人,否则下载极慢, ...

  6. “无法播放视频。很抱歉,无法播放此视频” 错误提示的两个原因

    Android 2.3.3 Eclipse Version: 3.7.0 LogCat emulator-5554 emulator-5554虚拟机,采用VideoView 播放AVI文件类型的视频. ...

  7. 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能

    安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...

  8. python音视频开发_Python音视频开发:消除抖音短视频Logo的图形化工具实现

    一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现消除视频Logo的四种方法,并提供了详细的 ...

  9. 为什么python下载视频失败_Python帮你把B站上喜欢的视频下载下来

    5月3日晚,央视在<新闻联播>前播放了B站青年宣言片<后浪>,这是B站首次登陆央视黄金时段,今天在朋友圈陆续看到相关的视频.最早用B站的同学都知道,B站是和A站以异曲同工的鬼畜 ...

最新文章

  1. python2中的print语句可以不用小括号。_Python 2与Python 3的区别
  2. Qt程序怎么在别人的电脑上运行
  3. P2324 骑士精神
  4. hdu 6086 -- Rikka with String(AC自动机 + 状压DP)
  5. 理性派:数学写真集系列书籍等
  6. 中国的就业(人才)市场缺什么?
  7. C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题
  8. myeclipse新建JSP中DOCTYPE问题
  9. 远程桌面管理工具比较(转)
  10. css整张背景 多边形,JS/CSS3 低多边形大红绸缎全屏背景图(无图片)
  11. 使用 shell 在多服务器上批量操作
  12. Volley(五)—— 自定义Request
  13. 物业管理系统源码java_Java小区物业管理系统 源码报告下载
  14. NotifyIcon用法
  15. 【人脸识别】基于PCA实现ORL人脸识别附matlab代码和报告
  16. vue.js 菜鸟学习
  17. Java实现IP代理
  18. web前端简历怎么写?
  19. 服装制图软件测试初学者,服装行业版软件测试文案.ppt
  20. 成功必须靠自己去争取。

热门文章

  1. .net 引用Com组件的几种方案
  2. Quest Recovery Manager for Active Directory的使用(一)
  3. (转)海岸线提取完成, 海浪排岸效果
  4. C语言这么难,为何大家都如飞蛾扑火般学习?现在带你揭秘
  5. Ubuntu下安装和配置Apache及Apache2
  6. 销售管理如何构成闭环?帆软大屏看板让销售数据转起来,不再分散
  7. 【转载】SQL 模糊查询
  8. 百度SEO优化技术点总结
  9. C语言嵌入式系统编程修炼之内存操作
  10. 优秀的程序员应该掌握多少门编程语言?