这个问题非常普遍,因为我是 iOS、视频流和蓝牙方面的新手(这将是一个有趣的项目)。
基本上,我希望能够通过 WiFi 或蓝牙(具体取决于可用的设备)将低分辨率视频从一台 iOS 设备传输到另一台 iOS 设备。Bonjour 用于初始服务发现。(我知道通过蓝牙传输视频流并不理想,但这是该项目的要求之一)
因此,问题是可以使用什么视频流框架/库来最大化 WiFi 流视频和蓝牙流视频之间共享的代码量。
我有一个高清视频,正在流式传输到 iOS 应用程序。我希望允许用户能够限制最大流质量(低、中、高),考虑到以最大比特率流式传输时视频为几 GB。同样,出于明显的数据上限原因,我想自动选择基于蜂窝网络与 WiFi 连接的设置。
我可以通过访问 来获取当前比特率AVPlayerItemAccessLogEvent,但在强制使用较低质量的流时却迷失了方向。
这对于 HLS 来说是可能的吗?谢谢!
我试图让我的 Java 后端将视频文件(MP4 等)“流式传输”到浏览器。我担心我必须编写非常复杂的、低级的 NIO 类型代码,例如:
public class VideoController extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
File f = new File("/opt/videos/video19394.mp4");
PrintStream ps = resp.getWriter();
while(still reading f) {
writeTheVideoBytesToStream(f, ps);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但看起来这一切都是由 HTML5 元素解决的<video/>(是吗??)。这样,从客户端,我可以指定:
<video width="500" height="500" url="http://myapp.example.com/videos/19394" />
Run Code Online (Sandbox Code Playgroud)
然后,在服务器端,即使是像 一样简单的内容,我也可以指定 URL 请求(例如)和位于 的服务器上的 MP4 文件web.xml之间的映射。还有http://myapp.example.com/videos/19394/opt/videos/video19394.mp4<video/>元素只是自动处理事情。
我在这里是否正确,或者即使我使用了<video/>,我仍然需要在服务器上实现低级字节/套接字流内容?
我需要使用 gstreamer 广播 mpeg-ts 视频文件而不对其进行转码。视频编码为:H264 - MPEG-4 AVC(第 10 部分)(h264)
我尝试过使用
gst-launch-1.0 filesrc location=my_video.ts ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=49444
Run Code Online (Sandbox Code Playgroud)
和一起玩
gst-launch-1.0 udpsrc caps=" application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,payload=(int)96,ssrc=(uint)2674837201,clock-base=(uint)2959668548,seqnum-base=(uint)14300" port=49444 ! rtph264depay ! decodebin ! autovideosink
Run Code Online (Sandbox Code Playgroud)
但我在接收方的视频已损坏(但它仍然与原始视频有点相似):
并且接收者的控制台中出现了很多警告:
WARNING: from element /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0: Could not decode stream.
Additional debug info:
gstrtph264depay.c(1205): gst_rtp_h264_depay_process (): /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0:
Undefined packet type
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我猜问题出在elementcaps的参数上udpsrc,因为我刚刚从网络上的一些示例中复制粘贴了它。如果这是问题所在,我怎样才能找到正确的参数值caps?
在我的一个网站上,我使用 vimeo 视频链接来显示视频。现在我需要跟踪视频进度。例如学习者在该特定页面上花费的时间或用户观看视频的百分比。是否可以在 JavaScript 中跟踪这个
我正在尝试为 ExoPlayer 2 实现离线 DRM 支持,但遇到一些问题。
我找到了这段对话。ExoPlayer 1.x 有一些实现,以及如何将该实现与 ExoPlayer 2.x 一起使用的一些步骤。
我对使用OfflineDRMSessionManager哪个工具有疑问DrmSessionManager。在该示例中,DrmSessionManager 是从 ExoPlayer 1.x 导入的。如果我从 ExoPlayer 2 导入它,那么我在编译它时就会遇到问题。我的方法(open()、close()、..)有问题@Override,这些方法不在新的 DrmSessionManager 中,并且有一些新方法:acquireSession()、 ... 。
我是 Go 新手!
我正在做一个简单的测试,从 ffmpeg 读取输出并写入文件。
我知道我可以用不同的方式做到这一点,只需转换,但这是一个项目的开始,我想稍后操作读取的字节,更改它们,然后将它们发送到输出。输入将是 UDP,输出也将是 UDP,也就是说,我将得到 ffmpeg 输出,我将按照我希望的方式处理字节,然后将这些字节作为输入扔到另一个 ffmpeg 进程中,其输出为 UDP出色地。
通过这个简单的测试,文件的结果无法在 VLC 中运行,我相信我在输出文件中正确写入了字节,但输出文件始终比输入文件少 1MB。
我需要一些帮助来阐明编写我正在做的测试的最佳方法是什么,基于我可以离开这个地方。我不知道这是否完全错误,但我的印象是确实如此。
输入文件是 4K、h264 的视频,我相信输出应该是相同的,因为在这个简单的测试中,我只是读取文件中写入的 cmd 中的内容。
按照代码进行分析:
package main
import (
"os/exec"
"os"
)
func verificaErro(e error) {
if e != nil {
panic(e)
}
}
func main() {
dir, _ := os.Getwd()
cmdName := "ffmpeg"
args := []string{
"-hide_banner",
"-re",
"-i",
dir + "\\teste-4k.mp4",
"-preset",
"superfast",
"-c:v",
"h264",
"-crf",
"0",
"-c",
"copy",
"-f", "rawvideo", "-",
}
cmd := exec.Command(cmdName, args...)
stdout, …Run Code Online (Sandbox Code Playgroud) 我对 MPEG-DASH 自适应流媒体完全陌生。我正在尝试在浏览器中创建一个视频播放器dash.js。我参考了一些有用的MPEG-DASH Adaptive Streaming文档。这些链接是
通过上述文档,我创建了一个示例 HTML 文件。
<!DOCTYPE html>
<html>
<head>
<title>Adaptive Streaming in HTML5</title>
<style>
video {
width: 640px;
height: 360px;
}
</style>
</head>
<body>
<div>
<h1>Adaptive Streaming with HTML5</h1>
<video id="videoplayer" controls></video>
<div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<!-- DASH-AVC/265 reference implementation -->
<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>
<script>
<!--setup the video element and attach it to the Dash player-->
(function(){
var url = "https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd";
var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), url, true);
})();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但运行 …
我正在尝试将 opencv 帧流式传输到浏览器。经过研究,我发现了米格尔的教程: https://blog.miguelgrinberg.com/post/video-streaming-with-flask/page/10
让我分解一下我想要实现的目标:在主页上,我尝试使用 opencv 实时流式传输 opencv 帧,在另一个页面上,我需要使用网络摄像头拍照。
问题:使用 Miguel 流式传输到浏览器的方式,启动无限线程,在这种情况下,当我想在另一页上拍照时不会释放相机。切换回主页时,出现以下错误:
视频错误:V4L2:OpenCV 不支持传入图像的像素格式无法
停止流:设备或资源繁忙
视频流已启动
OpenCV(3.4.1) 错误:断言失败 (scn == 3 || scn == 4) cvtColor,文件 /home/eli/cv/opencv-3.4.1/modules/imgproc/src/color.cpp,第 11115
行 调试中间件在已发送响应标头的点捕获流响应中的异常。
这是我的代码:
detect_face_video.py
Run Code Online (Sandbox Code Playgroud)
这是我进行人脸识别的地方
# import the necessary packages
from imutils.video import VideoStream
import face_recognition
import argparse
import imutils
import pickle
import time
import cv2
from flask import Flask, render_template, Response
import sys
import numpy
from app.cv_func import draw_box
import redis
import datetime
from app.base_camera import BaseCamera
import os
global red …Run Code Online (Sandbox Code Playgroud) 我已经成功实现了ReplayKit。
SampleHandler.swift
class SampleHandler: RPBroadcastSampleHandler {
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
}
override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
switch sampleBufferType {
case RPSampleBufferType.video:
break
case RPSampleBufferType.audioApp:
break
case RPSampleBufferType.audioMic:
break
@unknown default:
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题 :
我正在 swift 中使用适用于移动设备的 WebRTC SDK。我的 WebRTCClient 文件。
final class WebRTCClient: NSObject {
// The `RTCPeerConnectionFactory` is in charge of creating new RTCPeerConnection instances.
// A new RTCPeerConnection should be created every new …Run Code Online (Sandbox Code Playgroud)