Acho que o problema está na sua chamada para o procedimento.
Com versões do conector MySQL que não suportam
OUT
parâmetros, a solução normal é usar variáveis de usuário do MySQL para armazenar os valores de retorno e, em seguida, executar uma consulta para obter os valores dessas variáveis. Primeiro, execute o procedimento armazenado e faça com que o MySQL coloque os valores dos argumentos OUT em variáveis:
CALL `Get_Next_Processing_Video`(@IDVideo, @YoutubeIDVideo);
Observe que essas variáveis não são parâmetros de comando; elas são variáveis que são mantidas na sessão do MySQL. Para obter os valores dessas variáveis, imediatamente após a chamada do procedimento, usando a mesma conexão MySQL:
SELECT @IDVideo, @YoutubeIDVideo ;
E processe o conjunto de resultados dessa consulta como você gostaria que qualquer outra instrução SELECT que esperasse retornar uma linha.
Atualização:
Com versões mais recentes do MySQL Connector que suportam parâmetros OUT, acho que você precisa especificar que esses parâmetros são parâmetros OUT definindo um atributo de membro:
cmd.Parameters["out_IDVideo"].Direction = ParameterDirection.Output;
cmd.Parameters["out_YoutubeIDVideo"].Direction = ParameterDirection.Output;
Como indiquei anteriormente...
Em versões mais antigas do MySQL Connector que não suportavam parâmetros OUT, a solução era chamar o procedimento usando variáveis MySQL como argumentos. Os valores retornados da chamada de procedimento são retidos na sessão do MySQL. Imediatamente após chamar o procedimento, executaríamos um SELECT para recuperar o conteúdo das variáveis do usuário.