katomaro / katomart-be-local

source para o be do Software Integrador (local)
0 stars 0 forks source link

O curso não Baixa #17

Open portalsaj opened 4 months ago

portalsaj commented 4 months ago

Katomart

Assim que coloco para baixar, cria as pastas porem chega nesse erro e para.

katomaro commented 4 months ago

To investigando isso, mas é por ser uma playlist V4, se você acha que consegue ajudar de alguma forma, agradeço (to tentando pegar um vídeo que tenha a playlist v4 para eu mesmo ver pessoalmente)

portalsaj commented 4 months ago

Como posso ajudar ?

cassiomurilo commented 4 months ago

Mesmo problema aqui, parece que baixou 1 aula por modulo e parou. O terminal mostra "GET /api/courses_progress HTTP/1.1" 200 "GET /api/logs?perPage=15&page=1 HTTP/1.1"

portalsaj commented 4 months ago

Depois da correcao do V4 comecou a baixar, porem em +- 40 a 50% do curso baixado ele informa que o arquivo é sensível e da erro de gateway tentativa 1 de 5. segue a imagem ... erro

a-nunes commented 2 months ago

@katomaro estou tendo o mesmo problema, tenho um pouco de conhecimento de HTTP, mas pouca experiência com o Python. Não consegui encontrar nada no código que indicasse o problema, principalmente porque os primeiros vídeos baixaram sem problemas, e em um determinado momento da playlist esse erro de gateway time-out passa a acontecer.

Alguns testes que eu fiz: 1) Interrompi os downloads, fechei o servidor por mais de 24h e tentei reiniciar os downloads a partir do momento em que parou: continua dando gateway time-out 2) Interrompi os downloads, reiniciei o servidor e reiniciei os downloads a partir do início da playlist: Os primeiros vídeos baixaram normalmente, sem o erro de gateway time-out

Não consegui entender direito o motivo, mas na função "download_with_retries" temos o uso das ephemereal_session. Poderia ser algo por aí?

Edit: O arquivo TS é criado na pasta e, após diversos erros, ele ainda é convertido no final. Segue o exemplo do LOG:

19/06/2024, 20:23:57 | Baixando 1 mídias, atual: XXX
19/06/2024, 20:23:58 | Playlist de vídeo com versão 4, pode gerar vídeos corrompidos!
19/06/2024, 20:25:25 | Erro ao baixar o arquivo, tentativa 1 de 5. Erro: 504 Server Error: Gateway Time-out for url: https://vod-akm.play.hotmart.com/video/XXX/hls/XXX-1650848872000-audio=129024-video=**3920000-35.ts**
19/06/2024, 20:32:24 | Erro ao baixar o arquivo https://vod-akm.play.hotmart.com/video/XXX/hls/XXX-1650848872000-audio=129024-video=**3920000-35.ts**
19/06/2024, 20:32:55 | Erro ao baixar o arquivo, tentativa 1 de 5. Erro: 504 Server Error: Gateway Time-out for url: https://vod-akm.play.hotmart.com/video/XXX/hls/XXX-1650848872000-audio=129024-video=**3920000-36**.ts
.
.
.
19/06/2024, 21:48:57 | Erro ao baixar o arquivo https://vod-akm.play.hotmart.com/video/XXX/hls/XXX-1650848872000-audio=129024-video=**3920000-53**.ts
19/06/2024, 21:49:00 | Convertendo C:\Users\XXX\katomart\Cursos\YYY\1. Aula.ts para C:\Users\XXX\katomart\Cursos\YYY\1. Aula.mp4
19/06/2024, 21:49:04 | Download de 1. Aula.ts concluído! ^-^

Depois de quase 1h30 ele termina o download. Não sei o que pode estar acontecendo no meio do caminho das chamadas para o servidor, mas pelo que entendi ele começa a dar erro no trecho 3920000-35.ts do vídeo e segue assim até o 3920000-53.ts

katomaro commented 2 months ago

@a-nunes

Não consegui entender direito o motivo, mas na função "download_with_retries" temos o uso das ephemereal_session. Poderia ser algo por aí?

Sim. A hotmart tá na revisão 603, e muitas rotas deles, só deus sabe. O uso dessa sessão efêmera é por causa da forma que a biblioteca requests lida com sessões e consequentemente como a Hotmart trata requisições (não apenas eles, mas eles são extremamente culpados disso, só ver como eles estruturam as requisições para os 'clubs' (vulgo, área do material)), se a resposta de alguma requisição define um cookie explicitamente para a requisição seguinte e depois no aplicativo normal ele seria deletado, a requests configura tal cookie/header no objeto da sessão, o que faz explodir http 400, 401, 403, e isso pode acontecer em MUITO ponto. eu mantenho downloader para eles tem algum tempo, e em alguma atualização do player deles eu tive que implementar essa forma de duplicar a sessão para deixar ela tentar a requisição e estava indo. Confesso que nesse ponto, eu não sei o que pode estar acontecendo, esses problemas dificilmente acontecem comigo (por algum motivo divino, minha conta deve ter uma flag para deixar passar os triggers deles xD). Outro ponto notório dessa sessão efêmera é que um anexo pode estar com autenticação da AWS, aí se você tentar mandar uma requisição com coisa agregada, a AWS nega, então precisa ser uma sessão basicamente limpa, por outro lado, se o arquivo é pré-processado pelo servidor da Hotmart a sessão pega normal.

Quanto à conversão, ele vai converter sempre por ser o fluxo de chamada mesmo, o seu problema tá aparecendo nos segmentos 35 ao 53, seria de grande valia se você colocar um dump da playst (a biblioteca m3u8 tem método .dumps), e se você também capturasse o estado da sessão da requests quando o erro ocorre e tentasse realizar ela para essas URLs (precisa formatar), e ver se consegue entender algo, é o que eu inevitavelmente vou fazer quando me acontecer, mas no momento eu to reescrevendo o aplicativo inteiro (em outro repositório, depois eu vou atualizar para cá a "build", vou manter o front-end primário como closed-source; https://github.com/Katomart/backend_local).

Pode também tentar acessar o vídeo pelo navegador e acompanhar as requisições pela devtools (recomendo o firefox developer por causa do acesso às xhr no console), e novamente, tentar replicar por outro cliente.
Quanto à clientes para replicação de requisições, eu geralmente uso o Insomnia por o considerar bem superior ao Postman (https://insomnia.rest/download).

P.S.

19/06/2024, 20:23:58 | Playlist de vídeo com versão 4, pode gerar vídeos corrompidos!

Eu nunca peguei uma playlist v4 e a implementação é experimental, acho que isso tá citado em alguma commit perdida no histórico desse repo, foi com indicação de outra pessoa relatando erro de formatação de link, pode ser algum rotacionamento de chave ou as vezes a ausência de ativação de algum tracker deles pois playlist v4 permite que o encoder segmente o vídeo conforme necessário ao invés de precisar segmentar tudo, então penso que pode ser sim que como o katomart não ativa os trackers deles, as vezes o arquivo não existe ali...? Não sei dizer como o interno deles funciona, não experimentei o suficiente.