AgoraIO-Extensions / AgoraIO-Extensions/Agora-Python-Server-SDK

Unable to resend the received frame

Đang mở
#2 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
18
Fork
5
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Hi,

I am trying to send the received from in onFrame function:

def on_frame(self, channel_id, remote_uid, frame:VideoFrame):
logger.info(f"on_frame, channel_id={channel_id}, remote_uid={remote_uid}, width={frame.width}, height={frame.height}, y_stride={frame.y_stride}, u_stride={frame.u_stride}, v_stride={frame.v_stride}, len_y={len(frame.y_buffer)}, len_u={len(frame.u_buffer)}, len_v={len(frame.v_buffer)}")

if self._save_to_disk:
file_path = os.path.join(log_folder, channel_id + "_" + remote_uid + '.yuv')
y_size = frame.y_stride * frame.height
uv_size = (frame.u_stride * frame.height // 2)
# logger.info(f"on_frame, file_path={file_path}, y_size={y_size}, uv_size={uv_size}, len_y={len(frame.y_buffer)}, len_u={len(frame.u_buffer)}, len_v={len(frame.v_buffer)}")
# self.push_yuv_frame()
with open(file_path, 'ab') as f:
f.write(frame.y_buffer[:y_size])
f.write(frame.u_buffer[:uv_size])
f.write(frame.v_buffer[:uv_size])
# if self.video_frame_sender!=None:
# logger.info(f"on_frame, file_path={file_path}, y_size={y_size}, uv_size={uv_size}, len_y={len(frame.y_buffer)}, len_u={len(frame.u_buffer)}, len_v={len(frame.v_buffer)}")
# exit()
# if self.loop:
self.push_yuv_frame(frame, self.video_frame_sender, "Frame Metadata")
# await asyncio.create_task(self.push_yuv_frame(frame, self.video_frame_sender, "hello metadata"))

return 1

def on_user_video_track_subscribed(self, agora_local_user, user_id, info, agora_remote_video_track):
logger.info(f"on_user_video_track_subscribed, agora_local_user={agora_local_user}, user_id={user_id}, info={info}, agora_remote_video_track={agora_remote_video_track}")
return 0
def push_yuv_frame(self,frame: VideoFrame, video_sender: VideoFrameSender, metadata: str):
yuv_buffer = bytearray(frame.y_buffer) + bytearray(frame.u_buffer) + bytearray(frame.v_buffer)

external_frame = ExternalVideoFrame()
external_frame.buffer = yuv_buffer
external_frame.type = 1 # Assuming a certain type, modify as necessary
external_frame.format = 1 # Assuming YUV format, modify as necessary
external_frame.stride = frame.y_stride
external_frame.height = frame.height
external_frame.timestamp = 0 # Modify if timestamp handling is needed
external_frame.metadata = metadata

ret = video_sender.send_video_frame(external_frame)
logger.info(f"Frame sent with status {ret}")
exit(0)

In video frame observer. I am not sure whether you support this or not? Where I can do that?

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.