标签: streaming

覆盆子 PI 实时视频流

我正在为树莓派相机使用各种视频流选项。目前具有最低延迟的最佳解决方案是将数据从raspividto管道传输ncmplayer

在覆盆子上:

/opt/vc/bin/raspivid -t 0 -hf -vf -w 640 -h 480 --nopreview -o - | nc -l 5000
Run Code Online (Sandbox Code Playgroud)

在客户端机器上(-fps 60跳过缓冲的技巧)

nc $RASP_IP 5000 | mplayer -nosound -framedrop -x 640 -y 480 -fps 60 -demuxer +h264es -cache 1024 -
Run Code Online (Sandbox Code Playgroud)

这项工作非常好,几乎为零延迟。

现在我想将一些动态数据叠加到视频上。实现这一目标的最佳方法是什么?

我见过raspivid直接编辑和添加 opencv 之类的解决方案,但这在我的情况下不起作用,因为显示器必须位于与连接到相机的机器不同的机器上。

技术(语言/库)并不重要,除非它可以在 *nix 上运行(.NET 不是一个选项)

video streaming overlay raspberry-pi

5
推荐指数
1
解决办法
3625
查看次数

使用 Java 从麦克风流式传输音频

我正在开发一个项目,该项目要求我将音频从麦克风从客户端流式传输到服务器。下面显示的代码是我写的。当我同时运行客户端和服务器代码时,音频不会实时流式传输。事实上,来自客户端的音频存储在缓冲区中,当我终止客户端代码的执行时,来自服务器缓冲区的音频输出到扬声器。我究竟做错了什么?(我正在日食上开发)

服务器:

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;

//import org.apache.commons.io.output.ByteArrayOutputStream;


public class ServerStream {
    private OutgoingSoudnListener osl = new OutgoingSoudnListener();
    boolean outVoice = true;
    AudioFormat format = getAudioFormat();
    private ServerSocket serverSocket;
    Socket server;


