bokeh ऐप में स्थानीय फ़ाइल से वीडियो चलाने के लिए न्यूनतम उदाहरण (गैर-कार्यरत) नीचे है। ऐप html <video> टैग के साथ Div ऑब्जेक्ट का उपयोग करता है। अपेक्षित व्यवहार तुरंत ऐप में वीडियो चलाने के लिए होगा। गैर-कार्यरत भाग स्थानीय वीडियो फ़ाइल का संदर्भ है।

from bokeh.models import Div
from bokeh.io import curdoc


div = Div(text="""
    <video width="300px" height="150px" controls autoplay>
    <source src="movie.mp4" type="video/mp4"></video>
    """)

curdoc().add_root(div)

ऐप so.py है और वीडियो movie.mp4 है, दोनों एक ही डायरेक्टरी में हैं।

enter image description here

कमांड लाइन से ऐप चलाना movie.mp4 की तलाश में 404 त्रुटि का संकेत देता है

enter image description here

ब्राउज़र में ऐप का स्क्रीनशॉट इंगित करता है कि वीडियो प्लेयर ने लोड किया था बस वीडियो नहीं ढूंढ सका।

enter image description here

<source src="file:///C:/so/movie.mp4" type="video/mp4"> का भी प्रयास किया है जो वीडियो फ़ाइल के पूर्ण पथ को संदर्भित करता है, वह भी काम नहीं कर रहा है।

0
Russell Burdt 2 जून 2021, 21:35

3 जवाब

सबसे बढ़िया उत्तर

मुझे नहीं लगता कि पेज खोलने पर स्थानीय निर्देशिका से वीडियो फ़ाइलों को ऑटो-लोड करना बोकेह में समर्थित है। आपको वीडियो को वेब सर्वर पर रखना होगा और HTTP प्रोटोकॉल का उपयोग करके इसे लोड करना होगा। जैसा कि @Doug Sillars ने अपने पोस्ट में उल्लेख किया है, आपको अपने src="movie.mp4" को src="http://localhost:5006/so/sample.mp4" से बदलना चाहिए और बाहरी Mongoose वेब सर्वर चलाने की आवश्यकता को समाप्त करना चाहिए। तो आप कोड बस नीचे दिए गए कोड की तरह बन जाएंगे (यह परीक्षण किया गया है और यह काम कर रहा है!) इसे bokeh serve --show so के साथ चलाएं

main.py

from bokeh.models import Div
from bokeh.io import curdoc


div = Div(text="""
    <video width="300px" height="150px" controls autoplay>
    <source src="http://localhost:5006/so/static/movie.mp4" type="video/mp4"></video>
    """)

curdoc().add_root(div)

index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    {{ bokeh_css }}
    {{ bokeh_js }}
  </head>
  <body>
    {{ plot_div|indent(8) }}
    {{ plot_script|indent(8) }}
  </body>
</html>

निर्देशिका संरचना:

so
   |
   +---main.py
   +---static
      +---movie.mp4
   +---templates
        +---index.html

एक अन्य विकल्प FileInput विजेट का उपयोग करना है और उपयोगकर्ता को स्थानीय फ़ाइल सिस्टम से फ़ाइल का चयन करने की संभावना देना है जैसे नीचे इस उदाहरण में (बोकेह v2.2.1 पर परीक्षण किया गया):

from bokeh.plotting import show
from bokeh.models import Div, Column, FileInput, CustomJS

code = '''  const file = document.getElementsByTagName('input')[0].files[0]
            var URL = window.URL || window.webkitURL 
            var fileURL = URL.createObjectURL(file)
            var videoNode = document.querySelector('video')
            videoNode.src = fileURL '''

div = Div(text="""<video width="500px" height="250px" controls><source src="" type="video/mp4"></video>""")
fileinput = FileInput(accept=".mp4,.mpg,.mov", visible = True, width = 250, name = 'fileinput')  
fileinput.js_on_change('value', CustomJS(args={'fileinput': fileinput}, code = code))

show(Column(div, fileinput))
2
Tony 4 जून 2021, 17:51

आपका पेज लोकलहोस्ट पर है: 5006/तो, लेकिन आप लोकलहोस्ट पर वीडियो का अनुरोध कर रहे हैं: 5006/movie.mp4। मुझे लगता है कि आप लोकलहोस्ट चाहते हैं: 5006/so/movie.mp4।

2
Doug Sillars 4 जून 2021, 14:36

सुरक्षा मुद्देmongoose.ws का उपयोग करके एक बहुत तेज़ वेबसर्वर बनाना काम कर गया। उपरोक्त कोड तब बन जाता है

from bokeh.models import Div
from bokeh.io import curdoc


div = Div(text="""
    <video width="300px" height="150px" controls autoplay>
    <source src="http://192.168.1.197:8000/movie.mp4" type="video/mp4"></video>
    """)

curdoc().add_root(div)

जहां यूआरएल नेवला एप्लिकेशन द्वारा बनाया गया है।

0
Russell Burdt 3 जून 2021, 07:48