80,350
社区成员
发帖
与我相关
我的任务
分享
public void onPreviewFrame(byte[] arg0, Camera arg1)
{
// TODO Auto-generated method stub
if (!active)
return;
if (!init)
{
blockWidth = 32;
blockHeight = 32;
timeBetweenFrames = 100; // 1000 / frameRate
frameCounter = 0;
previous = null;
init = true;
}
final long ctime = System.currentTimeMillis();
byte[] current = RemoteUtil.decodeYUV420SP2RGB(arg0, width, height);
try
{
final byte[] packet = RemoteUtil.encode(current, previous,
blockWidth, blockHeight, width, height);
fireOnVideoData(new MediaDataByteArray(timeBetweenFrames,
new ByteArray(packet)));
previous = current;
if (++frameCounter % 10 == 0)
previous = null;
} catch (Exception e)
{
e.printStackTrace();
}
final int spent = (int) (System.currentTimeMillis() - ctime);
try
{
Log.i(TAG, "锟竭程等达拷" + Math.max(0, timeBetweenFrames - spent)
+ " s");
Thread.sleep(Math.max(0, timeBetweenFrames - spent));
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 接收线程
Thread local_receive = new Thread()
{
public void run()
{
running = true;
try
{
is = mReceiveSocket.getInputStream();
byte buffer[] = new byte[4];
// Skip all atoms preceding mdat atom
while (true)
{
while (is.read() != 'm')
;
is.read(buffer, 0, 3);
if (buffer[0] == 'd' && buffer[1] == 'a'
&& buffer[2] == 't')
break;
}
byte[] current = new byte[10 * 1024];
while (running)
{
try
{
is.read(current);
fireOnVideoData(new MediaDataByteArray(
timeBetweenFrames, new ByteArray(current)));
} catch (Exception e)
{
e.printStackTrace();
}
}
} catch (IOException e)
{
Log.e(TAG, "Couldn't skip mp4 header :/");
return;
}
}
};