获取I帧并存储且转换为jpg图片
kj.sh
root@u12d32:/opt/qy_test/avserver# cat kj.sh
#!/usr/local/env sh
gcc -o i_frame_to_jpg i_frame_to_jpg.c
./i_frame_to_jpg $1
ls
i_frame_to_jpg.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0;
char cmd[128] = {0};
if(argc != 2)
{
printf("%s %d The param must be two ,please !\n",__FUNCTION__,__LINE__);
return -1;
}
for(i = 0; i <= atoi(argv[1]);i++)
{
memset(cmd,0,128);
sprintf(cmd,"ffmpeg -i joseph_%dth_i_frame -y -ss 00:00:00 -vframes 1 joseph_%dth_jclient.jpg >/dev/null",i,i);
printf("%s %d The sys has tranform %dth i_frame to %dth jclient jpg !\n",__FUNCTION__,__LINE__,i,i);
system(cmd);
}
return 0;
}
get_i_frame_save_to_file
save_to_file_function
void ipnc_i_frame_save(char *i_buf_addr, int i_buf_size,int transfer_time_in)
{
FILE *fp_video;
char i_frame_name[32] = {0};
memset(i_frame_name,0,32);
sprintf(i_frame_name,"joseph_%dth_i_frame",transfer_time_in);
printf("%s %d %s \n",__FUNCTION__,__LINE__,i_frame_name);
fp_video = fopen(i_frame_name, "wb");
#if 1
fwrite(i_buf_addr,i_buf_size,1,fp_video);
fflush(fp_video);
fclose(fp_video);
#endif
}
get_i_frame_from_enc
int sub_stream_i_frame_size = 0;
int sub_stream_i_frame_times = 0;
int sub_stream_i_frame_buf_size = 0;
int sub_stream_i_frame_position = 0;
char *sub_stream_i_frame_buf = NULL;
if((i == 1) && (stStream.u32PackCount == 4))
{
sub_stream_i_frame_times++;
sub_stream_i_frame_position = 0;
sub_stream_i_frame_buf_size = 0;
for (iv_temp = 0; iv_temp < stStream.u32PackCount; iv_temp++)
sub_stream_i_frame_buf_size+=stStream.pstPack[iv_temp].u32Len[0];
sub_stream_i_frame_buf = (char *)malloc(sub_stream_i_frame_buf_size);
memset(sub_stream_i_frame_buf,0,sub_stream_i_frame_buf_size);
for (iv_temp = 0; iv_temp< stStream.u32PackCount; iv_temp++)
{
memcpy(sub_stream_i_frame_buf+sub_stream_i_frame_position,stStream.pstPack[iv_temp].pu8Addr[0],stStream.pstPack[iv_temp].u32Len[0]);
sub_stream_i_frame_position += stStream.pstPack[iv_temp].u32Len[0];
}
ipnc_i_frame_save(sub_stream_i_frame_buf, sub_stream_i_frame_buf_size, sub_stream_i_frame_times);
}