def startAudioCaptureLinux(): audioPort = getAudioPort() websocketRelayHost = getWebsocketRelayHost() audioHost = websocketRelayHost['host'] audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) ffmpegLocation = '' try: subprocess.Popen("ffmpeg") print("ffmpeg found at ffmpeg") ffmpegLocation = 'ffmpeg' except: print("ffmpeg not found at ffmpeg") try: subprocess.Popen("/usr/local/bin/ffmpeg") print("ffmpeg found at /usr/local/bin/ffmpeg") ffmpegLocation = '/usr/local/bin/ffmpeg' except: print("ffmpeg not found at /usr/local/bin/ffmpeg") audioCommandLine1 = '%s -f alsa -ar 44100 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % ( ffmpegLocation, robotSettings.mic_channels, audioDevNum, audioHost, audioPort, robotSettings.stream_key) audioCommandLine2 = 'arecord -D hw:%d -c %d -f S16_LE -r 32000 | %s -i - -ar 32000 -threads 4 -f mpegts -codec:a mp2 -b:a 128k -bufsize 8192k -muxdelay 0.001 http://%s:%s/%s/640/480/' % ( audioDevNum, robotSettings.mic_channels, ffmpegLocation, audioHost, audioPort, robotSettings.stream_key) if robotSettings.arecord: print(audioCommandLine1) return subprocess.Popen(shlex.split(audioCommandLine1)) else: print(audioCommandLine2) return subprocess.Popen(audioCommandLine2, shell=True)
def startAudioCaptureLinux(): audioPort = getAudioPort() websocketRelayHost = getWebsocketRelayHost() audioHost = websocketRelayHost['host'] audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) audioCommandLine = '/usr/local/bin/ffmpeg -f alsa -ar 44100 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % ( robotSettings.mic_channels, audioDevNum, audioHost, audioPort, robotSettings.stream_key) print audioCommandLine return subprocess.Popen(shlex.split(audioCommandLine))
def startAudioCaptureLinux(): audioEndpoint = getAudioEndpoint() audioHost = audioEndpoint['host'] audioPort = audioEndpoint['port'] audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) #audioCommandLine = '%s -f alsa -ar 44100 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % (robotSettings.ffmpeg_path, robotSettings.mic_channels, audioDevNum, audioHost, audioEndpoint['port'], robotSettings.stream_key) audioCommandLine = '%s -f alsa -ar 48000 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 64k -muxdelay 0.01 http://%s:%s/%s/640/480/'\ % (robotSettings.ffmpeg_path, robotSettings.mic_channels, audioDevNum, audioHost, audioPort, robotSettings.stream_key) print(audioCommandLine) #return subprocess.Popen(shlex.split(audioCommandLine)) return runAndMonitor("audio", shlex.split(audioCommandLine))
def startAudioCaptureLinux(): audioPort = getAudioPort() websocketRelayHost = getWebsocketRelayHost() audioHost = websocketRelayHost['host'] audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) audioCommandLine = '/usr/local/bin/ffmpeg -f alsa -ar 44100 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % ( robotSettings.mic_channels, audioDevNum, audioHost, audioPort, robotSettings.stream_key) # Windows command # audioCommandLine = 'c:/ffmpeg/bin/ffmpeg.exe -f dshow -ar 44100 -ac %d -audio_buffer_size 250 -i audio="%s" -f mpegts -codec:a libtwolame -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % (robotSettings.mic_channels, 'TOSHIBA Web Camera - HD', audioHost, audioPort, robotSettings.stream_key) print(audioCommandLine) return subprocess.Popen(shlex.split(audioCommandLine))
def startAudioCaptureLinux(): audioEndpoint = getAudioEndpoint() audioHost = audioEndpoint['host'] audioPort = audioEndpoint['port'] audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) #audioCommandLine = '%s -f alsa -ar 44100 -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/%s/640/480/' % (robotSettings.ffmpeg_path, robotSettings.mic_channels, audioDevNum, audioHost, audioEndpoint['port'], robotSettings.stream_key) audioCommandLine = '%s -f alsa -ar %d -ac %d -i hw:%d -f mpegts -codec:a mp2 -b:a 64k -muxdelay 0.01 http://%s:%s/%s/640/480/'\ % (robotSettings.ffmpeg_path, robotSettings.audio_rate, robotSettings.mic_channels, audioDevNum, audioHost, audioPort, robotSettings.stream_key) print(audioCommandLine) if commandArgs.usb_reset_id != None: if len(commandArgs.usb_reset_id) == 8: vendor_id = int(commandArgs.usb_reset_id[0:4], 16) product_id = int(commandArgs.usb_reset_id[4:], 16) dev = finddev(idVendor=vendor_id, idProduct=product_id) dev.reset() #return subprocess.Popen(shlex.split(audioCommandLine)) return runAndMonitor("audio", shlex.split(audioCommandLine))
def startRTCffmpeg(videoEndpoint, SSRCV, audioEndpoint, SSRCA): # set brightness if (robotSettings.brightness is not None): print("brightness") os.system("v4l2-ctl -c brightness={brightness}".format( brightness=robotSettings.brightness)) # set contrast if (robotSettings.contrast is not None): print("contrast") os.system("v4l2-ctl -c contrast={contrast}".format( contrast=robotSettings.contrast)) # set saturation if (robotSettings.saturation is not None): print("saturation") os.system("v4l2-ctl -c saturation={saturation}".format( saturation=robotSettings.saturation)) audioDevNum = robotSettings.audio_device_number if robotSettings.audio_device_name is not None: audioDevNum = audio_util.getAudioDeviceByName( robotSettings.audio_device_name) if robotSettings.protocol == 'video/VP8': #ffmpeg -h encoder=libvpx videoParameters = '-c:v libvpx \ {VPXextraParams} \ -tune psnr \ -deadline realtime \ -quality realtime \ -cpu-used 16 \ -pix_fmt yuv420p \ -b:v {kbps}k \ -preset ultrafast \ -map 0:v:0'\ .format(kbps=robotSettings.kbps, VPXextraParams=robotSettings.VPXextraParams) else: #ffmpeg -h encoder=libx264 videoParameters = '-c:v libx264 \ -pix_fmt yuv420p \ -vsync 2 \ -x264-params "{h264codecParams}" \ -b:v {kbps}k -minrate {kbps}k -maxrate {kbps}k -bufsize 2M \ -preset {h264preset} \ {h264extraParams}\ -g 50 \ -map 0:v:0'\ .format(kbps=robotSettings.kbps, h264codecParams=robotSettings.h264codecParams, h264preset=robotSettings.h264preset, h264extraParams=robotSettings.h264extraParams) videoCommandLine = '{ffmpeg_path} \ -f v4l2 -video_size {xres}x{yres} -r {framerate} -i /dev/video{video_device_number} {rotation_option} \ -f alsa -i hw:{audio_device_number} \ {video} \ -c:a libopus \ -b:a {kbpsAudio}k \ -async 1 \ -preset ultrafast \ -map 1:a:0 \ -f tee "[select=a:f=rtp:ssrc={SSRCA}:payload_type=100]rtp://{audio_host}:{audio_port}|[select=v:f=rtp:ssrc={SSRCV}:payload_type=101]rtp://{video_host}:{video_port}"'\ .format(ffmpeg_path=robotSettings.ffmpeg_path, video_device_number=robotSettings.video_device_number, xres=robotSettings.xres, yres=robotSettings.yres, framerate=robotSettings.framerate, audio_device_number=audioDevNum, rotation_option=rotationOption(), video=videoParameters, kbpsAudio=robotSettings.kbps_audio, audio_host=audioEndpoint['localIp'], audio_port=audioEndpoint['localPort'], video_host=videoEndpoint['localIp'], video_port=videoEndpoint['localPort'], SSRCA=SSRCA, SSRCV=SSRCV) print(videoCommandLine) return runAndMonitor("video", shlex.split(videoCommandLine))