Incluo aqui como um amigo meu resolveu o problema de exibição de vídeos em HTML no Nexus One:
Nunca fui capaz de fazer o vídeo rodar embutido. Na verdade, muitas pessoas na internet mencionam explicitamente que a reprodução de vídeo inline em HTML é suportada desde o Honeycomb, e estávamos lutando com Froyo e Gingerbread ... Também para telefones menores, acho que jogar em tela cheia é muito natural - caso contrário, não é muito visível . Então o objetivo era fazer o vídeo abrir em tela cheia. No entanto, as soluções propostas neste tópico não funcionaram para nós - clicar no elemento não acionou nada. Além disso, os controles de vídeo foram mostrados, mas nenhum pôster foi exibido, então a experiência do usuário foi ainda mais estranha. Então o que ele fez foi o seguinte:
Exponha o código nativo ao HTML para ser chamado via javascript:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
O próprio código tinha uma função que chamava atividade nativa para reproduzir o vídeo:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public void startVideo(String videoAddress){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); // The Mime type can actually be determined from the file
activity.startActivity(intent);
}
}
Então, no próprio HTML, ele continuava falhando em fazer a tag de vídeo funcionar na reprodução do vídeo. Assim, finalmente ele decidiu sobrescrever o onclick
evento do vídeo, fazendo com que ele fizesse a reprodução real. Isso quase funcionou para ele - exceto que nenhum pôster foi exibido. Aí vem a parte mais estranha - ele continuava recebendo ERROR/AndroidRuntime(7391): java.lang.RuntimeException: Null or empty value for header "Host"
toda vez que configurava o poster
atributo da tag. Finalmente, ele encontrou o problema, que era muito estranho - descobriu-se que ele havia mantido a source
subtag na video
tag, mas nunca a usou. E estranho o suficiente exatamente isso estava causando o problema. Agora veja sua definição da video
seção:
<video width="320" height="240" controls="controls" poster='poster.gif' onclick="playVideo('file:///sdcard/test.3gp');" >
Your browser does not support the video tag.
</video>
Claro, você também precisa adicionar a definição da função javascript no cabeçalho da página:
<script>
function playVideo(video){
window.JSInterface.startVideo(video);
}
</script>
Sei que esta não é uma solução puramente HTML, mas é o melhor que conseguimos fazer para o tipo de telefone Nexus One. Todos os créditos por esta solução vão para Dimitar Zlatkov Dimitrov.