Commit 3c4fc377 authored by Tomas Kralovic's avatar Tomas Kralovic
Browse files

Fixes of problems found while writing about them

parent db841ed5
Loading
Loading
Loading
Loading
+39 −22
Original line number Diff line number Diff line
@@ -2,29 +2,29 @@ import subprocess


def prepare_transmission(data):
    script = ['ffmpeg', '-thread_queue_size', '4096']
    video = data['video']
    audio = data['audio']

    if not (video['source'] or audio['source']):
        raise ValueError

    script = ['ffmpeg', '-hide_banner']
    if video['source']:
        script += ['-thread_queue_size', '4096', '-probesize', '32', '-analyzeduration', '0']
        if video['format']:
            script += ['-f', video['format']]

        if video['codec']:
            script += ['-input_format', video['codec']]

    if not video['source']:
        raise ValueError

        script += ['-i', video['source']]

    audio = data['audio']
    script += ['-thread_queue_size', '4096']
    if audio['source']:
        script += ['-thread_queue_size', '4096', '-probesize', '32', '-analyzeduration', '0']
        if audio['format']:
            script += ['-f', audio['format']]

    if not audio['source']:
        raise ValueError

        audio_source = 'hw:' + audio['source']
    script += ['-i', audio_source, '-hide_banner', '-probesize', '32', '-analyzeduration', '0']
        script += ['-i', audio_source]

    codec = data['codec']
    if codec['outputCodec'] == 'libx264':
@@ -60,18 +60,21 @@ def prepare_playing(data):
    url = create_url('srt', data['url'], data['port'], data['srtOptions'],
                     data['defaultSrt'], data['isServer'], False)
    script.append(url)
    # script = ' '.join(script)
    return start(script)


def prepare_decklink(data):
    if not data['device']:
        raise ValueError

    url = create_url('srt', data['url'], data['port'], data['srtOptions'],
                     data['defaultSrt'], data['isServer'], False)
    script = ['ffmpeg', '-thread_queue_size', '4096', '-i', url, data['device']]
    script = ['ffmpeg', '-thread_queue_size', '4096', '-probesize', '32', '-analyzeduration', '0',
              '-i', url, data['device']]
    return start(script)


def create_url(protocol, url, port, options, default, server, sender, user, password):
def create_url(protocol, url, port, options, default, server, sender, user=None, password=None):
    if default:
        if sender:
            options = 'pkt_size=1316&smoother=live&transtype=live&send_buffer_size=0&latency=0'
