Проблема
Я получаю аудио- и видео-фрагменты со стороннего сервера, и я хотел бы передать эти фрагменты в ffmpeg для создания живого потока WebM в соответствии с этими инструкциями:
http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-webm-live-streaming-via-dash
Здесь они используют ввод с веб-камеры и микрофона, но мне нужно использовать фрагменты данных, поэтому команда ffmpeg будет выглядеть примерно так:
cmd = [
"ffmpeg",
"-f", "flv", "-i", "video.fifo",
"-f", "s16le", "-ar", "16000", "-ac", "1", "-i", "audio.fifo",
"-map", "0:0",
"-pix_fmt", "yuv420p",
"-c:v", "libvpx-vp9",
"-s", "640x480", "-keyint_min", "40", "-g", "40", "-speed", "6",
"-tile-columns", "4", "-frame-parallel", "1", "-threads", "8",
"-static-thresh", "0", "-max-intra-rate", "300",
"-deadline", "realtime", "-lag-in-frames", "0",
"-error-resilient", "1",
"-b:v", "3000k",
"-f", "webm_chunk",
"-header", self.video_header,
"-chunk_start_index", "1",
"video_360_%d.chk",
"-map", "1:0",
"-c:a", "libvorbis",
"-b:a", "16k", "-ar", "16000",
"-f", "webm_chunk",
"-audio_chunk_duration", "2000",
"-header", self.audio_header,
"-chunk_start_index", "1",
"audio_171_%d.chk"
]
Как видите, я использую файлы «video.fifo» и «audio.fifo», потому что я подумал, что было бы неплохо передать фрагменты через именованный канал, но я не могу заставить его работать . Вот что я делаю:
p = subprocess.Popen(cmd)
fa = os.open("video.fifo", os.O_WRONLY)
fv = os.open("audio.fifo", os.O_WRONLY)
Итак, я сначала запускаю подпроцесс, чтобы он открыл файлы fifo для чтения. После этого я смогу открыть их для записи, но не могу. Точнее, я могу открыть первый, но не второй. Так что, возможно, это как-то связано с тем, как ffmpeg обрабатывает свои входы, если их больше одного, но я просто не знаю.
Вопрос
Как я могу решить проблему не открываемых именованных каналов или как я могу достичь того, чего я хотел достичь, без именованных каналов.