我有录制应用程序实现,用户可以点击"录制"按钮开始/停止录制.我有一个基本的实现这一目标GPUImageVideoCamera具有输出设置为一个GPUImageView,以及一个GPUImageMovieWriter.
50%的时间,录制的剪辑最终会在两端都有一对(或单个)黑框,有时两者都是.实现相当简单,但无论如何都是这样.
gpuImageView = [[GPUImageView alloc] initWithFrame:cameraView.frame];
gpuImageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
[cameraView addSubview:gpuImageView];
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:(usingBackCamera) ? AVCaptureDevicePositionBack : AVCaptureDevicePositionFront];
[videoCamera addTarget:gpuImageView];
[videoCamera addTarget:movieWriter];
videoCamera.audioEncodingTarget = movieWriter;
[videoCamera startCameraCapture];
double delayToStartRecording = 0.5;
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC);
dispatch_after(startTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Start recording");
[movieWriter startRecording];
});
Run Code Online (Sandbox Code Playgroud)
然后使用以下内容停止录制(同时现场摄像机继续显示GPUImageView.
[movieWriter finishRecording];
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这个和/或找到了避免黑框的解决方案?我无法暂停/恢复摄像头捕获,以确保无缝的用户体验.
我是 gstreamer 的新手,我想录制音频和视频并将其保存为 .mp4 格式,使用网络摄像头录制视频并使用 MIC 录制音频这是我的管道
gst-launch-1.0 -e v4l2src !队列 !x264enc!h264解析!队列 !qtmux0。阿尔萨斯RC!'音频/x-raw,速率=44100,深度=24'!音频转换!音频重采样!沃阿森克!aacparse!qtmux!文件接收器位置=test.mp4
当我执行它时,视频仅录制 10 秒,音频甚至没有录制,它给出了一些消息,例如
警告:来自元素 /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:无法足够快地录制音频附加调试信息:gstaudiobasesrc.c(866):gst_audio_base_src_create():/GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:删除了 425565 个样本。这很可能是因为下游无法跟上并且消耗样本太慢。
帮助我克服这个问题提前谢谢你
[已解决] - 最终编辑中的解决方案我正在使用 ffmpeg 录制 rtmp 直播流,并希望添加一个标志,该标志将在新数据停止到达时自动停止处理。
如果我启动和停止脚本(通过按需终止进程来停止),一切都很好,录音将被保存并可以播放。但是,当在没有手动调用 STOP 的情况下从源停止流时,脚本仍将运行一段时间,并且生成的文件将被损坏(使用手动停止调用进行测试 - 有效,并在录制之前停止流,模拟浏览器/选项卡关闭或断开连接 - 失败)
我正在运行的命令
$command = "ffmpeg -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null 2>/dev/null &";
$res = shell_exec($command)
Run Code Online (Sandbox Code Playgroud)
我尝试在输入之前和之后添加 -timeout 0 选项,如下所示
$command = "ffmpeg -timeout 0 -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null 2>/dev/null &";
Run Code Online (Sandbox Code Playgroud)
和
$command = "ffmpeg -i {$rtmpUrl} -c:v copy -c:a copy -timeout 0 -t 3600 {$path} >/dev/null 2>/dev/null &";
Run Code Online (Sandbox Code Playgroud)
但没有任何改善。
我在这里缺少什么?当新数据停止从直播中产生时,有什么方法可以自动停止脚本(意味着流停止并且录制也应该停止)。
注意 $rtmpUrl 和 $path 已被检查,只要脚本在直播结束前停止,一切都会正常。
任何建议都将受到高度赞赏 …
我目前正在寻找如何完成我被告知可能的事情.
我被告知我们可以使用vlc在linux中流式传输网络摄像头,这将允许以下内容:
我已经研究了很长一段时间,但却找不到可行的解决方案.
我可以使用VLC录制视频,但以下内容
vlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout "#transcode{vcodec=mpeg4,acodec=mpga,vb=800,ab=128}:standard{access=file,dst=capture_4.avi}"
Run Code Online (Sandbox Code Playgroud)
这真的有可能吗?
我在iPhone录制视频我希望获得录制的录制持续时间.有没有办法获得录制的视频持续时间.
这是我获取录制视频和路径的代码.
if ([type isEqualToString:(NSString *)kUTTypeVideo] || [type isEqualToString:(NSString *)kUTTypeMovie])
{
NSURL*videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
videoData = [[NSData dataWithContentsOfURL:videoURL] retain];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"dd-MM-yyyy_HH:mm:SS"];
NSDate *now = [[[NSDate alloc] init] autorelease];
NSDate* theDate = [dateFormat stringFromDate:now];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];
NSString*testUser=TitleTextField.text;
NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,testUser]] autorelease];
BOOL success = [videoData …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MediaRecorder在Android中创建视频录像机,用户可以选择录制静音视频,即录制没有音频的视频.我检查了是否有任何选项来记录Android中的静音视频和经过大量搜索我没有得到任何完美的方法来做到这一点,我尝试了下面的AudioManager方法:
audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
audioManager.setMicrophoneMute(true);
audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE)
Run Code Online (Sandbox Code Playgroud)
但他们都没有为我工作.
任何人都可以帮助我解决这个问题.
谢谢 !!!
I am currently doing a motion detection project that records down video when motion is detected. Right now there is no error when recording the video but when i check on the video, it is 0 bytes. Any help would be very much appreciated.
This is my code:
camera = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480))
Run Code Online (Sandbox Code Playgroud) 我正在用opencv制作一个小的“ Dashcam”。我想创建一个以当前日期和时间命名的新视频文件的每一分钟都很简单。这些视频文件的内容是网络摄像头的框架。
但是,经过第一分钟后,不再生成视频文件。
这是我的注释代码:
#include <iostream>
#include <windows.h>
#include <ctime>
#include <time.h>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int record_video()
{
VideoCapture cam(0);
if (!cam.isOpened())
{
cout << "Error from webcam" << endl;
return -1;
}
time_t t = time(0);
struct tm* now = localtime( & t );
char buffer[80];
strftime(buffer, 80, "%F_%Hh%M.wmv", now); //get the date and time for my file
VideoWriter video(buffer, CV_FOURCC('W', 'M', 'V', '2'), 30, Size(640, 480), true); //Creation of …Run Code Online (Sandbox Code Playgroud) 我创建了一个带有视频元素的 HTML5 页面。播放示例视频。在我尝试在视频元素中记录流之后。我正在使用 RecordRTC 库来实现录制功能。我有以下代码
var stream = document.getElementById("my_video").captureStream();
var recorder = RecordRTC(stream, {
type: 'video'
});
recorder.startRecording();
Run Code Online (Sandbox Code Playgroud)
录制在 Chrome 浏览器和 Mozilla 浏览器上成功运行,直到版本 57。但在去年 1 月,Mozilla 浏览器更新到版本 58。此更新后,尝试使用 Mozilla 录制视频时出现错误。
错误信息是:
TypeError
message: document.getElementById("my_video").captureStream is not a function"
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
ReplayKit最近真的让我很沮丧。因为某些原因
RPScreenRecorder.shared().startCapture(handler: { (sample, bufferType, error) in
Run Code Online (Sandbox Code Playgroud)
当我调用它时实际上不起作用,因为我在其中有一个print()语句并且它从未被调用过。
我的代码ViewController是:
import UIKit
import AVFoundation
import SpriteKit
import ReplayKit
import AVKit
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, RPPreviewViewControllerDelegate {
var assetWriter:AVAssetWriter!
var videoInput:AVAssetWriterInput!
func startRecording(withFileName fileName: String) {
if #available(iOS 11.0, *)
{
assetWriter = try! AVAssetWriter(outputURL: fileURL, fileType:
AVFileType.mp4)
let videoOutputSettings: Dictionary<String, Any> = [
AVVideoCodecKey : AVVideoCodecType.h264,
AVVideoWidthKey : UIScreen.main.bounds.size.width,
AVVideoHeightKey : UIScreen.main.bounds.size.height
];
videoInput = AVAssetWriterInput (mediaType: AVMediaType.video, outputSettings: videoOutputSettings)
videoInput.expectsMediaDataInRealTime = true
assetWriter.add(videoInput) …Run Code Online (Sandbox Code Playgroud) video-recording ×10
avfoundation ×2
html5-video ×2
opencv ×2
android ×1
audio ×1
avkit ×1
c ×1
c++ ×1
ffmpeg ×1
gpuimage ×1
gstreamer ×1
html ×1
ios ×1
iphone ×1
javascript ×1
objective-c ×1
python ×1
recordrtc ×1
replaykit ×1
rtmp ×1
swift ×1
ubuntu ×1
video ×1
vlc ×1