Потоковое живое видео на Linux с помощью vlc - PullRequest
0 голосов
/ 19 марта 2019

Я использую Mininet-Wifi для потоковой передачи живого видео с сервера (station1 или sta1) на клиент (host 1 или h1) с помощью медиаплеера VLC.

Проблема в том, что два окна VLC не отображаются. "Этот пример основан на этом видео: https://www.youtube.com/watch?v=_C4H2gBdyQY"

Для потоковой передачи живого видео я использовал:

sta1.cmdPrint("cvlc -vvv v4l2:///dev/video0 --input-slave=alsa://hw:1,0 --mtu 1000 --sout \'#transcode{vcodec=mp4v,vb=800,scale=1,\
                    acodec=mpga,ab=128,channels=1}: duplicate{dst=display,dst=rtp{sdp=rtsp://10.0.0.10:8080/helmet.sdp}}\' &")
        h1.cmdPrint("cvlc rtsp://10.0.0.10:8080/helmet.sdp &")

Это код:

!/usr/bin/python

"This example is based on this video: https://www.youtube.com/watch?v=_C4H2gBdyQY"

from mininet.node import Controller, OVSKernelSwitch
from mininet.log import setLogLevel, info
from mn_wifi.node import OVSKernelAP
from mn_wifi.cli import CLI_wifi
from mn_wifi.net import Mininet_wifi
import os


def topology():
    "Create a network."
    net = Mininet_wifi( controller=Controller, switch=OVSKernelSwitch,
                        accessPoint=OVSKernelAP )

    info("*** Creating nodes\n")
    sta1 = net.addStation('sta1', wlans=2, ip='10.0.0.2/8')
    h1 = net.addHost( 'h1', mac='00:00:00:00:00:01', ip='10.0.0.1/8' )
    ap1 = net.addAccessPoint( 'ap1', ssid='ssid_ap1', mode='g',
                              channel=6, position='70,25,0' )
    ap2 = net.addAccessPoint( 'ap2', ssid='ssid_ap2', mode='g',
                              channel=1, position='30,25,0' )
    ap3 = net.addAccessPoint( 'ap3', ssid='ssid_ap3', mode='g',
                              channel=11, position='110,25,0' )
    s4 = net.addSwitch( 's4', mac='00:00:00:00:00:10' )
    c1 = net.addController( 'c1', controller=Controller )

    info("*** Configuring wifi nodes\n")
    net.configureWifiNodes()

    info("*** Associating and Creating links\n")
    net.addLink(ap1, s4)
    net.addLink(ap2, s4)
    net.addLink(ap3, s4)
    net.addLink(s4, h1)

    sta1.cmd('modprobe bonding mode=3')
    sta1.cmd('ip link add bond0 type bond')
    sta1.cmd('ip link set bond0 address 02:01:02:03:04:08')
    sta1.cmd('ip link set sta1-wlan0 down')
    sta1.cmd('ip link set sta1-wlan0 address 00:00:00:00:00:11')
    sta1.cmd('ip link set sta1-wlan0 master bond0')
    sta1.cmd('ip link set sta1-wlan1 down')
    sta1.cmd('ip link set sta1-wlan1 address 00:00:00:00:00:12')
    sta1.cmd('ip link set sta1-wlan1 master bond0')
    sta1.cmd('ip addr add 10.0.0.10/8 dev bond0')
    sta1.cmd('ip link set bond0 up')

    # 'seed'
    # net.seed(12)

    'plotting graph'
    net.plotGraph(max_x=140, max_y=140)

    net.startMobility(time=0)
    net.mobility(sta1,'start',time=20,position='20,50,0')
    net.mobility(sta1,'stop',time=79,position='135,50,0')
    net.stopMobility(time=80)


    info("*** Starting network\n")
    net.build()
    c1.start()
    s4.start( [c1] )
    ap1.start( [c1] )
    ap2.start( [c1] )
    ap3.start( [c1] )

    sta1.cmd('ip addr del 10.0.0.2/8 dev sta1-wlan0')
    os.system('ovs-ofctl add-flow s4 actions=normal')

    sta1.cmdPrint("cvlc -vvv v4l2:///dev/video0 --input-slave=alsa://hw:1,0 --mtu 1000 --sout \'#transcode{vcodec=mp4v,vb=800,scale=1,\
                acodec=mpga,ab=128,channels=1}: duplicate{dst=display,dst=rtp{sdp=rtsp://10.0.0.10:8080/helmet.sdp}}\' &")
    h1.cmdPrint("cvlc rtsp://10.0.0.10:8080/helmet.sdp &")



    info("*** Running CLI\n")
    CLI_wifi( net )

    info("*** Stopping network\n")
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    topology()

Мой вопрос: генерирует ли приведенный выше код файл SDP или я должен сгенерировать его из видеофайла, загруженного из Интернета, и поместить его в ту же папку, что и файл кода Python?

...