Потоковое видео в Android по parcelFileDescriptor - PullRequest
5 голосов
/ 02 декабря 2011

Мне удалось записать видео через Mediarecorder на SD-карту, но я хочу отправить это видео на сервер без записи на SD-карту.Я искал его и обнаружил, что parcelFileDescriptor - это способ отправки видео в сокет TCP, но я не знаю, как его получить на стороне сервера, пожалуйста, объясните это.Вот мой код на стороне клиента

socket = new Socket("hostname", portnumber);
ParcelFileDescriptor  pfd =ParcelFileDescriptor.fromSocket(socket);
            recorder = new MediaRecorder();
            recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setOutputFile(pfd.getFileDescriptor());
            recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
            mPreview = new Preview(VideoRecorder.this,recorder);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setContentView(mPreview);

Я хочу получить его на стороне сервера и воспроизвести для создания видеопередачи в реальном времени.

зная, что "MediaRecorder записывает либо в формате 3GPP, либо в формате MP4. Этот формат файла состоит из атомов, где каждый атом начинается с его размера. В файле есть разные виды атомов, атомы mdat хранят фактическиенеобработанные кадры закодированного видео и аудио. В версии Cupcake Android начинает записывать атом mdat с закодированными кадрами, но по очевидным причинам он должен оставить размер атома пустым. При записи в дескриптор искомого файла он можетпросто заполните пропуски после записи, но, конечно, дескрипторы файлов сокетов не подлежат поиску. Поэтому полученный поток должен быть исправлен после завершения записи, или необработанные видео / аудио кадры должны быть обработаны сервером ".

Я хочу код стороны сервера (может быть, на телефоне или Android).если есть другой способ, пожалуйста, помогите мне ......

Спасибо

1 Ответ

2 голосов
/ 02 декабря 2014

Для потоковой передачи с Android или ПК необходимо реализовать протокол, по которому поток передается на сервер.Есть несколько таких, как HSL, RTPS и т. Д. (Подробнее http://en.wikipedia.org/wiki/Streaming_media). Это не тривиальная проблема, и очень мало успешных потоковых сервисов с Android.

Вы можете проверить, как реализовать исервис Steaming на Android здесь: https://github.com/fyhertz/libstreaming

Библиотека не работает для Android 5, но работает для 4.4.x

...