如何上传流媒体视频?

How to Upload Streamable Video?

我想问一下。我使用 UploadFileAsync 和 Post 使用 SendMediaAsync 上传视频,但是当我检查聊天时,显示文件没有缩略图并且无法流式传输(如普通文档文件)。你能告诉我如何使用它观看直播吗?

这是我的代码:

WTelegram.Client.ProgressCallback progress = new WTelegram.Client.ProgressCallback((p,r) => {
     Console.Write(p*100/r+"%\r");
 });
SetLog("Uploading File...");
var inputFile = await client.UploadFileAsync("video\myfile.mp4", progress);
var target = chats.chats[channelId];
SetLog($"Sending a message in chat {target.ID}: {target.Title}");
await client.SendMediaAsync(target, "Test", inputFile);

这是上面的代码结果:

Result Above Code

我想达到的目标:

Image

当你发送一个小视频(无需按播放按钮即可立即自动播放)时,SendMediaAsync 就足够了。

但是,对于更大的 mp4 视频,Telegram 不会尝试启动 downloading/analyze/play 直到用户按下播放或下载按钮。因此,如果您希望 mp4 显示为可流式传输,则需要调用类似以下内容:

await client.SendMessageAsync(targetPeer, "caption", new InputMediaUploadedDocument
{
  file = mediaInputFile, mime_type = "video/mp4",
  attributes = new[] {
    new DocumentAttributeVideo { duration = 183, w = 1280, h = 720,
      flags = DocumentAttributeVideo.Flags.supports_streaming }
  }
});

这意味着你必须在发送前自己分析视频,才能在上面的代码中传递正确的 duration/width/height 视频。 我尝试将 0 传递给这些,它似乎也有效,但预览将显示为正方形并且持续时间显示为“0:00”,直到用户按下播放。

预览图像也可能是 blank/black,除非您将以下内容添加到 InputMediaUploadedDocument:thumb = photoInputFile, flags = InputMediaUploadedDocument.Flags.has_thumb (这意味着您之前必须上传过缩略图)