标签: streaming

未知内容长度的HTTP标头

我目前正在尝试在转码过程之后将内容流式传输到网络上.这通常可以通过将二进制文件写入我的Web流来正常工作,但是某些浏览器(特别是IE7,IE8)不喜欢不在HTTP头中定义Content-Length.我相信"有效"标题应该具有此设置.

当您有未知的内容长度时,将内容流式传输到网络的正确方法是什么?转码过程可能需要一段时间,所以我想在完成时开始流式传输.

.net binary streaming http http-headers

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

用于显示MJPEG流的跨浏览器解决方案

是否有一种轻量级,免费且可靠的方式在跨浏览器环境中显示MJPEG?我正在尝试在我正在开发的网站上显示来自Axis 2120 IP摄像头的MJPEG流,并且我发现这在当前版本的Firefox中非常可靠.然而,经过一些测试后我发现IE,Opera和Chrome都有不同程度的麻烦(没有Mac访问,所以我不确定Safari).Internet Explorer不支持MJPEG,根本不起作用.在发送初始GET之后,Opera需要10-15秒才能显示任何内容.Chrome可以完美地运行,直到<div>包含<img>标签的内容被隐藏,然后再次显示.

作为参考,我使用<img>标签来显示流,如下所示:

<img src="http://my.ip.addr/axis-cgi/mjpg/video.cgi/?resolution=352x240" alt="real-time video feed" />
Run Code Online (Sandbox Code Playgroud)

我已经考虑过使用重播服务器来收集MJPEG流并在运行中对其进行转码,但这个解决方案似乎太难看了.那里有更好的建议吗?

streaming multiple-browsers mjpeg ip-camera

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

HTTP Live Streaming:Linux的噩梦

我正在开发iPhone上的音乐VOD应用程序,并且由于Apple的指导原则,我必须运行HTTP Live Streaming才能在AppStore上接受.但是,由于Apple并不关心地球上98%的服务器,因此他们没有为基于Linux的系统提供如此神奇的HTTP Live Streaming Tools.从这一点开始,噩梦就开始了.

我的目标很简单:拿MP3,分割它并生成一个简单的.m3u8索引文件.我用谷歌搜索"HTTP Live Streaming Linux"和"哦太棒了!很多人已经做过了"!

首先,我参观了卡森麦克唐纳的(如此着名的)帖子.结果:svn segmentate.c是旧的,错误的并且是编译的噩梦(这个世界上的任何人都无法确定他们正在使用的ffmpeg版本!).然后我遇到了Carson的git repo,但是太糟糕了,有很多讨厌的ruby东西而且live_segmenter.c无法获取mp3文件.

然后我更深入地搜索.我找到了这个stackoverflow主题,这正是我想要做的.所以我按照juuni的建议使用这个脚本(httpsegmenter).结果:无法编译任何东西,2天的工作,最后我设法编译它(ffmpeg 8.1 w/httpsegmenter rev17).不,这不是一个好的脚本,它确实需要mp3文件,但生成的ts文件和索引文件不能被播放器读取.

然后krisbulman的帖子的作者带来了一个解决方案,甚至还给了他自己的g3u8-segmenter版本(git repo).我测试它:不编译,什么都不做.所以我从johnf https://github.com/johnf/m3u8-segmenter获取了原始版本.我设法编译和奇迹它的工作(不是真的).我使用了这个命令行(ffmpeg 0.8.1):

ffmpeg -er 4 -i music.mp3 -f mpegts -acodec libmp3lame -ar 44100 -ab 128k -vn - | m3u8-segmenter -i - -d 10 -p outputdir/prefix -m outputdir/output.m3u8 -u http://test.com/
Run Code Online (Sandbox Code Playgroud)

这个脚本编码我的mp3文件(需要4秒,太长时间),并将其传递给m3u8-segmenter,将其分割为10秒.TS文件.

我在我的mac上用Apple的mediastreamvalidator测试了这个流,它说没关系.所以我把它播放到quicktime,但每个.TS文件之间有大约0.2秒的空白!

所以这是我的情况,这是一场噩梦,我无法通过HLS协议获得简单的mp3流.是否有一个简单的WORKING解决方案来分割MP3?为什么我不能直接将mp3文件分割成多个mp3文件,比如Apple的mediafilesegmenter呢?

linux streaming debian mp3 http

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

使用FFMPEG将视频文件连续传输到RTMP服务器

ffmpeg 处理RTMP流作为输入或输出,它运行良好.

我想将一些视频(由python脚本管理的动态播放列表)流式传输到RTMP服务器,我现在正在做一些非常简单的事情:使用FFMPEG将我的视频逐个流式传输到RTMP服务器,但这会导致连接中断每次视频结束时,当下一个视频开始时,流就准备好了.

我想在没有任何连接中断的情况下流式传输这些视频,然后可以正确查看流.

我使用此命令将我的视频逐个流式传输到服务器

ffmpeg -re -y -i myvideo.mp4 -vcodec libx264 -b:v 600k -r 25 -s 640x360 \
-filter:v yadif -ab 64k -ac 1 -ar 44100 -f flv \
"rtmp://mystreamingserver/app/streamName"
Run Code Online (Sandbox Code Playgroud)

我在互联网上寻找了一些解决方法很多天,我发现有些人在谈论使用命名管道作为输入ffmpeg,我已经尝试过它并没有很好地工作,因为ffmpeg它不仅关闭了RTMP流视频来了,但也关闭了自己.

