我正在为树莓派相机使用各种视频流选项。目前具有最低延迟的最佳解决方案是将数据从raspividto管道传输nc到mplayer
在覆盆子上:
/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 不是一个选项)
我正在开发一个项目,该项目要求我将音频从麦克风从客户端流式传输到服务器。下面显示的代码是我写的。当我同时运行客户端和服务器代码时,音频不会实时流式传输。事实上,来自客户端的音频存储在缓冲区中,当我终止客户端代码的执行时,来自服务器缓冲区的音频输出到扬声器。我究竟做错了什么?(我正在日食上开发)
服务器:
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) 我是 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) 我有以下设置:一个 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 处理流?
我知道我可能应该使用 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 技术仍然有效,但是,在我的情况下,防病毒软件以不可预见的方式阻碍了事情的发展,因此请确保在不同的计算机和安全模式下进行测试,以确保它是否不起作用!
Api 有一个我需要设置的令牌标头,但视频未加密。我有两个问题:如何使用 exoplayer 从磁盘播放 .mpg、.mpeg、.3gp、.mov 和其他文件?如何使用 exoplayer 设置标题并从 url 流式传输 mp4 视频?
嗨,我有一个实时流媒体代码,我在本地主机上流式传输我的网络摄像头。
这是我的流文件代码
<?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 不适合我的目的。我在这一点上需要帮助。我该怎么办?
我希望动态更改 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) 我想使用 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) 我试图从 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)