我创建了一个基于 Xuggle 的服务器系统,将传入文件编码为 H264 并将其分段。但是,在Quicktime中播放视频时,它几乎可以工作(有时音频中会出现一个小打嗝(,但是当从一个质量流更改为另一个质量流时,图像会丢失。
所以我运行了"媒体流验证器"并得到以下错误:
错误: (-1( 未知的视频编解码器: 1836069494 (程序 0,磁道 0( 错误:(-1( 无法将段解析为 MPEG-2 TS 或 ES
所以我使用 FFMPEG 来获取有关法典的一些信息:我的 Xuggler 编码的结果:
Input #0, mpegts, from 'segment_0.ts':
Duration: 00:00:09.40, start: 0.000000, bitrate: 3618 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 960x540 [PAR 1:1 DAR 16:9], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0.1[0x101]: Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
由 Compressor 创建的文件的结果:
Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 25.00 (25/1)
Input #0, mpegts, from 'fileSequence1.ts':
Duration: 00:00:09.97, start: 19.984578, bitrate: 5308 kb/s
Program 1
Stream #0.0[0x101]: Video: h264 (Main), yuv420p, 960x540, 25 tbr, 90k tbn, 180k tbc
Stream #0.1[0x102]: Audio: aac, 22050 Hz, stereo, s16, 32 kb/s
在我看来,主要区别在于,对于 Xuggler 编码文件,它说 Video:mpeg2video 而不是 h264。但是,在编码时,我确实专门将编码器设置为ICodec.ID.CODEC_ID_H264。
如何强制它使用 h264。音频也是如此。我指定了AAC并得到了MP2。
我随后直接使用了FFMPEG,结果是:
Input #0, mpegts, from 'encoded.ts':
Duration: 00:00:24.16, start: 1.400000, bitrate: 360 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0.0[0x100]: Video: h264 (Main), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0.1[0x101](eng): Audio: aac, 48000 Hz, stereo, s16, 57 kb/s
这看起来更好。我可以直接使用 FFMPEG,但通过使用 Xuggler,我可以对文件进行分段,同时更轻松地跟踪过程的进度。
我暂时离开了 Xuggle,并使用 FFMPEG 进行编码和分段,只用它来获取编码信息等。目前需要两个过程(首先编码,然后用FFMPEG分段(,但希望很快FFMPEG将允许在编码时动态分段