Как использовать FileScriptor в MediaMuxerAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как использовать FileScriptor в MediaMuxer

Сообщение Anonymous »

Я хочу сохранить мои данные MediaMuxer в памяти. Любой может помочь мне, какая фактическая процедура для этого. Я использовал решение из
Создать в памяти FileScriptor < /p>
Вот мой код < /p>
public void onStartButtonClick(View view) throws IOException {
int FRAME_RATE = 30;
int IFRAME_INTERVAL = 5;

try {

String name = context
.getFileStreamPath("socket-" + UUID.randomUUID())
.getAbsolutePath();
LocalSocketAddress address = new LocalSocketAddress(name, LocalSocketAddress.Namespace.FILESYSTEM);

// Bind a server to the socket.
LocalSocket server = new LocalSocket(LocalSocket.SOCKET_STREAM);
server.bind(address);
LocalServerSocket serverWrapper;
try {
serverWrapper = new LocalServerSocket(server.getFileDescriptor());
} catch (IOException e) {
throw new RuntimeException(e);
}

// Connect a client to the socket.
LocalSocket client = new LocalSocket(LocalSocket.SOCKET_STREAM);
client.connect(address);

// Start a thread to read from the server socket.
Thread x = new Thread(new Runnable() {
@Override
public void run() {
LocalSocket socket;
try {
socket = serverWrapper.accept();
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
InputStream input = socket.getInputStream();
byte[] buffer = new byte[100000];
input.read(buffer);
input.close();
Log.d("MainActivity", " data" + new String(buffer));

} catch (IOException e) {
throw new RuntimeException(e);
}

}
});
x.start();

FileDescriptor fd = client.getFileDescriptor();

String text = "MemoryFile Text";

MediaMuxer mediaMuxer = new MediaMuxer(fd, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

MediaFormat mediaFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 640, 480);

// Configure media format
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 2000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);

// Create the encoder and input surface
MediaCodec mediaCodec = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Surface inputSurface = mediaCodec.createInputSurface();
mediaCodec.start();

// Render text frames onto the input surface
Canvas canvas = inputSurface.lockCanvas(null);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(40);
canvas.drawColor(Color.BLACK);
canvas.drawText(text, 100, 240, paint);
inputSurface.unlockCanvasAndPost(canvas);

// Encode and mux frames
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
boolean muxing = true;

while (muxing) {
int encoderStatus = mediaCodec.dequeueOutputBuffer(bufferInfo, -1);
if (encoderStatus >= 0) {
ByteBuffer encodedData = outputBuffers[encoderStatus];

if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
bufferInfo.size = 0;
}

if (bufferInfo.size != 0) {
encodedData.position(bufferInfo.offset);
encodedData.limit(bufferInfo.offset + bufferInfo.size);
mediaMuxer.writeSampleData(0, encodedData, bufferInfo);
}

mediaCodec.releaseOutputBuffer(encoderStatus, false);

if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {
break;
}
} else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Configure the media format for the muxer
MediaFormat outputFormat = mediaCodec.getOutputFormat();
mediaMuxer.addTrack(outputFormat);
mediaMuxer.start();
}
}

mediaMuxer.stop();
mediaMuxer.release();
mediaCodec.stop();
mediaCodec.release();
serverWrapper.close();
server.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
Log.e("MainActivity", e.toString());

}

}


Подробнее здесь: https://stackoverflow.com/questions/769 ... mediamuxer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»