我正在使用mediafilesegmenter为 mp4 电影生成 HLS 播放列表。我的命令如下,
mediafilesegmenter movieName.mp4 -I -f /Library/WebServer/Documents/vod/movieName/ -t 10 -l movie.log -k /Library/WebServer/Documents/vod/movieName/keys/ -K http://KEYSERVER/keys/ -key-rotation-period 10 -encrypt-rotate-iv-mbytes=1024 -J random
通过这个命令,我可以很好地生成播放列表,但持续时间#EXTINF:是小数点。我确实检查了 HLS 草案,它说
EXTINF 标签指定媒体段的持续时间。它仅适用于其后的媒体 URI。每个媒体段 URI 前必须有一个 EXTINF 标签。其格式为:
#EXTINF:<duration>,<title>
>
“duration”是十进制位置表示法中的整数或浮点数,以秒为单位指定媒体段的持续时间。报告为整数的持续时间应该四舍五入到最接近的整数。如果播放列表文件的协议版本小于 3,则持续时间必须是整数。
我的问题是如何制作 #EXTINF整数?我确实使用了选项 -t 10 和 -t 15 几个数字,但我的播放列表仍然有
#EXTINF:14.792, 等等。
任何人都可以指出我要对命令进行哪些更改,以便我获得基于整个整数的信息#EXTINF?
我的 mediasegmenter 版本是 mediafilesegmenter: Beta Version 1.1(111116)
我正在使用Darwin Kernel Version 10.8.0 with x86_64mac。
我在我的应用程序中使用 HLS 流,我正在使用 AVPlayer。现在我想使用 AVAsset 获取视频轨道的比特率。虽然我添加了观察者和其他东西,但我的轨道数组总是空的。我是在正确的轨道上还是遗漏了什么?
我正在使用 AVFoundation 框架进行实时流媒体播放。现在我有一个如下所示的播放列表
#EXT-X-VERSION:4
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:8148007
#EXT-X-TARGETDURATION:6
#EXT-X-PROGRAM-DATE-TIME:1972-04-14T08:51:01.497Z
Run Code Online (Sandbox Code Playgroud)
我认为 AVPlayer 请求获取此播放列表。我可以使用 AVFoundation 中的类来提取 EXT-X-TARGETDURATION 和 EXT-X-PROGRAM-DATE-TIME。如果没有,还有其他方法吗?谢谢
根据这个答案,要测试浏览器播放HLS视频的能力,application/x-mpegURL可以使用MIME 。但是这种方法的问题在于它正在maybe为 iPhone(实际上支持 HLS)和 Firefox for Android(不支持)返回。尽管在 Chrome 和 Firefox 等桌面浏览器的情况下通过返回空字符串可以很好地工作。
是否有任何精确的方法来检查浏览器中的 HLS 支持?
HTML5test.com可以准确地预测 HLS 支持为是或否。这是如何运作的?
我通过 ffmpeg 使用了 hls 流。
在开始流延迟存在几秒钟。
当我想在非常延迟的情况下从流中的 4k 视频中进行串流时。
我能做什么?
我可以在 PC 和 android 设备中播放 m3u8 文件,但我无法在 iOS 移动设备和 safari 浏览器中播放这些文件,我将 android 设备的 overrideNative 禁用为“true”,因此它可以在机器人。但是我们不应该为 iOS 和 safari 禁用本机,因为 iOS Safari 使用本机播放器,所以我为 iOS 设置了覆盖的 false。但它不工作。我正在关注新的 videojs 版本。
视频js:6.4.0
videojs 贡献 hls:5.12.2
videojs 闪存:2.0.1
例子
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>videojs-contrib-hls</title>
<link href="https://unpkg.com/video.js@6.4.0/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js@6.4.0/dist/video.js"></script>
<script src="https://unpkg.com/videojs-flash@2.0.1/dist/videojs-flash.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls@5.12.2/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<h1>Video.js Example Embed</h1>
<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="600" height="268"
data-setup='{}'>
<source src="https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8" type="application/x-mpegURL">
</video>
<script>
let videojshls= videojs('my_video_1', { html5: {
nativeAudioTracks: false,
nativeVideoTracks: false, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Bento4 和 Shaka Packager 使用碎片 mp4 输出 DASH 和 HLS 文件。
我在理解 MPEG-DASH Live 和点播配置文件之间的差异和优缺点时遇到了一些困难。如果我正在流式传输实时广播内容,我会使用实时配置文件,但对于静态点播视频,我似乎可以使用点播或实时配置文件。每个配置文件以完全不同的文件格式和文件夹结构输出文件,按需输出包含 .mp4 文件的平面文件夹结构,实时输出包含 m4s 文件的嵌套文件夹结构。
对于不会现场直播的静态视频内容(例如浏览器支持、功效等),是否建议使用一种配置文件而不是另一种配置文件?如果是,为什么?
我正在使用 AWS“Elemental MediaConvert”服务来获取上传视频的 HLS 格式。我们将其用作视频点播服务。一切正常。上传到“s3-input”存储桶中的视频将由 lambda 服务获取并由 boto3 elemental mediaconvert 客户端处理。输出的视频将存储在“s3-output”存储桶中。一个问题是纵向视频在“s3-output”存储桶中以横向模式显示,并且在移动设备/浏览器中播放 HLS url 时也是如此。
amazon-s3 amazon-web-services http-live-streaming video-on-demand aws-lambda
我需要一些帮助来尝试弄清楚如何在 vuejs 中使用hls.js库,因为它没有关于如何使用 vue 实现它的具体文档。这里的情况是,我必须从 api 获取 m3u8 我可以使用标签和 cdn 使其从基本 html 工作,但是当我尝试使用 vuejs 实现它时,它不起作用,感谢任何帮助。我尝试了 2 种实现,每次都遇到相同的错误。这些是我到目前为止所得到的:
第一次尝试:使用 cdn 并包含在其组件中
export default {
head() {
return {
script: [
{
src: 'https://cdn.jsdelivr.net/npm/hls.js@latest'
}
],
}
}}
Run Code Online (Sandbox Code Playgroud)
在created()中使用函数
checkHLS(){
console.log('in');
if (Hls.isSupported()) {
console.log('working')
}
},
Run Code Online (Sandbox Code Playgroud)
第二次尝试使用 npm 安装软件包
npm install --save hls.js
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
Hls is not defined
An error occurred while rendering the page. Check developer tools console for details.
Run Code Online (Sandbox Code Playgroud) 我正试图MPMoviePlayerController在模态视图控制器内使用对象播放HTTP直播视频.如果我像这样运行代码,一切正常.我收到MPMoviePlaybackStatePlaying通知,视频播放.
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
self.moviePlayerController = [[[MPMoviePlayerController alloc] initWithContentURL:url] autorelease];
self.moviePlayerController.view.frame = CGRectMake(0,0,320,416);
self.moviePlayerController.controlStyle = MPMovieControlStyleNone;
self.moviePlayerController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.moviePlayerController.view];
self.moviePlayerController.fullscreen = NO;
[self.moviePlayerController play];
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用该prepareToPlay方法,以便我可以显示加载指示器,并获得更好的体验.但是,我似乎无法让这个工作.没有MPMoviePlayerPlaybackStateDidChangeNotification被调用,流不播放.活动指标就在那里永远旋转着.
我已经确认它prepareToPlay会被调用,但之后似乎没有其他事情发生.我还确认此代码适用于本地电影文件.它似乎与HTTP Live Streaming失败了.谁能看到我做错了什么?
- (void)viewDidLoad {
[super viewDidLoad];
[self.activityIndicator startAnimating];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
self.moviePlayerController = [[[MPMoviePlayerController alloc] initWithContentURL:url] autorelease]; …Run Code Online (Sandbox Code Playgroud)