Mira, en si, segmentar un archivo para enviar chunks de data (archivo complete) es simple, pq siempre que envies todos los bytes, va a ser valido, el tema es si queres segmentarlo a fin de enviar un pedazo de data "legible" o sea, si por ejemplo, queres regenerar una seccion de video "valida", lo cual ya seria muchisimo mas complicado (necesitas un encoder-decoder para generar una estructura de archivo valida).
Aca tenes un ejemplo de streaming de webcam en tiempo real entre 2 clientes usando rtmfp. Para ver tema de streaming hay bastantes recursos en Google.
Volviendo a tu tema, transmitir un pedazo especifico de video, creo que no te va a resultar sino tenes un encoder, porque si o si tenes que enviar un fragmento valido (que contenga los metadatos validos).
Creo que hay alguna solucion online para trabajar con FLVs, pero la veo verde con otros formatos como mp4, or mkv, aunque quizas podrias hacer a la inversa, y reencodear el video en tiempo real con la libreria mmpeg y NativeProcess,
aca tenes un punto de partida interesante.
Por lo visto estas usando sockets, no P2P. Igualmente es valido, primero proba que el archivo se escriba bien localmente.
Esto me escribe 1Mb de datas del mp4, lo cual parece valido (no se si lo es), para VLC... que me da 2 segs de reproduccion.
Código ActionScript :
var videoFile:File = File.desktopDirectory.resolvePath('storm.mp4');
var ba:ByteArray = new ByteArray();
var fs:FileStream = new FileStream();
fs.open(videoFile, FileMode.READ);
fs.readBytes(ba, 0, 1000 * 1000 ); // 1mb de data. (son 2 segundos en mi video de prueba)
fs.close();
var outputFile:File = File.desktopDirectory.resolvePath('output.mp4');
fs.open(outputFile, FileMode.WRITE);
fs.writeBytes(ba);
fs.close();
outputFile.openWithDefaultApplication();
// con respecto a tu codigo :
// aca hubieses tenido un error si tratabas leer desde una posición inexistente.
if(video_stream.bytesAvailable >= 26000+8000 ) {
bytes_t.clear();
video_stream.readBytes(bytes_t,26000,8000);
clientSocket.writeBytes(bytes_t,26000); // tenes que aplicar el offset aca?
clientSocket.flush();
}
Comentario aparte, yo use esta forma de "descarga" parcial, en una app de ipad, donde tenia que descargar un video de 500mb , y obviamente, un FileStream o URLStream abierto descargando data constantemente, dejaba sin memoria al dispositivo y lo hacia crashear, por eso, copiar de a pedazos de datos y liberando la memoria de Flash, es lo más practico que podes hacer.
Contanos si tuviste algun progreso.