Python 如何从不同的文件流式传输视频?

Python 如何从不同的文件流式传输视频?,python,node.js,streaming,video-streaming,live-streaming,Python,Node.js,Streaming,Video Streaming,Live Streaming,我有一个远程文件夹,里面有视频。视频正在不断上传 例如: [1].avi [2].avi [3].avi [4].avi 我希望能够流这些视频尽可能接近实时(使用rtsp或类似的方式) 在这种情况下,我可以开始第2流,然后第3流,依此类推。。。并检查文件夹中的更新 我已经完成了一个python脚本,它允许我使用OpenCV(cv2)一个接一个地复制所有这些视频,而不需要注意它们之间的变化。但我仍然不知道如何才能进行流媒体 import numpy as np import collection

我有一个远程文件夹,里面有视频。视频正在不断上传

例如:

[1].avi
[2].avi
[3].avi
[4].avi
我希望能够流这些视频尽可能接近实时(使用rtsp或类似的方式)

在这种情况下,我可以开始第2流,然后第3流,依此类推。。。并检查文件夹中的更新

我已经完成了一个python脚本,它允许我使用OpenCV(cv2)一个接一个地复制所有这些视频,而不需要注意它们之间的变化。但我仍然不知道如何才能进行流媒体

import numpy as np
import collections
import cv
import os


__FRAMES_PER_SECOND = 10.0

def find_between( s, first, last ):
    try:
        start = s.index( first ) + len( first )
        end = s.index( last, start )
        return s[start:end]
    except ValueError:
        return ""

def play(file):
    vidFile = cv.CaptureFromFile(file)
    nFrames = int(  cv.GetCaptureProperty( vidFile, cv.CV_CAP_PROP_FRAME_COUNT ) )
    fps = cv.GetCaptureProperty( vidFile, cv.CV_CAP_PROP_FPS )
    waitPerFrameInMillisec = int( 1/__FRAMES_PER_SECOND * 1000/1 )
    for f in xrange( nFrames ):
      frameImg = cv.QueryFrame( vidFile )
      cv.ShowImage( "My Video Window",  frameImg )
      cv.WaitKey( waitPerFrameInMillisec  )



directory = "vids/"
dictFiles = {}
arrFiles = []
for root, dirs, files in os.walk(directory):
    #print root
    #print dirs
    arrFiles = files    
for file in arrFiles:
    number = find_between(file, "[", "]")
    #print "----------",file
    dictFiles[number] = file

orderedDictFiles = collections.OrderedDict(sorted(dictFiles.items()))
for file in orderedDictFiles:
    play(directory + orderedDictFiles[file])

如果您使用的是Linux,则可以使用
pyinotify
第三方模块在上传视频时播放视频

以下代码将在视频文件完全上载时打印“视频完成”()。可以对其进行修改以播放视频文件

来源 输出
杰出的有没有一种方法可以在web上实现这一点?@JuanmaCrescente:上面的代码可以将URL推送到连接到用户浏览器的WebSocket。然后浏览器将获取并播放视频URL。虽然做了一点工作,但看起来很酷:)
import os, sys

import pyinotify

class VideoComplete(pyinotify.ProcessEvent):
    def process_IN_CLOSE_WRITE(self, event):
        sys.stdout.write(
            'video complete: {}\n'.format(event.pathname)
        )
        sys.stdout.flush()

def main():
    wm = pyinotify.WatchManager()
    notifier = pyinotify.Notifier(
        wm, default_proc_fun=VideoComplete(),
        )
    mask = pyinotify.ALL_EVENTS
    path = os.path.expanduser('~/Downloads/incoming')
    wm.add_watch(path, mask, rec=True, auto_add=True)
    notifier.loop()

if __name__=='__main__':
    main()
video complete: /home/johnm/Downloads/incoming/a.txt