最近,我一直在尝试不同的方式告诉我的Raspberry Pi将视频发送到YouTube直播。我想要做的其中一件事就是启动Pi,它会自动启动实时流。这样做的好处是巨大的(不需要用键盘/鼠标来启动流,或者必须通过ssh进入Pi来启动流)。
现在我要做的是创建一个Python程序,将来自编码器(FFmpeg)的流直接传送到流。我的目标是使程序工作,然后将其设置为自动运行。但每次我在终端上运行文件时,这都是我的结果:
Traceback (most recent call last):
File "stream.py", line 22, in <module>
stream.stdin.close()
NameError: name 'stream' is not defined
[h264 @ 0x19ed450] Could not find codec parameters for stream 0 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
pi@raspberrypi:~ $ Input #0, h264, from 'pipe:':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264, none, 25 tbr, 1200k tbn, 50 tbc
Unknown input format: 'alsa'
现在我想我可以修复我可以解决其中的一些错误,但最令我担心的是:&#34; alsa&#34;不明。我安装了&#34; libsasound&#34;这应该使Alsa可用,但显然没有帮助。
我使用的是Python 3。
这是我对该程序的语法:
import subprocess
import picamera
import time
YOUTUBE="rtmp://a.rtmp.youtube.com/live2/"
KEY = ("MY PERSONAL ENCODER KEY")
stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac 1 -i hw:1,0 -vcodec copy -acodec aac -ac 1 -ar 8000 -ab 32k -map 0:0 -map 1:0 -strict experimental -f flv ' + YOUTUBE + KEY
stream_pipe = subprocess.Popen(stream_cmd, shell=True, stdin=subprocess.PIPE)
camera = picamera.PiCamera(resolution=(640, 480), framerate=25)
try:
now = time.strftime("%Y-%m-%d-%H:%M:%S")
camera.framerate = 25
camera.vflip = True
camera.hflip = True
camera.start_recording(stream.stdin, format='h264', bitrate = 2000000)
while True:
camera.wait_recording(1)
except KeyboardInterrupt:
camera.stop_recording()
finally:
camera.close()
stream.stdin.close()
stream.wait()
print("Camera safely shut down")
print("Good bye")
现在也许我在这里错过了一些简单的东西,但我不知道是什么。我尝试了很多想法(例如用其他输入替换Alsa,命名&#34; stream&#34;函数。)我不知道。