Estou exibindo um vídeo em meu aplicativo usando o AVPlayer. Quero criar um recurso que permita aos usuários fazer uma cópia de vídeo de si mesmos manipulando o vídeo no player e adoraria se não perdesse qualidade.
O motivo desse recurso é permitir que os usuários decidam como desejam que a reprodução ocorra. Pode ser que eles queiram deixá-lo ir, pausar, retroceder, avançar etc. Quero fazer uma cópia em vídeo deles enquanto deslizam o vídeo para frente e para trás.
Obviamente, eu poderia fazer isso com a API de gravação de tela, mas isso significa que a qualidade do vídeo cairia drasticamente. Nem tenho certeza se o que estou procurando é possível.
Se a resolução e a taxa de quadros do material original forem suficientemente inferiores à resolução da tela e à taxa de captura, certamente é possível. Considere o caso limite de um único "pixel" de 100x100 que muda de cor exatamente uma vez por segundo. Certamente seria possível construir algo que capturasse isso com perfeita fidelidade.
Mas, em geral, o material de origem provavelmente tem resolução e taxa de quadros mais altas do que sua amostragem, e você perderá qualidade, qualidade geralmente substancial (como você descobriu). Mesmo que fossem iguais, você perderá alguns devido aos artefatos de renderização. Para fazer isso, a fonte deve ser de qualidade significativamente inferior ao sistema de captura, o que provavelmente não corresponde às suas expectativas.
Se você controlasse o software que estava fazendo a manipulação, poderia gravar a manipulação na tela e, em seguida, reinserir o vídeo em sua qualidade original (ou o mais próximo possível, dada a provável resolução menor do alvo). Como alternativa, você pode pós-processar a captura de tela para inserir o vídeo no aplicativo. (Esta abordagem final é provavelmente impraticável na prática.)