标签: http-live-streaming

移动设备上的HTTP直播流检测

我想检测手机/平板电脑是否可以播放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)解决方案可用于检测此类流媒体支持?

javascript mobile android http-live-streaming

13
推荐指数
1
解决办法
446
查看次数

对Apple的HTTP直播流使用openssl加密

有没有人有幸运行加密流媒体与使用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)

我使用这些文档作为指南:

http://tools.ietf.org/html/draft-pantos-http-live-streaming

http http-live-streaming

12
推荐指数
2
解决办法
1万
查看次数

通过HTTP直播流从MP3中提取ID3标签

我一直很难从通过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仍在批准我公司的开发者帐户.

iphone cocoa-touch id3 avfoundation http-live-streaming

12
推荐指数
1
解决办法
6185
查看次数

dyld 未找到 AVAssetDownladTask

尝试将离线 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 类中,所以我不知道下一步该做什么。谢谢!

http-live-streaming ios swift ios10 avassetdownloadtask

12
推荐指数
2
解决办法
2446
查看次数

MAC OSX HTTP直播流工具在哪里?

我试图安装mediastreamvalidator,mediastreamsegmenter,mediafilesegmenter tools为我的Mac机版本10.6.8.

如下面提到的链接关于下载所需的工具,用于开发Apple指定的Http Live Server.

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html

如上文所述:

这些工具经常更新,因此您应该从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上安装这些应用程序的信息.

谢谢.

macos http-live-streaming ios

11
推荐指数
3
解决办法
1万
查看次数

如何在Unix上实现HTTP Live Streaming服务器?

我刚刚意识到Apple需要HTTP Live Streaming才能在iPhone应用中查看视频.我之前没有意识到这一点......我现在正在努力了解这涉及到什么,所以我可以决定是否要做这项工作并在3G中提供视频或限制视频播放给与Wi-Fi连接的用户.

我阅读了Apple提供的概述,现在明白我的服务器需要对媒体文件进行分段和索引.我也明白,我不必托管内容以便能够流式传输(我可以指向其他地方托管的视频,对吧?).

在这一点上我不清楚的是在我的服务器上实现什么(Ubuntu Hardy)来实时进行实际的分段和索引(再一次,我没有主持我想要服务的视频).

我找到了一个解释如何安装FFmpeg和X264 的链接,但我不知道这是否是最好的解决方案(因为我有一个Ubuntu服务器,我不能使用Apple Live Streaming工具,它是否正确?).另外,我不明白我的服务器知道视频需要转换并开始工作......

任何反馈可以帮助我理解在服务器端做什么,以便能够在我的iPhone应用程序中流式传输视频,这将非常感谢!(哦,只是它有所不同,我的应用程序后端是在Rails中)

ubuntu ffmpeg video-streaming http-live-streaming ios

11
推荐指数
2
解决办法
2万
查看次数

ffmpeg转码重置文件的开始时间

我使用分段器将我的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)

transcode ffmpeg http-live-streaming

11
推荐指数
1
解决办法
9458
查看次数

如何为HLS创建字节范围的m3u8播放列表?

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文件创建这样的播放列表.那有什么工具吗?

http-live-streaming m3u8

11
推荐指数
2
解决办法
2万
查看次数

ffmpeg HTTP LIVE STREAMING删除旧段

您好我有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个我想只保留这些文件在硬盘上

ffmpeg http-live-streaming

11
推荐指数
1
解决办法
2万
查看次数

如何在将请求传递给上游服务器之前删除Nginx中的客户端标头?

上游服务器是wowza,如果我没有在应用程序级别启用它们,则不接受自定义标头.

Nginx作为代理服务器工作,从浏览器我想发送一些自定义标头,应该由Nginx代理接收和记录,但在转发请求到上游服务器之前,应该从请求中删除这些标头.

所以上游服务器永远不会知道那里有任何自定义标头.

我想proxy_hide_header还有proxy_set_header "<header>" "",但好像他们适用于响应头不请求头.

即使我接受在wowza上启用标头,然后我再也找不到在所有应用程序的服务器级别启用标头的方法.Currenlty我必须为每个新创建的应用程序添加标题,这对我来说是不可行的.

任何帮助,将不胜感激.

nginx http-headers http-live-streaming wowza

11
推荐指数
1
解决办法
2万
查看次数