TweetInvi Video Upload Failed With Невозможно опубликовать твит, так как не удалось опубликовать некоторые медиафайлы!

У меня проблема с TweetInvi 0.9.9.7, не могу загрузить видео. Это видео в формате MP4 размером 9 МБ, и я могу просто загрузить его в твиттер, используя веб-интерфейс. Сообщение об ошибке, которое я получаю:

Твит не может быть опубликован, так как не удалось опубликовать некоторые из медиа!

Я использовал fiddler и вижу, что это сообщение об ошибке возвращается из API:

error=размер сегмента должен быть ‹= 1.

По словам одного из разработчиков, эта ошибка возникает, когда видео размером более 5 МБ пытается загрузить в Twitter и не отправляется по частям. https://twittercommunity.com/t/append-call-in-video-upload-api-giving-error/49067

Вот мой код, я что-то не так делаю? Загрузка файла размером менее 5 МБ работает нормально, но официальная спецификация API поддерживает видео размером до 15 МБ.

Auth.ApplicationCredentials = new TwitterCredentials("blahblahblah", "censoring private key", "***private, keep out***", "***beware of dog***");
var binary = File.ReadAllBytes(VideoPath);
Tweet.PublishTweetWithVideo("Here is some tweet text", binary);

person alstonp    schedule 10.10.2015    source источник


Ответы (1)


В конце концов, я нашел эту недокументированную красоту: Upload.CreateChunkedUploader();

Который раскрывает именно ту функциональность, которая мне нужна для загрузки этого большого файла. Вот мой новый рабочий код для всех, кто может столкнуться с этой проблемой.

        var chunk = Upload.CreateChunkedUploader(); //Create an instance of the ChunkedUploader class (I believe this is the only way to get this object)

        using(FileStream fs = File.OpenRead(VideoPath))
        {
            chunk.Init("video/mp4", (int)fs.Length); //Important! When initialized correctly, your "chunk" object will now have a type long "MediaId"
            byte[] buffer = new byte[4900000]; //Your chunk MUST be 5MB or less or else the Append function will fail silently.
            int bytesRead = 0;

            while((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
            {
                byte[] copy = new byte[bytesRead];
                Buffer.BlockCopy(buffer, 0, copy, 0, bytesRead);
                chunk.Append(copy, chunk.NextSegmentIndex); //The library says the NextSegment Parameter is optional, however I wasn't able to get it to work if I left it out. 
            }
        }

        var video = chunk.Complete(); //This tells the API that we are done uploading.
        Tweet.PublishTweet("Tweet text:", new PublishTweetOptionalParameters()
        {
            Medias = new List<IMedia>() { video }
        });

Важные выводы из этого:

Примечание. Вам будет предложено, если выбранное видео не в поддерживаемом формате. Максимальный размер файла 512 МБ. Подробнее о форматах см. здесь.

person alstonp    schedule 10.10.2015
comment
Я рад, что вы нашли это. Если у вас есть какие-либо предложения, не стесняйтесь публиковать их на github, я всегда сделаю все возможное, чтобы улучшить библиотеку. - person Linvi; 13.10.2015
comment
Эй, спасибо! Сделаю! Ваша библиотека потрясающая. Я сильно полагаюсь на него, но это было первое и единственное, с чем я столкнулся, и, в конечном счете, ваша библиотека уже справилась с этим. Мне просто нужно было искать сложнее, чтобы найти его. - person alstonp; 13.10.2015