我想检测手机/平板电脑是否可以播放HTTP直播(m3u8).
我目前正在使用此脚本进行测试:
function isHLSEnabled() {
var videoElement = document.createElement('video'),
canPlayAppMpeg = videoElement.canPlayType('application/x-mpegURL'),
canPlayAppleMpeg = videoElement.canPlayType('vnd.apple.mpegURL');
return (
(canPlayAppMpeg == 'probably' || canPlayAppMpeg == 'maybe')
|| (canPlayAppleMpeg == 'probably' || canPlayAppleMpeg == 'maybe')
);
}
Run Code Online (Sandbox Code Playgroud)
但它在某些三星浏览器(股票,海豚等)上效果不佳 - 它返回false(因为canPlayTypes是空字符串)但是它能够播放视频.
是否有任何防弹(ish)解决方案可用于检测此类流媒体支持?
有没有人有幸运行加密流媒体与使用openssl的Apple的HTTP Live Streaming一起工作?看起来我差不多了,但我的视频没有播放,但我也没有在Safari中出现任何错误(例如"视频无法播放"或"你没有权限播放此视频",当我拿到密钥时错误).
#bash script:
keyFile="key.txt"
openssl rand 16 > $keyFile
hexKey=$(cat key.txt | hexdump -e '"%x"')
hexIV='0'
openssl aes-128-cbc -e -in $fileName -out $encryptedFileName -p -nosalt -iv ${hexIV} -K ${hexKey}
#my playlist file:
#EXTM3U
#EXT-X-TARGETDURATION:000020
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="key.txt"
#EXTINF:20, no desc
test.ts.enc
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我使用这些文档作为指南:
我一直很难从通过Live HTTP Streaming流式传输的MP3中提取ID3信息(使用Wowza媒体服务器,如果有人好奇的话).我知道标签(现在是专辑标签和专辑图片标签)正确地嵌入到每个文件段中,因为当我手动下载它们时,我可以.m3u在服务器生成的索引文件中列出的每个段中看到它们.
我正在使用这些AVFoundation类来执行此操作,我将其设置为:
- (void)initializeAudioStream {
NSURL *streamUrl = [NSURL URLWithString:self.urlField.text];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamUrl];
self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem];
self.musicPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[self.musicPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL];
}
Run Code Online (Sandbox Code Playgroud)
一旦我的KVO方法被触发,我开始播放self.musicPlayer并且addPeriodicTimeObserverForInterval每1/4秒呼叫一次.正是在这种方法中,我尝试提取ID3元数据.
我已经尝试了在iOS方面我能想到的所有事情来实现这一目标,包括打印出来
self.musicPlayer.currentItem.asset.commonMetadata
Run Code Online (Sandbox Code Playgroud)
以及迭代每个AVAssetTrack实例并打印出他们的元数据.
for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) {
NSLog(@"Media type of track: %@", track.mediaType);
NSLog(@"Track metadata: %@", track.commonMetadata);
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,该资产总是说有2条轨道.当我打印他们的mediaType财产时,我得到第一个"soun"和第二个"tmet".我的假设是第一个轨道是音频数据本身,第二个轨道是元数据.但是,我只看到一个空数组commonMetadata.
我还在statusOfValueForKey:error轨道上检查属性的状态,并且commonMetadata密钥总是返回AVKeyValueStatusLoaded.
有任何想法吗?我在这里完全失败了.
此外,我目前通过运行iOS 4.2.1的iPhone 4模拟器运行此功能.我还不能把它放在设备上,因为Apple仍在批准我公司的开发者帐户.
尝试将离线 HLS(ios 10 的一项新功能)添加到应用程序。我正在快速尝试以下操作,以便应用程序在没有离线 HLS 功能的情况下仍能在 ios 9 上运行。在 ios10 上运行良好,也可以为 ios9 编译。
@available(iOS 10.0, *)
@objc class DownloadManager: NSObject, AVAssetDownloadDelegate {
//Do stuff with downloading assets
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在 ios 9 设备上实际运行它时,应用程序立即崩溃并显示以下消息:
dyld:未找到符号:_OBJC_CLASS_$_AVAssetDownloadTask 引用自:/var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod 预期在:/Systemworks/FoundaryFrame /var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod中的框架/AVFoundation
我已将与此相关的所有代码都限制在 DownloadManager 类中,所以我不知道下一步该做什么。谢谢!
我试图安装mediastreamvalidator,mediastreamsegmenter,mediafilesegmenter tools为我的Mac机版本10.6.8.
如下面提到的链接关于下载所需的工具,用于开发Apple指定的Http Live Server.
如上文所述:
这些工具经常更新,因此您应该从Apple Developer网站下载当前版本的HTTP Live Streaming Tools.如果您是iPhone开发人员计划的成员,则可以访问它们.导航到这些工具的一种方法是登录connect.apple.com,然后单击下载标题下的iPhone.
使用Mac OSX开发人员凭据登录到站点connect.apple.com后,
在下载标题下没有名为iPhone的选项卡,我无法找到此链接.
如果这些工具存储在其他地方,请为我提供更新的链接吗?我需要这些命令行来开发HLS服务器.
正如我在Apple网站上看到的那样,Mac OSX 10.6及更高版本已经安装了这些应用程序,我们不需要使用dgm文件安装它们,但是在我的max机器上我只有mediastreamsegmenter命令行工具而不是全部.
有人可以给我一个下载这些命令行工具的链接,或提供有关如何在我的mac上安装这些应用程序的信息.
谢谢.
我刚刚意识到Apple需要HTTP Live Streaming才能在iPhone应用中查看视频.我之前没有意识到这一点......我现在正在努力了解这涉及到什么,所以我可以决定是否要做这项工作并在3G中提供视频或限制视频播放给与Wi-Fi连接的用户.
我阅读了Apple提供的概述,现在明白我的服务器需要对媒体文件进行分段和索引.我也明白,我不必托管内容以便能够流式传输(我可以指向其他地方托管的视频,对吧?).
在这一点上我不清楚的是在我的服务器上实现什么(Ubuntu Hardy)来实时进行实际的分段和索引(再一次,我没有主持我想要服务的视频).
我找到了一个解释如何安装FFmpeg和X264 的链接,但我不知道这是否是最好的解决方案(因为我有一个Ubuntu服务器,我不能使用Apple Live Streaming工具,它是否正确?).另外,我不明白我的服务器知道视频需要转换并开始工作......
任何反馈可以帮助我理解在服务器端做什么,以便能够在我的iPhone应用程序中流式传输视频,这将非常感谢!(哦,只是它有所不同,我的应用程序后端是在Rails中)
我使用分段器将我的MPEG 2 Ts文件分割成一系列用于HTTP直播的媒体段
并且每个段的开始时间跟在前一段之后(例如:段的开始时间:00:00,00:10,00:20,00:30,......)
(在Ubuntu中)
问题是:
当我使用ffmpeg转码其中一个媒体片段(ex 800k bps到200k bps)
转码媒体段的开始时间将重置为0
例如:当我转码第三段时,
开始段的时间改变为:00:00,00:10,00:00,00:30,...
一旦播放转码媒体片段,它会导致我的播放器冻结
有相同的开始时间转码媒体文件的解决方案吗?
我想这是ffmpeg重置段的PTS(演示时间戳)
但我不知道如何解决它...
这是我的ffmpeg命令(转码为250k bps)
============================
ffmpeg -y -i sample-03.ts -f mpegts -acodec libfaac -ar 48000 -ab 64k -vcodec libx264 -b 250k -flags +loop -cmp +chroma \
-partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 \
-sc_threshold 40 -i_qfactor 0.71 -maxrate 250k -bufsize 250k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 \
-qmin 10 -qmax 51 -qdiff 4 -level 30 …Run Code Online (Sandbox Code Playgroud) Apple 提供了一个支持HLS m3u8文件中字节范围段的示例
#EXTM3U
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXTINF:10.0,
#EXT-X-BYTERANGE:75232@0
media.ts
#EXTINF:10.0,
#EXT-X-BYTERANGE:82112@752321
media.ts
#EXTINF:10.0,
#EXT-X-BYTERANGE:69864
media.ts
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何为给定的.ts文件创建这样的播放列表.那有什么工具吗?
您好我有ffmpeg的实时HTTP流输入我想使用ffmpeg创建HLS流im
ffmpeg -i http://127.0.0.1:4242/bysid/7275 -map 0 -codec:v libx264 -codec:a copy -f ssegment -segment_list playlist.m3u8 -segment_list_type hls -segment_list_size 10 -segment_list_flags +live -segment_time 10 out%03d.ts
Run Code Online (Sandbox Code Playgroud)
我工作正常,我只想删除playlist.m3u8中未显示的旧segmens
segment_list_size 10
Run Code Online (Sandbox Code Playgroud)
这将保留播放列表文件中的最后10个我想只保留这些文件在硬盘上
上游服务器是wowza,如果我没有在应用程序级别启用它们,则不接受自定义标头.
Nginx作为代理服务器工作,从浏览器我想发送一些自定义标头,应该由Nginx代理接收和记录,但在转发请求到上游服务器之前,应该从请求中删除这些标头.
所以上游服务器永远不会知道那里有任何自定义标头.
我想proxy_hide_header还有proxy_set_header "<header>" "",但好像他们适用于响应头不请求头.
即使我接受在wowza上启用标头,然后我再也找不到在所有应用程序的服务器级别启用标头的方法.Currenlty我必须为每个新创建的应用程序添加标题,这对我来说是不可行的.
任何帮助,将不胜感激.
ffmpeg ×3
ios ×3
android ×1
avfoundation ×1
cocoa-touch ×1
http ×1
http-headers ×1
id3 ×1
ios10 ×1
iphone ×1
javascript ×1
m3u8 ×1
macos ×1
mobile ×1
nginx ×1
swift ×1
transcode ×1
ubuntu ×1
wowza ×1