Здравствуй, достопочтенный All! Я сейчас, наверное, опять идиотские вопросы буду задавать... :( Есть очень простая задачка. Надо взять файл и завещать его в мультикаст (udp) с помощью ffmpeg. Только формат на MPEG2TS сменить. Казалось бы, чего проще?
ffmpeg -re -i file.mp4 -codec copy -f mpegts udp://234.2.2.70:1234
Но не тут-то было. Когда пытаюсь этот мультикаст просмотреть, вижу свинское месиво пикселей или причудливых вертикальных полос. При этом ни в какие ресурсы не упираемся, операция ведь пустяковая, проц почти не задействован. Смотрел как сдампленный multicat'ом кусок, так и сам мультикаст, проброшенный через udpxy. И multicat, и udpxy запускались на той же самой машине, т.е. мультикасту вроде некуда теряться... Но VLC-плеер при просмотре гадит в логи вот таким:
...
ts debug: skipping 32 bytes of garbage
ts warning: discontinuity received 0xf instead of 0xd (pid=256)
ts warning: lost synchro
ts debug: skipping 32 bytes of garbage
ts warning: discontinuity received 0x7 instead of 0x5 (pid=256)
ts error: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 4) for PID 0
ts debug: PATCallBack called
ts error: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 4) for PID 4096
ts debug: PMTCallBack called
ts warning: lost synchro
ts debug: skipping 32 bytes of garbage
ts warning: discontinuity received 0xd instead of 0xb (pid=256)
...
...
[h264 @ 037eabc0] Reference 3 >= 3
[h264 @ 037eabc0] error while decoding MB 8 1, bytestream 28465
[h264 @ 03155ac0] top block unavailable for requested intra4x4 mode -1 at 21 0
[h264 @ 03155ac0] error while decoding MB 21 0, bytestream 28715
[h264 @ 037ea7c0] Reference 2 >= 2
[h264 @ 037ea7c0] error while decoding MB 58 1, bytestream 21391
[h264 @ 037eabc0] top block unavailable for requested intra4x4 mode -1 at 18 0
[h264 @ 037eabc0] error while decoding MB 18 0, bytestream 133199
[h264 @ 03155ac0] top block unavailable for requested intra mode at 42 0
[h264 @ 03155ac0] error while decoding MB 42 0, bytestream 97706
[h264 @ 037ea7c0] Reference 3 >= 2
...
При этом если сконвертировать файл в MPEGTS
ffmpeg -re -i file.mp4 -codec copy -f mpegts file.ts
Вот исходный файл:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file1.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2014-10-24T15:28:57.000000Z
Duration: 00:03:15.05, start: 0.000000, bitrate: 19783 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 19469 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2014-10-24T15:28:57.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2014-10-24T15:28:57.000000Z
handler_name : Alias Data Handler
Вроде никакого криминала нет... Где же могут быть грабли? Я могу, конечно, явным образом задать нужные параметры кодирования и, наверное, это улучшит ситуацию. Но мне хочется понять, почему не получается простая перепаковка.