Как воспроизвести видео (.flv), не показывая загрузочную картинку для буферизации во время воспроизведения?
Я хочу воспроизвести видео файл FLV на моем сайте. Видео будет воспроизводиться с учетом скорости интернет-соединения клиентского компьютера, поэтому видео никогда не будет останавливаться, показывая загрузочное изображение для буферизации.
Либо сначала завершится буферизация / потоковая передача, а затем начнется воспроизведение, или видео начнет воспроизводиться после небольшой задержки, в то время как буферизация будет выполнена, например, 40% и остальная часть буферизации будут выполняться одновременно, так что видео никогда не будет останавливаться и отображать изображение загрузки.
Как это сделать? Возможно ли реализовать?
Пожалуйста, помогите реализовать это.
6 ответов
Одна вещь, которая действительно может вам помочь, - это кодировать видео с разными битрейтами. Нельзя обойти стороной тот факт, что у некоторых людей просто будет недостаточно пропускной способности для стабильно хорошего воспроизведения видео. К счастью, Flash позволяет выполнять динамическое переключение потоков в зависимости от обнаруженной пропускной способности клиента. Чтобы использовать эту функцию, вместо непосредственного воспроизведения FLV, вы предоставляете плейлисту список воспроизведения файлов SMIL с различными перечисленными потоками. В FLVPlayback встроена эта функциональность. Вот пример файла SMIL, украденного отсюда:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN"
"http://www.w3.org/2001/SMIL20/SMIL20.dtd">
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<body>
<switch>
<video src="video2.flv" system-bitrate="512000" />
<video src="video1.flv" system-bitrate="256000" />
<video src="video0.flv" />
</switch>
</body>
</smil>
Вам следует прочитать Восемь ошибок распределенных вычислений [ wikipedia]. "Все они оказываются ложными в долгосрочной перспективе, и все они вызывают большие неприятности и болезненный опыт обучения".
Кратко:
- Постоянная / фиксированная скорость не.
- Надежных сетей нет.
Это основа большинства компьютеров, на самом деле они являются абстракциями понятий более низкого уровня. И это хорошая вещь (тм), потому что это позволяет нам выполнять больше работы; это становится проблемой, когда утечка абстракций.
Куда я иду с этим? Вы не можете знать, что вам никогда не понадобится показывать окно буферизации только потому, что начальная часть фильма загружается за X времени. Конечно, большую часть времени вы можете измерить это и получить приличные результаты, но время от времени ребенок вытаскивает кабель Ethernet из гнезда - в переносном или переносном смысле. И вы не хотите потерпеть крах или иным образом потерять данные пользователя, когда это произойдет.
Решение простое: разработайте свою настройку так, чтобы большинство пользователей не видели окно буферизации, но не пытались предотвратить его, когда это необходимо.
Попробуй это. Получите длительность видео и установите это время буфера:
var netConn:NetConnection = new NetConnection();
// Create a local streaming connection
netConn.connect(null);
// Create a NetStream object and define an onStatus() function
var netStream:NetStream = new NetStream(netConn);
netStream.onStatus = function(infoObject) {
status_txt.text += "Status (NetStream)" + newline;
status_txt.text += "Level: "+infoObject.level + newline;
status_txt.text += "Code: "+infoObject.code + newline;
};
// Attach the NetStream video feed to the Video object
my_video.attachVideo(netStream);
my_video.onMetaData = function(videoMetaData:Object):Void {
var videoDuration = videoMetaData.duration;
}
// Set the buffer time
netStream.setBufferTime(videoDuration);
// Begin playing the FLV file
netStream.play("http://www.mydomain.com/myvid.flv");
Вы можете создавать собственные анимации буферизации. Если вы не хотите ничего показывать, я думаю, вы могли бы создать анимацию, в которой ничего нет или нет рамок. Смотрите здесь для видео-учебника.
Самый простой способ - использовать Pre load manager manager. Вот пример:
import gs.dataTransfer.PreloadAssetManager;
var preloader_obj = new PreloadAssetManager(["myFile1.swf","myFile2.swf"]);
this.onEnterFrame = function() {
myPreloader_mc.bar_mc._xscale = preloader_obj.percentLoaded_num;
if (preloader_obj.percentLoaded_num == 100) {
gotoAndPlay("start");
}
}
С процентами Loaded_num вы можете установить количество, которое необходимо загрузить перед игрой. Вместо swf используйте flv, который вы хотите предварительно загрузить. Я не использовал его для FLV, но он должен работать. Проверьте документацию для получения дополнительной информации об этом.
Также не стоит запрещать буферизацию, если не загружается весь flv. Скорость интернета варьируется.
Вы можете использовать Flex, чтобы добавить видео, которое вы хотите, и настроить свой собственный видеоконтроллер
как это
Пример плеера с и без видеоконтроллера
Надеюсь, что это дает вам идею.