    private AudioFormat getAudioFormat() {
        float sampleRate = 16000.0F;
        int sampleSizeBits = 16;
        int channels = 1;
        boolean signed = true;
        boolean bigEndian = false;

        return new AudioFormat(sampleRate, sampleSizeBits, channels, signed, bigEndian);
    }
    public ServerStream() throws IOException{
        try{ …
Run Code Online (Sandbox Code Playgroud)

java sockets audio streaming audio-streaming

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

节点 SQL Server mssql 流

我是 node 的新手,正在使用mssql它来连接到 SQL Server。任何人都可以帮助我提供一个更完整的mssql流媒体示例。我发现 git 示例含糊不清,不知道从哪里开始。任何帮助将不胜感激。

var sql = require('mssql'); 

var config = {
    user: '...',
    password: '...',
    server: 'localhost', // You can use 'localhost\\instance' to connect to named instance
    database: '...',
    stream: true, 

    options: {// Use this if you're on Windows Azure
    }
}

sql.connect(config, function(err) {


    var request = new sql.Request();
    request.stream = true; // You can set streaming differently for each request
    request.query('select * from verylargetable'); // or request.execute(procedure);

    request.on('recordset', function(columns) { …
Run Code Online (Sandbox Code Playgroud)

sql sql-server streaming node.js

5
推荐指数
1
解决办法
5126
查看次数

通过 WebSocket 流式传输数据

我有以下设置:一个 Javascript 客户端建立一个 WebSocket 并通过它发送大量数据。数据以字符串的形式呈现,可以有数百莫大。目前,我将字符串切成 16ko(完全任意大小)的块并一个接一个地发送块:

chunk_size = 16384;
step = Math.floor(content.length/chunk_size);
for(i=0; i<step; i++){
  ws.send(content.substring(chunk_size*i, chunk_size*(i+1)));
}
Run Code Online (Sandbox Code Playgroud)

我的问题与最佳实践有关。这是流数据的正确方法吗,流库通常是如何实现的?

还是我应该一次发送所有数据加载并让 WebSocket 处理流?

javascript streaming websocket

5
推荐指数
0
解决办法
1109
查看次数

Comet 流媒体:XHR 流媒体和 Forever iFrame 在 2015 年仍有可能吗?

我知道我可能应该使用 WebSockets 或服务器端事件,但是涉及将分块数据从服务器写入iFrame或作为对 的响应的 Comet Streaming 技术发生了xmlHttpRequest什么?我偶然发现了多个演示,但它们都不再按预期工作,而且由于这种类型的流媒体上的大部分材料都很旧,我想知道它在 2015 年是否仍然可行?

为了清楚起见,我指的是 Comet 技术,其中服务器使用分块传输编码即时刷新新数据来保持连接打开。浏览器中的增量渲染应该可以使这些数据可用,无论是在iFrame(例如“Forever iFrame”)的情况下还是通过在返回时读取对象的responseText属性(例如“XHR流”)。然而,所有浏览器似乎都会缓冲数据直到连接关闭,无论我在开始发送真实数据之前添加了多少虚假的前导码。另外,我指的不是set to仅适用于 Firefox的特殊情况,而是一种似乎在几年前适用于大多数浏览器的方法。xmlHttpRequestreadyState3Content-Typemultipart/x-mixed-replace

有谁知道当前的浏览器行为是否已经淘汰了这些 Comet 流技术?

示例演示:

responseText通过xmlHttpRequest对象轮询负载:

http://ajaxify.com/run/streaming/xmlHttpRequest/countdown/ http://ajaxify.com/run/streaming/xmlHttpRequest/

常规页面加载缓慢,增量渲染不适合我:

http://ajaxify.com/run/streaming/

iFrame缓慢iFrame加载时轮询内容:

http://ajaxify.com/run/streaming/xmlHttpRequest/iframe/

这些演示不使用分块传输编码,但产生的行为是相同的,即不发生增量渲染。

关于彗星流的文章:

http://cometdaily.com/2007/11/05/the-forever-frame-technique/



短版结论:

所有 Comet 技术仍然有效,但是,在我的情况下,防病毒软件以不可预见的方式阻碍了事情的发展,因此请确保在不同的计算机和安全模式下进行测试,以确保它是否不起作用!

streaming iframe comet xmlhttprequest

5
推荐指数
0
解决办法
500
查看次数

使用 Exoplayer 设置流 mp4 视频和播放文件的标头

Api 有一个我需要设置的令牌标头,但视频未加密。我有两个问题:如何使用 exoplayer 从磁盘播放 .mpg、.mpeg、.3gp、.mov 和其他文件?如何使用 exoplayer 设置标题并从 url 流式传输 mp4 视频?

video streaming android exoplayer

5
推荐指数
2
解决办法
7806
查看次数

PHP 将直播流录制到文件中

嗨,我有一个实时流媒体代码,我在本地主机上流式传输我的网络摄像头。

这是我的流文件代码

<?php

function flush_buffers(){
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}


header('Content-Type: video/mpeg');
$stream = fopen( 'http://localhost:8080/stream.mp2v', "rb" );
#$save = fopen("save.mp4", "w");
while ( ! feof( $stream ) )
{

    $response = fread( $stream, 8192 ); 
    echo $response;
    #fwrite($save,$stream);
    flush_buffers();
}

fclose( $stream );
fclose($save);
exit();
Run Code Online (Sandbox Code Playgroud)

我需要做的是将这个实时流同时录制到一个文件中,我在我的代码中声明了 save.mp4。我尝试使用 fwrite 来做到这一点,但是当我使用此代码运行程序时,我可以看到我的网络摄像头正在运行,但它不能记录任何内容以保存.mp4。我认为 fwrite 不适合我的目的。我在这一点上需要帮助。我该怎么办?

php streaming fwrite live

5
推荐指数
1
解决办法
3455
查看次数

VideoJS-动态更改源

我希望动态更改 VideoJS 播放器的视频源。我尝试了一种直接通过 DOM 更改源的方法,它确实更改了它,但播放器需要重新加载。所以看看这里的官方 API:http : //docs.videojs.com/docs/api/player.html#Methodssrc

有一种方法可以更改源,但是在运行以下代码时,它会引发错误。

    var source = dropdown.options[dropdown.selectedIndex].value;

	var myVideo = videojs.getPlayers();
	console.log(myVideo);
	if (source == "Source2"){
		myVideo.src([
			{type: "application/x-mpegURL", src: "http://mycdn/playlist.m3u8"},
			{type: "rtmp/mp4", src: "rtmp://mycdn"}
		]);
	}
Run Code Online (Sandbox Code Playgroud)

尽管控制台确实验证了 myVideo 是一个对象,但调用 .src(source) 函数会抛出“TypeError: myVideo.src is not a function. (In 'myVideo.src', 'myVideo.src' is undefined)”

我还发现了这样的教程,其中明显更“官方”的方法是完全处理玩家并使用新来源重新初始化,但我似乎无法理解他在做什么。https://ineed.coffee/3201/how-to-dynamically-change-video-js-videos-and-captions-with-javascript/

任何帮助,将不胜感激。


解决方案:出于测试目的,我只有一个漂亮的小下拉菜单,并为其添加了一个点击事件,因此它将频道更改为用户想要的任何内容。

var dropdown = document.getElementById('sel1');
var source = dropdown.options[dropdown.selectedIndex].value;

dropdown.addEventListener("click", function(){
source = dropdown.options[dropdown.selectedIndex].value;
console.log(source)

var myVideo = videojs('my-video');
console.log(myVideo);   
if (source == "Public Access"){
    myVideo.src([
        {type: "application/x-mpegURL", …
Run Code Online (Sandbox Code Playgroud)

javascript streaming http-live-streaming video.js

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

ffmpeg 将 rtp 转换为 mp4(http) 流

我想使用 ffmpeg 将 RTP 流转码为 MP4(HTTP) 流,所以我可以在 html 视频标签中播放,

但我只能成功转码为 flv 格式。

下面是我的设置:

[/etc/ffserver.conf]

...

<Feed feed1.ffm>
  File /tmp/feed1.ffm
  FileMaxSize 5M
  ACL allow localhost
</Feed>

<Stream flv>
  Feed feed1.ffm
  Format flv
  VideoFrameRate 40
  VideoBitRate 128
  VideoSize 1920x1080
  AVOptionVideo flags +global_header
  AudioBitRate 24
  AudioChannels 2
  AudioSampleRate 44100
  AVOptionAudio flags +global_header
</Stream>

<Stream mp4>
  Feed feed1.ffm
  Format mp4
  VideoFrameRate 40
  VideoBitRate 128
  VideoSize 1920x1080
  AVOptionVideo flags +global_header
  AudioBitRate 24
  AudioChannels 2
  AudioSampleRate 44100
  AVOptionAudio flags +global_header
</Stream>

<Stream avi>
  Feed feed1.ffm
  Format …
Run Code Online (Sandbox Code Playgroud)

video streaming ffmpeg rtp

5
推荐指数
1
解决办法
8599
查看次数

用于流媒体的 GCDWebServer

我试图从 iOS 设备上的远程服务器流式传输 mp4 视频。我不知何故[ERROR] Error while writing to socket 15: Broken pipe (32)在写了几篇之后得到 了。

不知道哪里错了。你能给点建议吗?

iOS 使用 GCDWebServer 重新路由请求(不重定向)

谢谢!饶

@property (nonatomic, strong) GCDWebServerBodyReaderCompletionBlock cb;

[_webServer addDefaultHandlerForMethod:@"GET"
                         requestClass:[GCDWebServerRequest class]
                         processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {

                             NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
                             self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]];

                             GCDWebServerStreamedResponse* response = [GCDWebServerStreamedResponse responseWithContentType:@"application/octet-stream" asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) {
                                 NSString * realURL = @"https://ia800309.us.archive.org/2/items/Popeye_Nearlyweds/Popeye_Nearlyweds_512kb.mp4";
                                 self.cb = completionBlock;
                                 NSURLSessionDataTask * dataTask = [self.session dataTaskWithURL:[[NSURL alloc] initWithString:realURL]] ;

                             }];
                             return response;
                         }];

(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask …
Run Code Online (Sandbox Code Playgroud)

streaming ios gcdwebserver

5
推荐指数
0
解决办法
2067
查看次数