我在我的应用程序中使用 HLS 流,我正在使用 AVPlayer。现在我想使用 AVAsset 获取视频轨道的比特率。虽然我添加了观察者和其他东西,但我的轨道数组总是空的。我是在正确的轨道上还是遗漏了什么?
我有一个来自 IP cam 的传入 mjpeg 流。现在我可以使用 ffmpeg 和 openGL 显示它,但是当我尝试将所有传入的流保存到一个文件中并稍后播放时,播放器(VLC)无法打开该文件。
有人告诉我,我需要在开始/停止录制时添加一些标题,让播放器知道文件的格式。但我找不到关于这个主题的任何参考。任何人都可以分享有关此主题的示例吗?
我通过 ffmpeg 使用了 hls 流。
在开始流延迟存在几秒钟。
当我想在非常延迟的情况下从流中的 4k 视频中进行串流时。
我能做什么?
我是 GSTreamer 的新手。我尝试使用 GStreamer 上传视频。在运行以下命令时,
gst-launch-1.0 videotestsrc !udpsink 端口=5200
我收到如下警告。
WARNING: from element /GstPipeline:pipeline0/GstUDPSink:udpsink0: Attempting to send a UDP packets larger than maximum size (115200 > 65507)
Additional debug info:
gstmultiudpsink.c(715): gst_multiudpsink_send_messages (): /GstPipeline:pipeline0/GstUDPSink:udpsink0:
Reason: Error sending message: A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.
0:00:56.934530706 4912 0000000002F09640 WARN multiudpsink gstmultiudpsink.c:715:gst_multiudpsink_send_messages:<udpsink0> warning: Attempting …Run Code Online (Sandbox Code Playgroud) 我已修改h264_encoder_impl为使用基于 nvidia 网格的硬件编码器。这是通过用 Nvidia API 调用替换 OpenH264 特定调用来完成的。编码流可以成功写入文件,但写入_buffer和_size的encoded_image_还不够,RTPFragmentationHeader还需要填充。
// RtpFragmentize(EncodedImage* encoded_image,
// std::unique_ptr<uint8_t[]>* encoded_image_buffer,
// const VideoFrameBuffer& frame_buffer,
// SFrameBSInfo* info,
// RTPFragmentationHeader* frag_header)
// encode
openh264_->Encode(input, &info /*out*/);
// fragmentize ?
RtpFragmentize(&encoded_image_ /*out*/, &encoded_image_buffer_, *frame_buffer,
&info, &frag_header /*out*/);
// ...
// send
encoded_image_callback_->OnEncodedImage(encoded_image_, &codec_specific, &frag_header);
Run Code Online (Sandbox Code Playgroud)
当前Openh264根据实施填充frag_header在RTPFragmentize()和VP8不同填充它。我可以看到 NAL 单元和层也计算的东西,encoded_image->_length但我不知道如何。
我在任何地方都找不到关于它的任何文档。我只有 VP8 和 OpenH264 实现。
那么什么是RTPFragmentationHeader?它有什么作用?什么是encoded_image->_length?使用自定义H264编码器时如何正确填充?我可以找到 startcode 但接下来呢?如何填满它的所有成员?
我通过 ffmpeg 开始视频传输,如下所示:
ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast -crf 20 -tune zerolatency -s 800x600 -r 25 -b:v 0.9M -sdp_file video.sdp -f rtp rtp://192.168.10.24:5010
Run Code Online (Sandbox Code Playgroud)
我以这种方式重现:
ffplay -protocol_whitelist file,udp,rtp video.sdp
Run Code Online (Sandbox Code Playgroud)
一切正常。然后我中断传输,几秒钟后我恢复。ffplay 不会立即开始重现但出现错误:
....
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
Last message repeated 14 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
Last message repeated 33 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
Last message …Run Code Online (Sandbox Code Playgroud) 到目前为止,我一直在使用https://videogular.github.io/videogular2/docs/在我的应用程序中播放我的自定义视频,但最近当我尝试播放源为 youtube 和 vimeo 的视频时,此插件不支持它。
是否有更好的开源替代方案可用于播放来自 Angular 2+ 中各种插件的视频。
我正在使用 Azure blob 存储来存储我的所有图像和视频。我已经实现了上传和获取功能,并且运行良好。我在加载视频时遇到 1 个问题,因为当我使用在 Azure blob 存储上上传该视频后生成的 url 时,它会先下载所有内容,然后再将其呈现给用户。因此,如果视频大小为 100 mb,它将下载所有 100 mb,直到用户将无法看到视频。
我做了很多研发,才知道在渲染视频时,我需要获取部分内容(状态 206)而不是一次获取整个视频。添加请求头“Range:bytes-500”后,我尝试点击博客网址,但它仍在下载整个内容。因此,我检查了一些开源视频 URL,并尝试点击视频 URL 和“Range”请求标头,它成功地给出了 206 响应状态,这意味着它正确地给了我部分内容而不是完整视频。
我读了一些论坛,他们说 Azure 存储支持部分内容概念,需要从属性中启用它。但是我已经检查了 Azure 存储帐户下的所有选项,但没有找到任何可以启用此功能的选项。
任何人都可以帮我解决这个问题,或者我需要启用 Azure 门户上的任何内容吗?这是我从一个星期以来一直在为此进行研发的事情。任何帮助将非常感激。
谢谢!注意安全。
rendering azure video-streaming azure-storage-blobs azure-blob-storage