视频传输的主要代码分析
实现视频数据采集功能的主要代码如下:
mCamera = Camera.open(); //获取设备的Camera
Camera.Parameters p = mCamera.getParameters();//获取摄像头参数
p.setPreviewSize(352, 288); //设置预览窗口大小
mCamera.setPreviewCallback(new H264Encoder(352, 288));//装载回调函数引用从摄像头取来的每一帧数据mCamera.setParameters(p); //设置摄像头服务//调用onPreviewFrame接口获取摄像头的每一帧数据public void onPreviewFrame(byte[] data, Camera camera) {
int result=CompressBuffer(encoder,-1,data,data.length,h264Buff); //CompressBuffer函数将获得的数据压缩成H264格式
if (result>0)
raf.write(h264Buff, 0, result);//raf为RandAccessFile的实例,此处将获取的编码后数据写入到SDCard中
}
//CompressBuffer为JNI调用,其中的主要代码如下
jint Java_h264_com_H264Encoder_CompressBuffer(JNIEnv* env, jobject thiz,jlong handle,jint type,jbyteArray in, jint insize,jbyteAr?
ray out)//JNI中函数CompressBuffer的定义
en->picture->i_type = X264_TYPE_AUTO; //编码memcpy(pTmpOut, en->nal[i].p_payload, en->nal[i].i_payload);//将编码后的数据拷贝输出
接收端监听Socket连接的端口接收数据并使用Android自带的H264解码程序软件解码。
实现视频数据采集功能的主要代码如下:
mCamera = Camera.open(); //获取设备的Camera
Camera.Parameters p = mCamera.getParameters();//获取摄像头参数
p.setPreviewSize(352, 288); //设置预览窗口大小
mCamera.setPreviewCallback(new H264Encoder(352, 288));//装载回调函数引用从摄像头取来的每一帧数据mCamera.setParameters(p); //设置摄像头服务//调用onPreviewFrame接口获取摄像头的每一帧数据public void onPreviewFrame(byte[] data, Camera camera) {
int result=CompressBuffer(encoder,-1,data,data.length,h264Buff); //CompressBuffer函数将获得的数据压缩成H264格式
if (result>0)
raf.write(h264Buff, 0, result);//raf为RandAccessFile的实例,此处将获取的编码后数据写入到SDCard中
}
//CompressBuffer为JNI调用,其中的主要代码如下
jint Java_h264_com_H264Encoder_CompressBuffer(JNIEnv* env, jobject thiz,jlong handle,jint type,jbyteArray in, jint insize,jbyteAr?
ray out)//JNI中函数CompressBuffer的定义
en->picture->i_type = X264_TYPE_AUTO; //编码memcpy(pTmpOut, en->nal[i].p_payload, en->nal[i].i_payload);//将编码后的数据拷贝输出
接收端监听Socket连接的端口接收数据并使用Android自带的H264解码程序软件解码。