| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- * Copyright (C) 2016 Bilibili. All Rights Reserved.
- *
- * @author zheng qian <xqq@xqq.im>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import IOController from '../io/io-controller.js';
- import {createDefaultConfig} from '../config.js';
- class Features {
- static supportMSEH264Playback() {
- return window.MediaSource &&
- window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"');
- }
- static supportNetworkStreamIO() {
- let ioctl = new IOController({}, createDefaultConfig());
- let loaderType = ioctl.loaderType;
- ioctl.destroy();
- return loaderType == 'fetch-stream-loader' || loaderType == 'xhr-moz-chunked-loader';
- }
- static getNetworkLoaderTypeName() {
- let ioctl = new IOController({}, createDefaultConfig());
- let loaderType = ioctl.loaderType;
- ioctl.destroy();
- return loaderType;
- }
- static supportNativeMediaPlayback(mimeType) {
- if (Features.videoElement == undefined) {
- Features.videoElement = window.document.createElement('video');
- }
- let canPlay = Features.videoElement.canPlayType(mimeType);
- return canPlay === 'probably' || canPlay == 'maybe';
- }
- static getFeatureList() {
- let features = {
- mseFlvPlayback: false,
- mseLiveFlvPlayback: false,
- networkStreamIO: false,
- networkLoaderName: '',
- nativeMP4H264Playback: false,
- nativeWebmVP8Playback: false,
- nativeWebmVP9Playback: false
- };
- features.mseFlvPlayback = Features.supportMSEH264Playback();
- features.networkStreamIO = Features.supportNetworkStreamIO();
- features.networkLoaderName = Features.getNetworkLoaderTypeName();
- features.mseLiveFlvPlayback = features.mseFlvPlayback && features.networkStreamIO;
- features.nativeMP4H264Playback = Features.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"');
- features.nativeWebmVP8Playback = Features.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"');
- features.nativeWebmVP9Playback = Features.supportNativeMediaPlayback('video/webm; codecs="vp9"');
- return features;
- }
- }
- export default Features;
|