有没有办法做到这一点?(将视频的动态播放列表流式传输ffmpeg到RTMP服务器,不会出现连接中断

streaming ffmpeg pipe rtmp named-pipes

22
推荐指数
3
解决办法
4万
查看次数

在ASP.NET中实现文件下载时如何处理文件流?

我有一个DocumentGenerator包装的课程MemoryStream.所以我已经IDisposable在课堂上实施了.

我看不出如何/在哪里可以处理它.

这是我当前的代码,它在MVC中执行文件下载:

using (DocumentGenerator dg = DocumentGenerator.OpenTemplate(path))
{
    /* some document manipulation with the 
       DocumentGenerator goes here ...*/

    return File(dg.GetDocumentStream(), "text/plain", filename);
}
Run Code Online (Sandbox Code Playgroud)

在控制器完成之前关闭/处理流时出现此错误.在这种情况下,如何确保我的资源得到妥善处理?

编辑:我现在的执行IDisposable只是处置MemoryStream.我知道这不是一个正确的实现,我只是用它作为测试.有什么不同我可以在这里做它的工作吗?

public void Dispose()
{
    _ms.Dispose();
    _ms = null;
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc streaming idisposable

21
推荐指数
1
解决办法
9845
查看次数

Android视频流示例

我想在我的项目中实现视频流.那么,有没有可行的教程?视频存储在服务器端.因此,要使用URL获取视频并在Android上播放.我尝试了一些例子,但我收到错误,"抱歉,这个视频无法播放".我正在尝试使用MP4.

video streaming android playback

21
推荐指数
3
解决办法
10万
查看次数

HTML5音频流:精确测量延迟?

我正在构建一个跨平台的Web应用程序,其中音频在服务器上即时生成,并且可能通过HTML5音频元素直播到浏览器客户端.在浏览器上,我将使用Javascript驱动的动画,这些动画必须与播放的音频精确同步."精确"意味着音频和动画必须在彼此之间,并且希望在250ms内(想想唇形同步).由于各种原因,我无法在服务器上进行音频和动画,并对生成的视频进行实时流式传输.

理想情况下,服务器上的音频生成和浏览器上的音频播放之间几乎没有或没有延迟,但我的理解是延迟将难以控制,并且可能在3-7秒范围内(浏览器,环境 - ,网络和月相依赖).但是,我可以处理这个问题,如果我可以在运行中精确测量实际延迟,以便我的浏览器Javascript知道何时呈现正确的动画帧.

那么,我需要精确测量我将音频传输到流媒体服务器(Icecast?)和来自扬声器主机上扬声器的音频之间的延迟.一些蓝天的可能性:

  • 将元数据添加到音频流,并从播放音频中解析它(我知道使用标准音频元素是不可能的)

  • 为音频添加短暂的纯静音时段,然后在浏览器上检测它们(音频元素可以产生实际的音频样本吗?)

  • 查询服务器和浏览器的各种缓冲区深度

  • 在Javascript中解码流式音频,然后获取元数据

有关如何做到这一点的任何想法?

javascript streaming html5 html5-audio

21
推荐指数
2
解决办法
2031
查看次数

如何对视频流服务器进行压力测试?

有谁知道我可以用来在视频流服务器上进行压力测试的任何好工具?我需要测试我的服务器处理5,000多个连接的程度.

testing video streaming

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

RTSP到RTMP流

我有一台通过RTSP和RTP流媒体的IP摄像头.理想情况下,我想将RTSP转换为RTMP,以将其流式传输到LiveStream或类似的流媒体服务.任何人都可以让我知道如何将RTSP转换为RTMP,然后将其流式传输到流媒体服务?

streaming rtmp rtsp

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

android媒体播放器 - 如何禁用范围请求?(在Nexus 7上损坏的音频流)

我有一个音频流应用程序,它运行本地代理服务器.本地代理服务器与互联网流媒体源建立http连接,在本地获取和缓冲流数据.然后,在应用程序内部,我使用MediaPlayer连接到本地代理服务器,使用该方法

mediaPlayer.setDataSource(...); // the url of the local proxy server
Run Code Online (Sandbox Code Playgroud)

一切都很好(有很多Android设备和不同的操作系统版本 - 1.5 ... 4.0),直到Nexus 7发布.

在Nexus 7中,媒体播放器拒绝从本地代理服务器播放源.

当我查看日志时,似乎MediaPlayer在内部使用范围请求.我的本地代理服务器无法处理.它返回HTTP/1.0 200 OK和数据.但是,媒体播放器并不喜欢这样并抛出异常:

Caused by: libcore.io.ErrnoException
?:??: W/?(?): [ 07-18 00:08:35.333  4962: 5149 E/radiobee ]
?:??: W/?(?): : sendto failed: ECONNRESET (Connection reset by peer)
?:??: W/?(?):   at libcore.io.Posix.sendtoBytes(Native Method)
?:??: W/?(?):   at libcore.io.Posix.sendto(Posix.java:146)
?:??: W/?(?):   at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:
?:??: W/?(?):   at libcore.io.IoBridge.sendto(IoBridge.java:473)
We requested a content range, but server didn't support that. (responded with 200)
Run Code Online (Sandbox Code Playgroud)

根据http规范,如果服务器以HTTP/1.0而不是1.1响应,则客户端不得发出范围请求(1.0不支持该规范),

此外,如果服务器不支持范围请求,它应该没问题,如果它以200 OK响应(这就是我正在做的事情),但是Nexus 7上的MediaPlayer实现并不喜欢.

我看了一下这个帖子: HTTP:当Range不受支持时,我应该如何响应"Range:bytes ="? …

streaming android media-player

20
推荐指数
3
解决办法
8554
查看次数