我正在Flutter应用程序中实现视频播放器功能,但我不知道哪种格式在两种系统(IOS和Android)中都可以使用。
我使用video_player 0.10.0 + 2和chewie 0.9.6。
实际上,我们在容器MKV上使用H264,在容器MP4(HEVC)上使用H265,但是在IOS(真实设备)上不起作用,在Android上也可以,但是有一些错误。
一些代码...
// Declaration
VideoPlayerController _playerController;
// Initialization
if (_playerController == null) {
_playerController = VideoPlayerController.network(_myVideoUrl)
..setVolume(0.0)
..setLooping(true)
..initialize();
}
//Play
_playerController.play();
//Stop
if (_playerController != null) {
_playerController.pause();
}
@override
void deactivate() {
super.deactivate();
if (_playerController != null) {
_playerController.pause();
}
}
@override
void dispose() {
super.dispose();
if (_playerController != null) {
_playerController.pause();
}
_playerController = null;
}
在真实设备上的IOS中,视频没有错误消息就无法播放。
在Android中播放视频,但存在以下问题:
1)记录错误:
2019-03-24 15:30:49.468 1739-1817/? E/OMXNodeInstance: getExtensionIndex(0xf411c240:google.h264.decoder, OMX.google.android.index.enableAndroidNativeBuffers) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.468 16136-16335/it.itasoft.moc E/ACodec: [OMX.google.h264.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
2019-03-24 15:30:49.472 1739-1817/? E/OMXNodeInstance: setConfig(0xf411c240:google.h264.decoder, ConfigPriority(0x6f800002)) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.473 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.475 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ??(0x7f000003)) ERROR: UnsupportedSetting(0x80001019)
2019-03-24 15:30:49.554 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ??(0x7f000003)) ERROR: UnsupportedSetting(0x80001019)
2019-03-24 15:30:49.558 1739-2059/? E/OMXNodeInstance: setConfig(0xf411c720:google.aac.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
2019-03-24 15:30:49.559 1739-2059/? E/OMXNodeInstance: setConfig(0xf411c720:google.aac.decoder, ConfigOperatingRate(0x6f800003)) ERROR: Undefined(0x80001001)
2019-03-24 15:30:49.559 1739-2059/? E/OMXNodeInstance: getConfig(0xf411c720:google.aac.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001)
2)循环无效
哪种格式最适合最大化两个系统的兼容性?
答案 0 :(得分:2)
支持的视频格式实际上记录得很好:
在iOS上,后备播放器是AVPlayer。支持的格式取决于iOS的版本,AVURLAsset类具有audiovisualTypes,您可以查询支持的av格式。 在Android上,后备播放器是ExoPlayer,请参阅此处以获取受支持格式的列表。
我很高兴另一个stackoverflow question提供的建议,并简单地使用以下ffmpeg格式进行转换:
ffmpeg -i input.file.mp4 -vcodec libx264 -vprofile high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=-1:360 -threads 0 -acodec libvo_aacenc -b:a 128k converted.mp4
这可以在iOS(真实设备)和android设备上正常工作。
FWIW:如果您不想在设备上查询the list of supported iOS formats in an SO answer,显然也可以找到它们。