Вы можете создать сокет, взять его «дескриптор файла» и передать его MediaPlayer.setDataSource()
.
Я действительно сделал что-то похожее с этим некоторое время назад, так что этот подход проверен в полевых условиях.
Я забыл, как именно извлечь файловый дескриптор из сокета, но я думаю, что используя отражение - или, более вероятно, собственный код - вы можете получить элемент 'impl
' в сокете, который является LocalSocket или чем-то еще, и имеет члена fd
. Googling не нашел никого, кто бы описывал это, так что вам придется самостоятельно изучать точные имена членов и детали.
Формат контейнера должен быть чем-то, что распознается системой Android; при необходимости вы можете использовать собственный код для создания pipe , чтобы вы могли упаковать свой пользовательский контейнер во что-то, что Android поддерживает на лету, используя поток.
Мне приходит в голову, что есть хороший шанс, что Android играет «сырой» H.263 и H.264BP или что-то еще, но я не проверял это. AVI, очевидно, не идеален для потоковой передачи - вам, возможно, придется разделить видео на короткие куски AVI и продолжать менять эти блоки - или вы можете исследовать, поддерживается ли FLV или Matroska , но будьте осторожны - Точное сочетание поддерживаемых форматов контейнеров может отличаться в зависимости от устройства или от выпуска к выпуску.