@hesammosavi
@endworld
سلام خدمت همه دوستان
بنده فایل ویدیو هام رو با ffmpeg به m3u8 تبدیل میکنم و روی دیسک static که هاست دانلودم باشه آپلود کردم
وقتی هم که میخوام انارو توی blade لاراول نمایش بدم مشکلی ندارم اما بدون لینک امن
حالا از دوستان درخواست دارم کمکم کنید با استفاده از لینک امن اون ویدیو هارو نمایش بدم چیزی شبیه به همین سایت راکت مثلا:
https://dl4.roocket.ir/stream.m3u8?path=dlv/1398/laravel-project/17-advanced-search/165-filters-data/165-filters-data480p.m3u8&expires=1677764366&signature=3e302aedefa62b4414beba4957927afa
خودم بدون لینک امن اینکارو انجام دادم و خروجی گرفتم
اینا روت هاییه که تعریف کردم:
Route::get('/video/secret/{key}', function ($key) {
return Storage::disk('secrets')->download('29/' . $key);
})->name('video.key');
Route::get('/video/{playlist}', function ($playlist) {
return FFMpeg::dynamicHLSPlaylist()
->fromDisk('static')
->open("stream/video/29/{$playlist}")
->setKeyUrlResolver(function ($key) {
return route('video.key', ['key' => $key]);
})
->setMediaUrlResolver(function ($mediaFilename) {
return Storage::disk('static')->url("stream/video/29/{$mediaFilename}");
})
->setPlaylistUrlResolver(function ($playlistFilename) {
return route('video.playlist', ['playlist' => $playlistFilename]);
});
})->name('video.playlist');
این هم source ویدیو :
<script src="https://cdn.rawgit.com/video-dev/hls.js/18bb552/dist/hls.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const source = "{{ route('video.playlist', ['playlist' => '29.m3u8']) }}";
const video = document.querySelector('#video');
const defaultOptions = {};
if (!Hls.isSupported()) {
video.src = source;
var player = new Plyr(video, defaultOptions);
} else {
// For more Hls.js options, see https://github.com/dailymotion/hls.js
const hls = new Hls();
hls.loadSource(source);
// From the m3u8 playlist, hls parses the manifest and returns
// all available video qualities. This is important, in this approach,
// we will have one source on the Plyr player.
hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {
// Transform available levels into an array of integers (height values).
const availableQualities = hls.levels.map((l) => l.height)
availableQualities.unshift(0) //prepend 0 to quality array
// Add new qualities to option
defaultOptions.quality = {
default: 0, //Default - AUTO
options: availableQualities,
forced: true,
onChange: (e) => updateQuality(e),
}
// Add Auto Label
defaultOptions.i18n = {
qualityLabel: {
0: 'Auto',
},
}
hls.on(Hls.Events.LEVEL_SWITCHED, function (event, data) {
var span = document.querySelector(".plyr__menu__container [data-plyr='quality'][value='0'] span")
if (hls.autoLevelEnabled) {
span.innerHTML = `AUTO (${hls.levels[data.level].height}p)`
} else {
span.innerHTML = `AUTO`
}
})
// Initialize new Plyr player with quality options
var player = new Plyr(video, defaultOptions);
});
hls.attachMedia(video);
window.hls = hls;
}
function updateQuality(newQuality) {
if (newQuality === 0) {
window.hls.currentLevel = -1; //Enable AUTO quality if option.value = 0
} else {
window.hls.levels.forEach((level, levelIndex) => {
if (level.height === newQuality) {
console.log("Found quality match with " + newQuality);
window.hls.currentLevel = levelIndex;
}
});
}
}
});
</script>
اما اینا بدون لینک امنه و کاربر میتونه راحت به همه چی دسترسی داشته باشه میخوام مثل راکت لینک ویدیوها expires و امضا داشته باشه و نمایش بده که امن باشه
اگر کسی بلده لطفا رو همین کدهای خودم کمک برسونه اون لینک امن رو
@happy.b321d
سلام توی این داستان تجربه زیادی دارم و صفر تا صد رو هم کد زدم،
دوستان کسی خواست هم میتونم مشاوره بدم و هم سورس رو بفروشم
qmksbp@gmail.com
پاسخ کمتر از ۵ ساعت
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