python-3.x - 我将如何使用 ffpyplayer 播放视频流?

标签 python-3.x video ffmpeg

第一次在这里发海报,所以对我放轻松。

我正在为自己和 friend 做一个有趣的小项目,基本上我希望能够使用 ffmpeg 流式传输和接收视频,作为一种屏幕共享应用程序。我是一个完整的 python 菜鸟,我只是从每个文档中删除。
这是我要发送的内容:

import ffmpeg
stream = ffmpeg.input("video.mp4")
stream = ffmpeg.output(stream, "tcp://127.0.0.1:1234", format="mpegts")
ffmpeg.run(stream)

它很简单,但是当我运行 ffplay.exe -i tcp://127.0.0.1:1234?listen -hide_banner 时它可以工作。在命令提示符下运行代码以发送视频,它运行良好,但是当我尝试使用我的代码接收视频时,我得到的只是音频,没有视频,并且在视频完成后的最后一秒音频重复。
下面是接收代码:
from ffpyplayer.player import MediaPlayer
test = MediaPlayer("tcp://127.0.0.1:1234?listen")
while True:
    test.get_frame()
    if test == "eof":
        break

感谢您的帮助,如果我只是忘记了某些事情,我很抱歉:P

最佳答案

您只是从 中提取帧视频.mp4 在你的代码中。

test = MediaPlayer("tcp://127.0.0.1:1234?listen")
while True:
    test.get_frame()
    if test == "eof":
        break

现在,您需要使用一些第三方库来显示它们,因为 ffpyplayer不提供任何内置功能来循环显示帧。

下面的代码使用 OpenCV 显示提取的帧。使用以下命令安装 OpenCV 和 numpy
pip3 install numpy opencv-python

将您的接收者代码更改为
from ffpyplayer.player import MediaPlayer
import numpy as np
import cv2

player = MediaPlayer("tcp://127.0.0.1:1234?listen")
val = ''
while val != 'eof':
    frame, val = player.get_frame()
    if val != 'eof' and frame is not None:
        img, t = frame
        w = img.get_size()[0] 
        h = img.get_size()[1]
        arr = np.uint8(np.asarray(list(img.to_bytearray()[0])).reshape(h,w,3)) # h - height of frame, w - width of frame, 3 - number of channels in frame
        cv2.imshow('test', arr)
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break

您也可以直接使用 python subprocess 运行 ffplay 命令

关于python-3.x - 我将如何使用 ffpyplayer 播放视频流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611075/

相关文章:

javascript - 强制在 App 而不是 Safari iOS 中打开 youtube 链接

node.js - 如何使用 ffmpeg 将 Node 应用程序部署到 heroku?

c++ - "invalid argument"用于 av_buffersrc_write_frame/av_buffersrc_add_frame

python-3.x - 在python内存错误中读取大量文件(20k+)

python - 生成奇数列表时出现内存错误

python - 类型错误 : a bytes-like object is required, 不是 'str'

python - Tkinter:根据关键字突出显示/着色特定的文本行

javascript - 将大型图像文件和视频上传到 Google Cloud Storage

video - 使用 FFmpeg 在特定时间将视频叠加到另一个视频上

python - 在 python、shell 和 stdout 中使用 ffmpeg