Как сделать так, чтобы отдельное окно приложения для совместного использования экрана Python отображалось на веб-сервере Django?

#python #django

Вопрос:

Я пытаюсь поделиться видео с рабочего стола виртуальной машины Windows, чтобы показать его на веб-сервере Linux Django. Когда я запускаю сценарии Python, общий доступ к экрану отображается в виде отдельного окна приложения.

Как мне вместо этого отобразить отдельное окно Python на веб-сервере Django?

receiver.py (работает на компьютере с Linux)

 from vidstream import StreamingServer
import threading

receiver = StreamingServer('ipaddr', 8080)

t = threading.Thread(target=receiver.start_server)
t.start()

while input("") != 'STOP':
    continue

receiver.stop_server()
 

sender.py (работает на виртуальной машине Windows)

 from vidstream import ScreenShareClient
import threading

sender = ScreenShareClient('ipaddr', 8080)

t = threading.Thread(target=sender.start_stream)
t.start()

while input("") != 'STOP':
    continue

sender.stop_stream()
 

urls.py

 from django.urls import path
from . import views 

# URL configuration
urlpatterns = [
    path('index/', views.getIndex), 
    path('', views.button),
    path('receiver/', views.receiver),
]
 

views.py

 from django.shortcuts import render

import requests
import sys
from subprocess import run,PIPE

from django.http import HttpResponse, StreamingHttpResponse

def button(request):
    return render(request, 'receiver.html')

def receiver(request):
    inp=request.POST.get()
    out=run([sys.executable, "//home//cts//ctdjango//receiver.py"],shell=False,stdout=PIPE)
    print(out)
    return render(request, 'receiver.html', {'data':out.stdout})
 

receiver.html

 <html>
<head>
    <title>Cybertest Receiver</title>
</head>
<body>
    <form action="/djangosite/templates/receiver.html" method="POST">
        {% csrf_token %}
        {% if data %}
        <p>Output data: {{ data }}</p> 
        {% else %}
        <p>No data output</p>
        {% endif %}
        <br><br>
        <button type=“submit“>Run script</button>
    </form>
</body>
</html>
 

Ответ №1:

Я думаю, что подход неправильный: чтобы иметь возможность воспроизводить видео в браузере, вам необходимо предоставить правильный формат потоковой передачи, поддерживаемый браузером.

Я предлагаю m3u8 формат, с помощью этого формата вы также сможете увидеть его с помощью программного обеспечения, такого как VLC Media Player.

Предлагаемый подход:

Вашему веб-серверу просто нужно будет обслуживать два вида файлов:

  • индексный файл (.m3u8)
  • фрагменты видео (называемые файлами сегментов), записанные с помощью захвата экрана

Пример использования python и gstreamer можно найти здесь: Прямая трансляция видео в браузер с помощью GStreamer

Это отправная точка, то, чего вы хотите достичь, достижимо, но вы должны правильно соединить некоторые части и это не тривиально.