2017-03-28 105 views
5

我有两个MPEG-TS + H.264视频文件,这是我尝试与ExoPlayer Android装置(三星标签甲10.1" )上读取:MPEG-TS H.264与ExoPlayer

SimpleExoPlayerView view = new SimpleExoPlayerView(this); 
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(new DefaultBandwidthMeter()); 
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); 
SimpleExoPlayer mediaPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, new DefaultLoadControl()); 
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, getString(R.string.app_name))); 
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); 
MediaSource source = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null); 
view.setPlayer(mediaPlayer); 
mediaPlayer.setPlayWhenReady(true); 
mediaPlayer.prepare(source); 

第一个成功(图像正确显示),但第二个失败(没有图像显示),虽然它们在视频特性方面都非常相似,但我想了解其原因。视频编码细节

第一个视频(成功FUL):

General 
ID          : 0 (0x0) 
Complete name       : 1080i.ts 
Format         : MPEG-TS 
File size        : 56.7 MiB 
Duration         : 47s 456ms 
Overall bit rate mode     : Constant 
Overall bit rate       : 10.0 Mbps 

Video 
ID          : 256 (0x100) 
Menu ID         : 1 (0x1) 
Format         : AVC 
Format/Info        : Advanced Video Codec 
Format profile       : [email protected] 
Format settings, CABAC     : Yes 
Format settings, ReFrames    : 2 frames 
Codec ID         : 27 
Duration         : 47s 282ms 
Bit rate         : 9 185 Kbps 
Width         : 1 920 pixels 
Height         : 1 080 pixels 
Display aspect ratio      : 16:9 
Frame rate        : 29.970 fps 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Scan type        : MBAFF 
Bits/(Pixel*Frame)      : 0.148 
Stream size        : 51.8 MiB (91%) 

第二部影片(失败):

General 
ID          : 1 (0x1) 
Complete name       : fr5.ts 
Format         : MPEG-TS 
File size        : 13.8 MiB 
Duration         : 32s 270ms 
Overall bit rate mode     : Variable 
Overall bit rate       : 3 557 Kbps 

Video 
ID          : 420 (0x1A4) 
Menu ID         : 1045 (0x415) 
Format         : AVC 
Format/Info        : Advanced Video Codec 
Format profile       : [email protected] 
Format settings, CABAC     : Yes 
Format settings, ReFrames    : 4 frames 
Codec ID         : 27 
Duration         : 31s 760ms 
Bit rate         : 3 252 Kbps 
Width         : 1 920 pixels 
Height         : 1 080 pixels 
Display aspect ratio      : 16:9 
Frame rate        : 25.000 fps 
Standard         : Component 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Scan type        : MBAFF 
Bits/(Pixel*Frame)      : 0.063 
Stream size        : 12.3 MiB (89%) 
Color primaries       : BT.709 
Transfer characteristics     : BT.709 
Matrix coefficients      : BT.709 
+0

2个流之间的唯一区别是支持的参考帧的数量。这不太可能是一个问题,因为玩家将拥有一个通用的解码器,但仍然可以通过仅使用2个参考帧尝试其他序列来进行检查? – prashanthns

回答

1

脱颖而出两个文件之间的差异的比特率。工作的比特率高得多,并且是恒定的,而破碎的比特率具有相同的高分辨率,但是具有更低的可变比特率。如果不知道提供的统计数字,我会责怪用于编码视频的工具。也许关于配置的东西会导致编码器输出黑色帧。你是否在不同的设备上尝试过相同的文件?你可以用稍微不同的设置重新编码吗?

+0

我试过几种不同的设备,总是得到相同的结果。第一个文件是我在网上找到的示例文件。第二个来自iptv流(我不能配置任何东西),我的最终目标是能够读取第二个流。 – fiddler

+0

您是否在日志中看到任何错误,表明这是哪种错误?如果您正在播放不属于您的视频流,则可能受DRM保护。 – Jschools