ffmpeg在android平台录制视频编码时间戳问题
弛简 2015-08-12 02:18:49 在android平台下使用ffmpeg库进行摄像头采集视频录制编码,对每一帧,时间戳怎么设置?
JNIEXPORT jint JNICALL Java_com_hua_cameraandroidtest_MainActivity_videostart(JNIEnv * env, jclass obj,jbyteArray yuvdata)
{
int frameFinished=0,size=0;
jbyte *ydata = (jbyte*)(*env)->GetByteArrayElements(env, yuvdata, 0);
av_init_packet(&avpkt);
avpkt.data = NULL; // packet data will be allocated by the encoder
avpkt.size = 0;
uint8_t* picture_buf;
int size1 = avpicture_get_size(pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);
picture_buf = (uint8_t*)av_malloc(y_size);
if (!picture_buf)
{
av_free(yuv420pframe);
}
avpicture_fill((AVPicture*)yuv420pframe, picture_buf, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);
yuv420pframe->pts = count;
yuv420pframe->data[0] = ydata; //PCM Data
yuv420pframe->data[1] = ydata+ y_size; // U
yuv420pframe->data[2] = ydata+ y_size*5/4; // V
size = avcodec_encode_video2(pCodecCtx, &avpkt, yuv420pframe, &frameFinished);
count++;
if (size < 0) {
LOGE("+++++Error encoding frame\n");
return -1;
}
if(frameFinished)
fwrite(avpkt.data,1,avpkt.size,video_file);
LOGE("JNICALL Java_com_hua_cameraandroidtest_MainActivity_videostart9");
av_free_packet(&avpkt);
(*env)->ReleaseByteArrayElements(env, yuvdata, ydata, 0);
}
这个是对每一帧编码函数,就是不知道怎么设置时间戳,倒是录制完成之后,播放没有时间显示。