gpt4 book ai didi

python - 从 PyAV av.VideoFrame 创建 HLS 视频流

转载 作者:行者123 更新时间:2023-12-04 23:01:49 55 4
gpt4 key购买 nike

我希望你大声而自豪。
我是 PyAV 的新手我正在使用 aiortc对于 WebRTC MediaServer,在 aiortc 中现场 session 我有av.VideoFrame每个视频帧可用的对象,我想从这些帧实时创建 HLS 视频片段。
正如您在 this project 中看到的那样:
他们使用了OpenCV传送到 FFmpeg 的视频帧字节用于 HLS 流的 CLI
我的问题是,我该如何使用 PyAV/python消费av.VideoFrame对象并提取由 60 帧组成的 2 秒视频片段用于 HLS 流式传输?
或任何适合将 VideoFrames 组装到 HLS 流的 python 包
提前致谢

最佳答案

您正在混合一些术语。我假设 HLS 指的是 HTTP-Streaming。 WebRTC 是一种不同的方式(协议(protocol))来发送视频(P2P)。 aiortc不是 MediaServer,即使您可以做类似的事情。您可以使用 aiortc作为向浏览器发送视频轨道的 WebRTC 客户端(另一个 WebRTC 客户端)。可以使用 HTTP 服务器作为信令服务器来建立连接。
我在下面假设您喜欢使用 aiortc 流式传输您的视频。 (WebRTC)。
如何转换轨道的帧(例如来自网络摄像头)?
如果我理解正确,您的实际问题是“如何转换轨道的帧(例如来自网络摄像头)?”。 Here是一个使用 MediaStreamTrack 的可运行示例实现VideoTransformTrack .但是,此示例从浏览器(其他客户端)接收网络摄像头图像。看看this例如,它使用服务器的网络摄像头(Python 应用程序)。只需添加

pc.addTrack(VideoTransformTrack(video, transform="rotate"))
RTCPeerConnection ( pc 在上面的片段中)和 videocreate_local_tracks 返回.
如何从帧创建轨道?
class MyMediaStreamTrack(MediaStreamTrack):

def __init__(self) -> None:
super().__init__()
# use webcam as source of frames in this example
self.frames = av.open(file="/dev/video0").decode()
self.kind = 'video'

async def recv(self):
# read next av.VideoFrame
frame = next(self.frames)
# optional: transform/consume frame
frame = self._transform(frame)
return frame

def _transform(self, frame):
img = frame.to_ndarray(format="bgr24")
rows, cols, _ = img.shape
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), frame.time * 45, 1)
img = cv2.warpAffine(img, M, (cols, rows))

# rebuild a VideoFrame, preserving timing information
new_frame = av.VideoFrame.from_ndarray(img, format="bgr24")
new_frame.pts = frame.pts
new_frame.time_base = frame.time_base
return new_frame


pc = RTCPeerConnection()
pc.addTrack(MyMediaStreamTrack())

关于python - 从 PyAV av.VideoFrame 创建 HLS 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65868671/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com