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

Twitter API v2视频上传异常:状态持续in_progress且报InvalidMedia错误

Twitter API v2上传视频一直处于in_progress,提示InvalidMedia错误的解决办法

问题详情

上传视频时,处理状态始终卡在in_progress(进度99%),同时返回InvalidMedia错误,提示file is invalid,错误响应如下:

object(stdClass)#9 (5) { ["media_id"]=> int(1682626180757979138) ["media_id_string"]=> string(19) "1682626180757979138" ["media_key"]=> string(21) "7_1682626180757979138" ["size"]=> int(3740488) ["processing_info"]=> object(stdClass)#12 (3) { ["state"]=> string(11) "in_progress" ["progress_percent"]=> int(99) ["error"]=> object(stdClass)#13 (3) { ["code"]=> int(1) ["name"]=> string(12) "InvalidMedia" ["message"]=> string(15) "file is invalid" } } }

使用的PHP代码:

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$media = $connection->upload('media/upload', ['media' => '/path/to/file/kitten.mp4'], true);

$limit = 0;
do{
$status = $connection->mediaStatus($media->media_id_string);
sleep(5);
$limit++;
}while($status->processing_info->state !== 'succeeded' && $limit <= 3);

$parameters = [
    'status' => 'Meow Meow Meow',
    'media'=> ['media_ids' => $media->media_id_string]
];
$connection->setApiVersion('2');
$result = $connection->post('tweets', $parameters, true);

可能的原因及解决步骤

  • 视频格式/编码不符合Twitter要求
    Twitter对上传视频有明确限制,必须满足:

    • 容器格式:MP4或MOV
    • 视频编码:H.264(基线、主或高配置,最高级别5.2)
    • 音频编码:AAC-LC(最高192kbps)
    • 分辨率:32x32至1920x1200(或1200x1920)
    • 时长:0.5秒到140秒
    • 文件大小:普通账号最大512MB

    可以用FFmpeg转换视频到合规格式,示例命令:

    ffmpeg -i kitten.mp4 -c:v libx264 -profile:v baseline -level 3.0 -c:a aac -b:a 128k compliant_kitten.mp4
    
  • 文件路径或权限问题
    先确认视频路径正确,且PHP进程有读取权限,可在代码开头添加验证:

    $videoPath = '/path/to/file/kitten.mp4';
    if (!file_exists($videoPath)) {
        die('视频文件不存在');
    }
    if (!is_readable($videoPath)) {
        die('无视频文件读取权限');
    }
    
  • 改用分块上传方式
    超过15MB的视频必须用分块上传,替换原单文件上传代码:

    // 初始化上传
    $media = $connection->upload('media/upload', [
        'command' => 'INIT',
        'media_type' => 'video/mp4',
        'total_bytes' => filesize($videoPath)
    ], true);
    
    // 分块上传
    $chunk = 0;
    $handle = fopen($videoPath, 'rb');
    while (!feof($handle)) {
        $chunkBytes = fread($handle, 5242880); // 每次上传5MB
        $connection->upload('media/upload', [
            'command' => 'APPEND',
            'media_id' => $media->media_id_string,
            'segment_index' => $chunk,
            'media' => $chunkBytes
        ], true);
        $chunk++;
    }
    fclose($handle);
    
    // 完成上传
    $media = $connection->upload('media/upload', [
        'command' => 'FINALIZE',
        'media_id' => $media->media_id_string
    ], true);
    
  • 优化状态轮询逻辑
    原轮询次数太少(仅3次),且未处理错误终止,修改为:

    $limit = 0;
    $maxAttempts = 10;
    $isSuccess = false;
    do {
        $status = $connection->mediaStatus($media->media_id_string);
        // 检测到错误直接终止
        if (isset($status->processing_info->error)) {
            error_log('视频处理失败:' . $status->processing_info->error->message);
            break;
        }
        if ($status->processing_info->state === 'succeeded') {
            $isSuccess = true;
            break;
        }
        sleep(5);
        $limit++;
    } while ($limit < $maxAttempts);
    
    if (!$isSuccess) {
        die('视频处理超时或失败');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:55:07