You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Telegram API发送媒体组时移动端消息拆分问题

Telegram媒体组发送:移动端大视频拆分问题解决

问题现象

使用TDLib或WTelegram库发送照片+视频的媒体组时,桌面端和Web端能正常显示为单条消息,但移动端仅在视频大小小于10MB时保持合并,视频超过10MB就会拆分为两条独立消息。

问题原因

Telegram移动端对媒体组的类型一致性要求更严格:当视频文件超过10MB时,如果没有正确标记为视频媒体类型,会被默认识别为文档。媒体组中混合照片(媒体类型)和文档(文件类型)时,移动端会强制拆分显示。


针对TDLib的修复方案

需要在InputMessageVideo中补充必要的视频元数据(时长、分辨率),并确保视频被正确识别为视频媒体而非文档:

private static async Task SendMediaGroup(long chatId, string photoPath, string videoPath)
{
    // 建议用媒体工具(如FFmpeg)提取真实的视频时长、分辨率,避免硬编码
    int videoDuration = 120; 
    int videoWidth = 1280;
    int videoHeight = 720;

    var inputMessages = new TdApi.InputMessageContent[]
    {
        new TdApi.InputMessageContent.InputMessagePhoto
        {
            Photo = new TdApi.InputFile.InputFileLocal { Path = photoPath },
        },
        new TdApi.InputMessageContent.InputMessageVideo
        {
            Video = new TdApi.InputFile.InputFileLocal { Path = videoPath },
            Duration = videoDuration,
            Width = videoWidth,
            Height = videoHeight,
            // 关键:禁用默认的"文档模式"发送
            SendAsDocument = false
        }
    };

    var result = await _client.ExecuteAsync(new TdApi.SendMessageAlbum
    {
        ChatId = chatId,
        InputMessageContents = inputMessages,
    });
}

关键修改点:

  • 添加Duration、Width、Height元数据,让TDLib明确识别为视频媒体
  • 设置SendAsDocument = false,强制视频以媒体类型发送而非文档

针对WTelegram的修复方案

WTelegram中需避免使用InputMediaUploadedDocument处理视频,改用InputMediaUploadedVideo并完善元数据:

// 替换原InputMediaUploadedDocument为InputMediaUploadedVideo
var inputMediaVideo = new InputMediaUploadedVideo
{
    file = uploadedVideo,
    mime_type = "video/mp4",
    duration = 120, // 替换为真实视频时长(秒)
    w = 1280,       // 真实视频宽度
    h = 720,        // 真实视频高度
    supports_streaming = true // 帮助移动端识别为可流媒体视频
};

var inputMediaPhoto = new InputMediaUploadedPhoto
{
    file = uploadedPhoto
};

var mMediaPhoto = client.Messages_UploadFile(inputPeer, inputMediaPhoto);
var mMediaVideo = client.Messages_UploadFile(inputPeer, inputMediaVideo);

var inputMediaList = new InputSingleMedia[]
{
    new InputSingleMedia
    {
        media = mMediaPhoto.ToInputMedia(),
        message = caption,
        random_id = Helpers.RandomLong()
    },
    new InputSingleMedia
    {
        media = mMediaVideo.ToInputMedia(),
        random_id = Helpers.RandomLong()
    }
};

var updates = await client.Messages_SendMultiMedia(inputPeer, inputMediaList);

关键修改点:

  • 用InputMediaUploadedVideo替代InputMediaUploadedDocument,明确指定为视频媒体类型
  • 补充duration、w、h元数据,添加supports_streaming = true优化移动端识别逻辑

额外注意事项

  • 视频元数据建议通过媒体处理工具动态提取,不要硬编码
  • 确保视频采用Telegram兼容的编码(推荐H.264编码+MP4容器)
  • 部分旧版本Telegram移动端可能仍有兼容问题,建议测试最新版本

内容的提问来源于stack exchange,提问作者Vova Shirokov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:13:22