Продолжаю вникать вопрос записи MJPEG на флешку без файловой системы С++ vs прямая запись на флешку
Удалось прикрутить fdisk и ffmpeg, имею такую тестовую приблуду
root@NanoPi-NEO-Core:/home/pi# head -c 200 /dev/mmcblk1 | xxd
00000000: fab8 0010 8ed0 bc00 b0b8 0000 8ed8 8ec0 ................
00000010: fbbe 007c bf00 06b9 0002 f3a4 ea21 0600 ...|.........!..
00000020: 00be be07 3804 750b 83c6 1081 fefe 0775 ....8.u........u
00000030: f3eb 16b4 02b0 01bb 007c b280 8a74 018b .........|...t..
00000040: 4c02 cd13 ea00 7c00 00eb fe00 0000 0000 L.....|.........
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000c0: 0000 0000 0000 0000 ........
root@NanoPi-NEO-Core:/home/pi# ./Recoder /dev/mmcblk1 /dev/video0
Device: /dev/mmcblk1 Physical sector size: 512 bytes First unpartitioned space: 29.14 GiB LBA begin: 2048 end: 61120511
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 959002.771778, bitrate: N/A
Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 15 fps, 15 tbr, 1000k tbn
Packet 901l size 57940 bytes Total capture 52918224l bytes
root@NanoPi-NEO-Core:/home/pi# head -c 200 /dev/mmcblk1 | xxd
00000000: ffd8 ffdb 0043 0002 0202 0202 0202 0202 .....C..........
00000010: 0202 0202 0203 0604 0303 0303 0705 0504 ................
00000020: 0609 0709 0908 0708 080a 0b0e 0c0a 0a0d ................
00000030: 0a08 080c 100c 0d0e 0f0f 100f 090b 1112 ................
00000040: 110f 120e 0f0f 0fff db00 4301 0202 0203 ..........C.....
00000050: 0303 0704 0407 0f0a 080a 0f0f 0f0f 0f0f ................
00000060: 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f ................
00000070: 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f ................
00000080: 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f ffc0 0011 ................
00000090: 0801 e002 8003 0121 0002 1101 0311 01ff .......!........
000000a0: c400 1f00 0001 0501 0101 0101 0100 0000 ................
000000b0: 0000 0000 0001 0203 0405 0607 0809 0a0b ................
000000c0: ffc4 00b5 1000 0201 ........
В целом что то пишется, пока не понятно кратно сектору в 512 байт такая кривота пишет или нет?
pf = fopen(dev_disk, "wb");
if (!pf)
{
fprintf(stderr, "Open frame data %s failed\n", dev_disk);
rt = -1;
goto END;
}
unsigned int i = 0, l = 0;
while ((rt = av_read_frame(pFormatCtx, packet)) >= 0)
{
l += packet->size;
fprintf(stdout, "Packet %ul size %d bytes Total capture %ul bytes\r", i, packet->size, l);
fwrite(packet->data, 1, packet->size, pf);
av_packet_unref(packet);
if (i++ > 15*60) break;
}
Вопрос больше в другом - наблюдаю что при avformat_find_stream_info(pFormatCtx, NULL) появляется как я понимаю временная метка start: 959002.771778, как я понимаю штатно в мжпег кадре нет временной метки и она появляется только в заголовке «пакета» из ффмпег? а где бы ее надыбать теперь на сыром диске? т.е. какая структура это «пакета» от ффмпег с мжпег кадром???
т.е. вопрос в том, как продолжить запись и перечитывать временные метки для поиска???