我正在读取一个以字节为单位的视频文件数据并将其发送到另一个文件,但收到的视频文件无法正常播放并且断断续续。
谁能解释一下为什么会发生这种情况,并感谢解决方案。
我的代码如下
import java.io.*;
public class convert {
public static void main(String[] args) {
//create file object
File file = new File("B:/music/Billa.mp4");
try
{
//create FileInputStream object
FileInputStream fin = new FileInputStream(file);
byte fileContent[] = new byte[(int)file.length()];
fin.read(fileContent);
//create string from byte array
String strFileContent = new String(fileContent);
System.out.println("File content : ");
System.out.println(strFileContent);
File dest=new File("B://music//a.mp4");
BufferedWriter bw=new BufferedWriter(new FileWriter(dest));
bw.write(strFileContent+"\n");
bw.flush();
}
catch(FileNotFoundException e)
{
System.out.println("File not found" + e);
}
catch(IOException ioe)
{
System.out.println("Exception while reading the …Run Code Online (Sandbox Code Playgroud) 我正在编码 H264 并使用 RTP 从我的 Android 设备作为实时流发送到 Wowza 服务器。编码器的输出在设备上看起来很好。然而,在流式传输到 Wowza 服务器并通过 RTMP 以实时流形式查看输出视频后,我在视频中出现显着移动/变化的部分中发现了相当多的伪影/像素化。我只能猜测这与视频帧的时间有关,但我没有一个好的方法来确定这是在我的应用程序的发送端还是在 Wowza 端。
Wowza,如果你曾经试图获得他们的支持,那是完全没有用的。
我还遇到了从 Wowza 播放时 RTMP/Flash 播放器冻结的问题。我非常确定这不是带宽问题,因为这种情况发生在 Amazon EC2 服务器以及我的本地 PC 实例(即同一网络)上。我尝试了多个播放器,它们都表现出相同的问题(VLC、JWPlayer、MX Player 等)。我必须假设问题出在 Wowza 服务器或我的编码上。然而,由于某些帧存在像素化问题,我开始怀疑两者是否相关。
我很好奇是否有人在使用 Wowza 或任何其他流服务器时遇到过类似的像素化问题。我尝试使用 RTMPDump 但这不起作用,它永远不会从 Wowza 中提取完整的数据包。
我已经创建了 rtsp/h264/mjpeg 服务器。效果很好。但现在我必须查询每个新连接的客户端。例如,我必须从客户端查询获取请求的分辨率:rtsp://192.116.10.20:8554/stream?width=1920&height=1280
我尝试使用以下代码来做到这一点:
....
gulong clientConnectedConfigureId = g_signal_connect(m_server, "client-connected", (GCallback)ClientConnected, this);
....
static void ClientConnected(GstRTSPServer *gstrtspserver, GstRTSPClient *arg1, gpointer user_data)
{
GstRTSPConnection *connection = gst_rtsp_client_get_connection(arg1);
if(!connection)
{
return;
}
GstRTSPUrl *uri = gst_rtsp_connection_get_url(connection);
if(!uri)
{
return;
}
gchar *urlString = gst_rtsp_url_get_request_uri (uri);
std::stringstream ssTemp;
ssTemp << "ClientConnected - urlString = " << urlString;
InternalLog::Debug(ssTemp.str());
g_free(urlString);
}
Run Code Online (Sandbox Code Playgroud)
GstRTSPUrl 包含以下成员: //rtsp[u]://[user:passwd@]host[:port]/abspath[?query]
通过查询 rtsp://192.116.10.20:8554/stream?width=1920&height=1280 从 VLC 连接后,结果如下:
ClientConnected - urlString = rtsp://192.116.10.20:61099(null)
GstRTSPUrl 仅包含主机=192.116.10.20 和端口=61099。其他字段如“abspath”或“query”等于 NULL。
在 netstat 实用程序中,我看到端口 61099 是 VLC …
我希望能够打开/关闭会话中用户的音量。例如,在3人的集体面试中,我应该能够在说话时降低其中一个人的声音。或者当有人发出嘶嘶声时,我应该能够缩短它并在必要时重新打开它。我查看了 Tokbox 的文档,只看到了 2 种调节方法。
(https://tokbox.com/developer/guides/moderation/js/)
首先是强制用户断开连接,
第二种是中断用户的广播(在这种情况下我无法将用户链接回广播)。
我想在 WINdows 10 下开发一个桌面应用程序来操作 USB 摄像头并捕获帧以进行图像处理。我想留在 Windows 框架内,但有很多选择。困扰我的是选择正确的技术。如果在 W10 开发中,DirectShow SDK 和 DirectX SDK 之间有什么区别?
我有以下代码可以在我的 Google Chrome 浏览器中流式传输连接的视频源。WebRTC 的getUserMedia就是这样做的。以下代码片段用于配置我的外部相机设备的分辨率和帧速率。
function configureVideo()
{
const video_constraints ={};
//Create the following keys for Constraint
video_constraints.video = {};
//set camera name
video_constraints.video.deviceId = {};
video_constraints.video.deviceId.exact = <device_id_comes_here>
//set resolution Width
video_constraints.video.width = {};
video_constraints.video.width.exact = 640;
//set resolution height
video_constraints.video.height = 480;
video_constraints.video.height.exact = streamHeight;
//set fps
video_constraints.video.frameRate = 60;
video_constraints.video.frameRate.exact = streamFps;
console.log("Selected Contraints is :", video_constraints);
navigator.mediaDevices.getUserMedia(video_constraints).then(streamCallback).catch(handleError);
}
Run Code Online (Sandbox Code Playgroud)
是的,我成功地从我的外部相机设备流式传输视频。相机提供 2 种类型的帧格式 YUYV 和 BY8。但我真的不知道当前正在流式传输什么帧格式。
有什么方法可以在 WebRTC 中配置我感兴趣的视频帧格式。
如何使用 FFMPEG 为从(v4l2)网络摄像头发送到媒体服务器的流添加延迟?
这里的用例类似于安全摄像头,当在视频中检测到某些内容时,我希望能够将视频流式传输到服务器。确保在视频中捕获感兴趣的事件的最简单方法是使用 FFMPEG 将视频从摄像机流式传输到具有附加延迟的虚拟环回设备。然后,当发生感兴趣的事件时,该环回设备可用于启动实时流媒体。
在 GStreamer 中,我将使用queue元素的min-threshold-time参数完成此类延迟。例如,以下(大大简化的)示例管道在显示之前为来自 v4l2 网络摄像头的输出添加了 2 秒延迟:
gst-launch-1.0 v4l2src device=/dev/video1 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=2000000000 ! xvimagesink
我如何用 FFMPEG 完成同样的事情?有一些技术挑战阻止我们为此使用 GStreamer。
我已经调查了这个itsoffset选项,但据我所知,它仅可用于已录制的文件,目前尚不清楚什么是好的替代方案。
我开始尝试使用 ESP32-CAM。演示 Arduino camserver 脚本与人脸识别等配合得很好,但现在我正在尝试实现一些有用的东西。
我知道这里的示例设法在面部识别期间以某种方式将文本覆盖到视频源上,但我不知道如何将此功能实现到像这样的更简单的流代码上。
我将如何在此示例中进行文本叠加?
/*********
Rui Santos
Complete project details at https://RandomNerdTutorials.com
IMPORTANT!!!
- Select Board "ESP32 Wrover Module"
- Select the Partion Scheme "Huge APP (3MB No OTA)
- GPIO 0 must be connected to GND to upload a sketch
- After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
Permission is hereby granted, free of charge, to any person obtaining a copy …Run Code Online (Sandbox Code Playgroud) 我有一个 mp4 视频,已上传到 Azure Blob 存储(块、存储 v2)。我无法使用<video>标签提供视频而不会出现播放延迟,因为视频已从服务器完全下载(带有 200 响应状态代码)。
(更糟糕的是,虽然与我的问题不完全相关,因为我认为这更多是浏览器问题,但视频设置为循环,并且每次循环都会重新下载。)
相反,我想使用部分内容范围来流式传输视频,以便立即开始播放。
我尝试直接获取视频,为<video>标签src属性提供绝对 URI;我还尝试通过 ASP .NET Core 3.1 控制器方法提供视频,返回 aFileStreamResult并将enableRangeProcessing参数设置为true. 这是该代码:
public async Task<IActionResult> GetVideo(string videoUrl)
{
var httpClient = new HttpClient();
var stream = await httpClient.GetStreamAsync(videoUrl);
return File(stream, new MediaTypeHeaderValue("video/mp4").MediaType, true);
}
Run Code Online (Sandbox Code Playgroud)
似乎无论我尝试什么,我都无法获得带有 206 状态代码的范围响应。我已经看到了有关使用 Azure 媒体服务的建议,但这似乎有点矫枉过正,这应该是只需支持而无需合并其他服务的东西。
任何帮助/建议将不胜感激 - 谢谢!
c# video-streaming html5-video azure-blob-storage asp.net-core-3.1
您好,感谢您的阅读,
我有一个带有 m3u8 播放列表的 Hls 流。视频在带有 Video 元素和https://github.com/video-dev/hls.js的 Html 页面上播放得很好
但如果我下载片段来加入它们,它们只是白色像素。VLC 和 FFmpeg 无法处理它们。VLC 显示白色像素 10 秒,FFmpeg 表示文件中没有流。
所以现在我想知道这个 hls.js 正在做什么以使其运行。对于我这个非 js 开发人员来说,这一切看起来有点令人困惑。我能够理解诸如加载新段时调用哪个函数之类的内容。不幸的是,我无法理解有关数据的内容。单字符变量让我感到困惑。
目前,我捕获视频元素的流并稍后下载,但我根本不喜欢这个解决方案。
如何帮助我
如果有人能告诉我如何连接脚本并告诉它直接下载到磁盘,这样我就不会受到帧率下降的影响,那就太好了。
如果有人能告诉我脚本如何转换数据,以便元素可以使用它,并且我能够使用 FFmpeg 实现或执行此操作,那将非常有帮助。
我还认为,当 blob 发生更改以存储其内容时,可能会有一个侦听器。
感谢大家的帮助。我现在花了太多时间试图找到解决方案。
javascript ffmpeg video-streaming http-live-streaming hls.js
video-streaming ×10
ffmpeg ×2
gstreamer ×2
javascript ×2
android ×1
arduino ×1
c# ×1
c++ ×1
copy ×1
directshow ×1
directx ×1
esp32 ×1
file ×1
file-io ×1
framebuffer ×1
getusermedia ×1
hls.js ×1
html5-video ×1
java ×1
opentok ×1
overlay ×1
rtmp ×1
rtp ×1
rtsp ×1
streaming ×1
tokbox ×1
v4l2loopback ×1
webrtc ×1
wowza ×1