Я хотел бы получить точно такой же результат, как этот вызов командной строки ffmpeg из кода:
ffmpeg -i CAMERARTSPLINK -c:v copy -an -movflags +frag_keyframe+empty_moov -f mp4
Когда я запускаю указанную выше команду, она дает такой двоичный результат:
got 36 bytes: 0, 0, 0, 36, 102, 116, 121, 112, ..., 111, 54, 109, 112, 52, 49,
got 512 bytes: 0, 0, 3, 76, 109, 111, 111, 118, 0, 0, 0, ..., 132, 0, 0, 3, 0, 4, 0, 0, 3, 0, 202,
Код может использовать библиотеки ffmpeg и включает в себя, но я не хочу использовать ffmpeg в качестве вызова программы (т.е. функции exe c* не предпочтительны).
Я создал небольшой демонстрационный код пример с avformat
для RTSP H264 до MP4 remux. В коде многократно используется библиотека videostreamer , созданная Хоргом.
Я отправил образец кода на pastebin.com (400 lo c). Он успешно строится, но вам нужно связать его с avformat
, avdevice
, avcodec
и avutil
.
Я пытался сделать все возможное, чтобы достичь того же результата, однако при запуске этого кода первые несколько байтов после байта № 38 отличаются (может быть, не только те, что я не сравнивал ничего после байта № 548):
writeOutput: writing 36 bytes: 0, 0, 0, 36, 102, 116, 121, 112, ..., 111, 54, 109, 112, 52, 49,
writeOutput: writing 512 bytes: 0, 0, 0, 0, 109, 111, 111, 118, 0, 0, 0, ..., 132, 0, 0, 3, 0, 4, 0, 0, 3, 0, 202,
Вы можете видеть, что во второй строке вывод моего кода начинается с 0
0
0
0
109
,
, тогда как ffmpeg дал 0
0
3
76
109
.
Все остальные данные (даже здесь не вставлены байты) полностью совпадают (по крайней мере, для первых 548 байтов).
Что не так с моим кодом? Эти 2 байта кажутся очень важными для декодирования этого потока.