求助:使用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
相关产品推荐
相关产品推荐

