[已解决] - 最终编辑中的解决方案我正在使用 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 已被检查,只要脚本在直播结束前停止,一切都会正常。
任何建议都将受到高度赞赏 …
我有一个提供 UDP 视频流的光学系统。
来自设备规格常见问题解答:
单一元数据 (KLV) 流和带有元数据 (KLV) 的压缩视频 (H.264) 均可在以太网链路上使用。压缩视频和元数据耦合在符合 STANAG 4609 标准的同一流中。每个编码视频流都与相关元数据封装在以太网 UDP/IP/ 上的 MPEG-TS 单节目流中。视频和元数据通过使用时间戳进行同步。
还有其他设备提供有关飞机状态的数据(速度、坐标等)。该数据应与视频一起显示在客户端 GUI 显示屏上。当然它必须与当前视频帧同步。
我想到的方法之一是将这些数据嵌入到视频流中。但我不确定是否可能或者我应该使用其他(UDP 之外)协议来实现此目的。
使用这种方法是否可能/合理?ffmpeg 库适合这种情况吗?如果没有,还有哪些其他方法可以将数据与视频帧同步。延迟至关重要。尽管带宽限制为 2-5 Mbps。
使用 ffmpeg 似乎是可能的:AVPacket可以使用av_packet_add_side_data需要预先分配的缓冲区、大小和类型的函数来提供附加数据AVPacketSideDataType。但是,我现在不确定哪个枚举值可AVPacketSideDataType用于自定义用户提供的二进制数据。
类似的东西可能会满足我的需求:
我想从 ffmpeg 流中获取单独的视频和单独的音频对象(python)
\n为此,我在我的 rasbery pi 上运行它:
\nffmpeg -f alsa -thread_queue_size 1024 -channels 1 -i hw:2,0 -thread_queue_size 1024 -s 1920x1080 -i /dev/video0 -listen 1 -f matroska -vcodec libx264 -preset veryfast -tune zerolatency http://:8080\nRun Code Online (Sandbox Code Playgroud)\n从服务器端,我像这样连接到流。我知道如何从这个数据包对象中获取声音,但我不\xe2\x80\x99不明白如何从数据包对象中获取视频帧?我想将视频流呈现为逐个图片和单独的声音,以便在程序中进行音频和视频处理。
\n process = (\n ffmpeg.input("http://192.168.1.78:8080").output(\n '-',\n format='matroska',\n acodec='libvorbis',\n vcodec='libx264'\n ).run_async(pipe_stdout=True, pipe_stderr=True)\n )\n while process.poll() is None:\n packet = process.stdout.read(4096)\nRun Code Online (Sandbox Code Playgroud)\n使用python 3.9 ffmpeg-python==0.2.0
\nPS\n本质上我需要为每个包提供一个视频数组和单独的音频。
\n我想知道 Agora 和 Webrtc 之间的真正区别?我怎么知道 Agora 为你提供了不同平台的视频、音频通话、聊天的 SDK 并相应收费,每月免费提供 10,000 分钟,超出则收费,Webrtc 是一种 Web 实时通信,为你提供不同的服务在您的应用程序或网络中实施 API 以免费且无限制地提供视频、音频或聊天?我对吗?如果是的话,为什么人们在拥有免费的 WebRTC 并可以长时间无限地进行音频视频通话和聊天时还要使用 agora 并付费呢?请指导您的帮助将不胜感激
我对 WebRTC 不太了解,请帮助我,提前致谢
我想从时间戳开始一个嵌入式YouTube视频.我知道如何在浏览器上执行此操作,但这似乎不适用于iPhone.这是MATT CUTTS的详细教程.
在上面的链接中你可以看到我们是否在url中附加了#t = 31m08s或&start = 200但是当我在UiWebView中使用相同的url时,默认的youtube播放器从第一帧开始播放视频.任何人都可以有想法或已实现相同.我正在使用带有嵌入标签的UIWebView来播放YouTube视频.我在UIWebView中使用下面的embed标签.
<embed id="yt" src="http://www.youtube.com/watch?v=dsFQ9kM1qDs" type="application/x-shockwave-flash" width= "500" height="400"></embed>
Run Code Online (Sandbox Code Playgroud)
下面是我用来在UIWebView中播放此视频的代码
- (IBAction) playYoutube {
[self embedYouTube:@"http://www.youtube.com/watch?v=dsFQ9kM1qDs#t=2m08s"];
}
- (void)embedYouTube:(NSString*)url
{
[webView setFrame:CGRectMake(0, 0, 480, 320)];
NSString* embedHTML = @"\
<html><head>"
"<style type=\"text/css\">"
"body {"
"background-color: transparent;"
"color: white;"
"} </style>"
"</head><body style=\"margin:0\">"
" <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" "
"width=\"%0.0f\" height=\"%0.0f\"></embed>"
" </body></html>";
NSString* html = [NSString stringWithFormat:embedHTML, url, webView.frame.size.width, webView.frame.size.height];
[webView loadHTMLString:html baseURL:nil];
}
Run Code Online (Sandbox Code Playgroud) 我有一个带视频的iframe,例如:
<iframe src="http://player.vimeo.com/video/18150336" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)
来源并不总是vimeo,它可以是YouTube,BrightCove,Hulu等.
有没有办法使用jQuery/JavaScript在视频中的某个时间"寻找"?例如,如果我想在视频内部进入3:41,我是否可以编写代码来自动寻找那些没有API访问提供视频的网站的时间?
我在Amazon Web Services EC2/S3上有一个iOS应用程序和Django后端.目前的流程:
目标: 我的目标是在此处使用HTTP直播(HLS).
有人可以提供有关如何更改当前工作流以获取S3上的HLS文件(.M3U8和.TS)以允许流式传输的建议吗?谢谢.
在应用程序中,我使用了AVCaptureVideo。我获得了kCVPixelFormatType_420YpCbCr8BiPlanarFullRange格式的视频。
现在我从imagebuffer获得y平面和uv平面。
CVPlanarPixelBufferInfo_YCbCrBiPlanar *planar = CVPixelBufferGetBaseAddress(imageBuffer);
size_t y-offset = NSSwapBigLongToHost(planar->componentInfoY.offset);
size_t uv-offset = NSSwapBigLongToHost(planar->componentInfoCbCr.offset);
Run Code Online (Sandbox Code Playgroud)
这里yuv是双平面格式(y + UV)。
什么是紫外线平面?是uuuu,yyyy格式还是uvuvuvuv格式?如何分别获得u平面和y平面?
有人可以帮助我吗?
首先,对不起我的英语不好。我正在用C ++编写视频流服务器。我有多个mpeg2-ts文件(电影和广告),我需要通过HTTP将它们作为一个TS-FILE进行流式传输。问题在于每个mpeg-ts文件都有其自己的时间戳(PCR,PTS,DTS)。而且,据我所知,为了产生连续的流,每个新的PCR(PTS,DTS)值都应从上一个PCR(PTS,DTS)值开始继续。
这是一张图片,可以更好地理解我的意思:http : //i.stack.imgur.com/vL1m6.png(我不能直接在消息中包含我的图片。对不起)
我需要用新的替换pcr`1,pcr`2,pcr`3时间戳。例如,我发送了包含pcr3时间戳的ts-packet,然后再发送了几个ts数据包(不包含任何PCR值)之后,我想插入广告。我的问题是:如何计算pcr`1,pcr`2,pcr`3等的新值?
计算当前视频的比特率,然后将自上一个PCR时间戳(在本例中为pcr3)以来,程序已发送的位数除以该比特率是否正确?我的意思是:(新时间戳)=(上一个时间戳)+(位数)/(比特率)。还是有更有效的方法来做到这一点?
至于PTS和DTS时间戳,我在这里读到这些时间戳可以是非线性的。相对于我收到的最后一个原始PCR计算它是否正确?我的意思是:
pts_new = (original_pts - last_original_pcr) + pcr_new.
dts_new = (original_dts - last_original_pcr) + pcr_new.
(original_pts - last_original_pcr) is the difference between pts and pcr values
pcr_new is the last modified pcr value
Run Code Online (Sandbox Code Playgroud)
我的程序可以读取和编辑mpeg-ts流中的这些时间戳。幸运的是,关于如何执行此操作的文献很多。但是,如何计算这些时间戳的新值?
我刚刚开始学习mpeg2-ts的规范,如果我在某些方面有误,请更正我的错误。提前致谢。希望你理解我。
我正在研究一个星期,找到一个简单且独立于平台的方法来将mp4文件流式传输到任何浏览器.在浏览器不兼容的情况下,将使用渐进流(直接下载)方法.我的情况是这样的:
在研究Apple HLS,Adobe Flash Stream,Microsoft Smooth,RTSP和MPEG-DASH之后,似乎MPEG-DASH是正确的解决方案.但问题是MPEG-DASH迫使我将mp4文件拆分为单独的分段文件,这导致存储mp4文件的重复消耗空间,因为在浏览器不兼容的情况下我必须支持渐进式流.然后存储带有分段mp4文件的单个mp4文件是不可避免的.
问题是:有没有办法在任何浏览器中将单个 mp4文件作为http流和渐进流提供?
MPEG-DASH协议表示它支持多路复用文件,但问题是dash.js不支持它.有没有其他javascript播放器支持带字节范围请求的多路复用和单个mp4文件?
任何其他提交我的场景条件的解决方案都受到欢迎.谢谢.
参考文献: BitCodin.com 1 BitCodin.com 2
video-streaming ×10
ffmpeg ×3
video ×3
audio ×2
c++ ×2
javascript ×2
agora.io ×1
avfoundation ×1
dash.js ×1
html5 ×1
html5-video ×1
http ×1
ios ×1
ipad ×1
iphone ×1
jquery ×1
mpeg ×1
mpeg-dash ×1
mpeg2-ts ×1
objective-c ×1
python ×1
rtmp ×1
webrtc ×1
youtube ×1