Android потоковое видео из объекта HttpResponse - PullRequest
4 голосов
/ 21 июня 2011

Я хочу воспроизвести видео с объекта HttpResponse. Контент загружается с сервера потоковой передачи.

Мое требование - создать HTTP-запрос POST к серверу. Запрос содержит URL видео, имя пользователя и пароль пользователя для аутентификации.

Я хочу знать, как мы можем создать HTTP-запрос POST и воспроизвести / загрузить видео.

Пожалуйста, предоставьте некоторые советы, шаги / код для продолжения.

Спасибо

Ответы [ 4 ]

5 голосов
/ 29 июня 2011

Я не уверен на 100%, но я думаю, что вы не можете транслировать большую часть видео из-за того, как формат хранит метаданные видео.Вот почему вы должны конвертировать ваши видео файлы, а не просто показывать их в любом формате.Существуют протоколы, которые инкапсулируют эти метаданные и позволяют транслировать любое видео (это то, что делает YouTube для мобильных устройств).Вы должны взглянуть на RTSP: http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol

Если вы используете ссылку rtsp в videoView, она должна воспроизводить видео без нареканий.Дело в том, что ваша проблема связана с сервером, а не с клиентом.

В качестве упражнения вы можете получить ссылку rtsp с m.youtube.com и просто перейти к videoView с помощью setVideoPath, и оно должно работать.

Если вы не можете изменить реализацию сервера, то вы, вероятно, они, я думаю, ваши решения:

1) Загрузите и расшифруйте видео самостоятельно, вам придется обработать все метаданные и убедиться, что видео делаетработать хоть.Вы можете, теоретически, скомпилировать ffmpeg для Android, чтобы помочь вам в этом, но я не смог скомпилировать его для Android с включенной опцией сети.Это большая работа.

2) Напишите свою собственную реализацию RTSP или другого потокового протокола.Загрузите видео в поток и создайте на нем локальный сервер для потоковой передачи этого видеофайла в экземпляр videoView.У меня фактически это работает над приложением.Android не поддерживает определенный протокол, который используют серверы клиента, и мне пришлось заставить его работать.Мне потребовался целый месяц, чтобы сделать это.Я не могу опубликовать пример кода, потому что это все клиентские, но я мог бы дать вам дополнительную информацию об этом, если вы заинтересованы.

В любом случае, если вы не можете изменить сервер / форматвидео, то вы должны подготовиться к большой работе.

4 голосов
/ 27 июня 2011

проверьте приведенный ниже код для отображения URL http или rtsp в режиме просмотра видео.

Теперь, прежде чем вызывать ваш videoview .. просто получите

public class VideoViewDemo extends Activity {

    /**
     * TODO: Set the path variable to a streaming video URL or a local media
     * file path.
     */
    private String path = "";
    private VideoView mVideoView;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.videoview);
        mVideoView = (VideoView) findViewById(R.id.surface_view);

        if (path == "") {
            // Tell the user to provide a media file URL/path.
            Toast.makeText(
                    VideoViewDemo.this,
                    "Please edit VideoViewDemo Activity, and set path"
                            + " variable to your media file URL/path",
                    Toast.LENGTH_LONG).show();

        } else {

            /*
             * Alternatively,for streaming media you can use
             * mVideoView.setVideoURI(Uri.parse(URLstring));
             */
            mVideoView.setVideoPath(path);
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.requestFocus();

        }
    }
}

Теперь, поскольку ваши требования отличаются, сначала отправьте http-запрос на ваш сервер ... получите желаемый поток ввода ... напишитеПоток как MP4 в вашей локальной файловой системе.тогда вы можете использовать код ниже для воспроизведения контента

// this can be path on file system
 String path="/adf.mp4"  ; 
    public void playVideo() { 

        MediaController mediaController = new MediaController(this);
        mediaController.setMediaPlayer(videoView);
        videoView.setVideoPath(path);   
        videoView.setMediaController(mediaController);
        videoView.requestFocus();
        videoView.start();
        mediaController.show();
2 голосов
/ 11 апреля 2012

Я попробовал это, и это сработало для меня: D нет rtsp нет ничего, просто URL с видео mp4, и он воспроизводится!

public class VideoActivity extends Activity {
    public static final String KEY = "video_id";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fotogaleria_video);
    Intent i = getIntent();
    if(i.hasExtra(KEY)){
        String url = "https://sites.google.com/site/tempmp4download/bnm.mp4";
        VideoView vv = (VideoView)findViewById(R.id.fotogaleria_video);
        // vv.setVideoPath(url);
        vv.setVideoURI(Uri.parse(url));
        vv.setMediaController(new MediaController(this));
        vv.requestFocus();
        vv.start();

        }

    }
}
1 голос
/ 21 июня 2011

Просмотрите следующие ссылки

http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

http://w3mentor.com/learn/java/android-development/android-http-services/performa-a-http-post-request-with-the-httpclient-in-android/

Для потоковой передачи, я думаю, вам нужно скачать полный файл, а затем показать его в видеоплеере.

...