@@ -79,7 +82,10 @@ def create_url(protocol, url, port, options, default, server, sender, user, pass
            options = 'pkt_size=1316&smoother=live&transtype=live&recv_buffer_size=0&latency=0'

    if server:
        if options:
            options += '&mode=listener'
        else:
            options = 'mode=listener'
        url = '0.0.0.0'

    if protocol == 'srt':
@@ -102,6 +108,13 @@ def start(script):


def get_video_devices():
    result_devices = parse_v4l2_devices()
    result_devices += parse_decklink_devices()

    return result_devices


def parse_v4l2_devices():
    v4l2_devices = subprocess.run(['ffmpeg', '-hide_banner', '-sources', 'v4l2'],
                                  stdout=subprocess.PIPE).stdout

@@ -126,13 +139,17 @@ def get_video_devices():
            split_info = one_format_info.split(': ')
            if len(split_info) >= 4:
                video_formats.append(split_info[1].strip())
                video_sizes.append(split_info[3].strip())
                video_sizes.append(split_info[3].strip().split())
        result_devices.append(
            {'name': device, 'formats': video_formats, 'sizes': video_sizes, 'type': 'v4l2'})
    return result_devices


def parse_decklink_devices():
    blackmagic_devices = subprocess.run(['ffmpeg', '-hide_banner', '-sources', 'decklink'],
                                        stdout=subprocess.PIPE).stdout

    result_devices = []
    blackmagic_cleaned = []
    for blackmagic_device in str(blackmagic_devices).split('\\n'):
        if blackmagic_device.startswith(' '):
@@ -168,7 +185,7 @@ def get_audio_devices():


def get_output_devices():
    blackmagic_devices = subprocess.run(['ffmpeg', '-hide_banner', '-sources', 'decklink'],
    blackmagic_devices = subprocess.run(['ffmpeg', '-hide_banner', '-sinks', 'decklink'],
                                        stdout=subprocess.PIPE).stdout

    result_devices = []
+8 −5
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ from typing import List
from flask import Flask, request
from flask_cors import CORS
from subprocess import Popen
import time
import ffmpeg

HOST = ''
@@ -37,7 +38,6 @@ def play_on_blackmagic():

@app.route('/stop', methods=['POST'])
def stop():
    if len(FFMPEG_PROCESS) > 0:
    for process in FFMPEG_PROCESS:
        process.kill()
    FFMPEG_PROCESS.clear()
@@ -47,9 +47,12 @@ def stop():
@app.route('/restart', methods=['POST'])
def restart():
    for process in FFMPEG_PROCESS:
        script = process.args
        process.kill()
        ffmpeg.start(script)
    time.sleep(2)
    for process_index in range(len(FFMPEG_PROCESS)):
        process = FFMPEG_PROCESS[process_index]
        script = process.args
        FFMPEG_PROCESS[process_index] = ffmpeg.start(script)
    return "Success"


+5 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ function App() {

  const [protocol, setProtocol] = useState('srt')
  const [port, setPort] = useState(12345)
  const [url, setUrl] = useState('')
  const [url, setUrl] = useState('localhost')
  const [defaultSrt, setDefaultSrt] = useState(true)
  const [srtSendOptions, setSrtSendOptions] = useState('pkt_size=1316&smoother=live&transtype=live&send_buffer_size=0&latency=0')
  const [srtRecvOptions, setSrtRecvOptions] = useState('pkt_size=1316&smoother=live&transtype=live&recv_buffer_size=0&latency=0')
@@ -77,6 +77,10 @@ function App() {
        setVideoDevices(response.data.video_devices)
        setAudioDevices(response.data.audio_devices)
        setOutputDevices(response.data.output_devices)
        setVideoSource(response.data.video_devices[0]?.name ?? '')
        setVideoCodec(response.data.video_devices[0]?.formats[0] ?? '')
        setAudioSource(response.data.audio_devices[0]?.device_number ?? '')
        setDecklinkOutput(response.data.output_devices[0]?.name ?? '')
      })
  }, [])

+0 −6
Original line number Diff line number Diff line
@@ -20,12 +20,6 @@ export const AudioSettingScreen = (
        devices: devices
    } : AudioProps ) => {

    useEffect( () => {
        if (devices.length >= 1) {
            setSource(devices[0].device_number)
        }
    }, [devices])

    return (
        <div className='Setting_Screen'>
            <div>Audio Source
+2 −8
Original line number Diff line number Diff line
@@ -18,18 +18,12 @@ interface AvailableDevices {
export const DecklinkOutputSettingScreen = (
    {
        decklinkOutput: decklinkOutput,
        setDecklinkOutput: SetDecklinkOutput,
        setDecklinkOutput: setDecklinkOutput,
        outputToDecklink: outputToDecklink,
        setOutputToDecklink: setOutputToDecklink,
        devices: devices,
    }: OutputProps) => {

    useEffect( () => {
        if (devices.length >= 1) {
            SetDecklinkOutput(devices[0].name)
        }
    }, [devices])

    return (
        <div className='Setting_Screen'>
            Output To Blackmagic
@@ -37,7 +31,7 @@ export const DecklinkOutputSettingScreen = (
                <select 
                    className="Setting_Screen_Item" 
                    defaultValue={decklinkOutput} 
                    onChange={event => SetDecklinkOutput(event.target.value)}>
                    onChange={event => setDecklinkOutput(event.target.value)}>
                        {
                            devices.map((device) => (
                                <option value={device.name} key={device.name}>{device.name}</option>
Loading