我必须制作一个iOS应用程序,播放来自相机的实时视频流.我知道iPhone只支持Live HTTP流,但遗憾的是它有大约6-10秒的延迟,这远非我的需要 - 我需要一个实时视图.MJPEG流也不是一种选择,因为它会产生巨大的流量.那么剩下的就是一个RTMP流,但iOS的本身不能发挥它:((我听说rtmpdump的iPhone,但我无法得到它的工作有没有人玩RTMP视频iOS上的成功如何有什么建议?非常感谢!
我必须做一个半直播.我使用了Nginx-rtmp模块,然后通过ffmpeg将内容推送到它:
ffmpeg -re -i content.mp4 -r 25 -f fvl "rtmp://rtmp.server.here"
Run Code Online (Sandbox Code Playgroud)
当我在VLC中从"rtmp://rtmp.server.here"打开它时,流运行正常
但我还必须制作播放这些流的iPhone和Android应用程序.这就是问题,流不适用于Android和iPhone.
如果我使用Wowza流云并流式传输到Wowza云而不是我自己的nginx-rtmp服务器,那么为Android和iPhone编写的相同应用程序可以正常播放流.
现在要么nginx-rtmp工作正常,要么还有什么?我也试过crtmpserver,同样的事情发生了.
我想要实现的目标: 我必须开发一个系统,我们可以上传电视频道(拥有它的权利)到服务器,然后制作一个网站,Android应用程序和iPhone应用程序,以便消费者可以观看直播频道.
上传部分我有一个线索,可能是电视调谐卡和开放广播软件将其流式传输到服务器.但是现场播放对我来说是新的.
更新:我也使用了ffprobe,这是输出.(见最后一行)
munir@munir-HP-ProBook-450-G2:~$ ffprobe rtmp://rtmp.server.here
ffprobe version 2.6.2 Copyright (c) 2007-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. …
Run Code Online (Sandbox Code Playgroud) 我想和使用RTMP的flash服务器交谈,但我不想使用Flash,而是使用c#或java.
我在看Red5,但他们的客户端API似乎有些不稳定.
有没有人有任何其他想法?
现在我正在使用RTMPStreamPublisher
wowzaserver发布视频.它正在成功上传,但有人能告诉我如何在上传到服务器时将相同的视频存储在iPhone上吗?
我使用https://github.com/slavavdovichenko/MediaLibDemos,但没有太多可用的文档.如果我可以存储发送的数据,那么我的工作就会成功.
以下是他们用于上传流的方法,但我找不到在iPhone设备上存储相同视频的方法:
// ACTIONS
-(void)doConnect {
#if 0 // use ffmpeg rtmp
NSString *url = [NSString stringWithFormat:@"%@/%@", hostTextField.text, streamTextField.text];
upstream = [[BroadcastStreamClient alloc] init:url resolution:RESOLUTION_LOW];
upstream.delegate = self;
upstream.encoder = [MPMediaEncoder new];
[upstream start];
socket = [[RTMPClient alloc] init:host]
btnConnect.title = @"Disconnect";
return;
#endif
#if 0 // use inside RTMPClient instance
upstream = [[BroadcastStreamClient alloc] init:hostTextField.text resolution:RESOLUTION_LOW];
//upstream = [[BroadcastStreamClient alloc] initOnlyAudio:hostTextField.text];
//upstream = [[BroadcastStreamClient alloc] initOnlyVideo:hostTextField.text resolution:RESOLUTION_LOW];
#else // use outside RTMPClient instance
if …
Run Code Online (Sandbox Code Playgroud) 我正在寻找有关Flash实时服务器的建议.目前,我们使用了Moock的Unity和Red5的组合,但是有一些问题.首先,我们转向AS3,Unity仅支持AS2.其次,Red5对我们来说非常不稳定,我们更喜欢更稳定的东西.我们不能使用官方的Flash Media Server,它有点超出我们的价格范围(单个许可证的起价为4,500美元).
到目前为止,我发现两台看起来满足我需求的服务器,ElectroServer和Wowza Media Server.有没有人有这些经验,或有任何其他服务器建议?我正在寻找的主要功能:
我对媒体流非常陌生,我有一些基本的疑虑要明确:
据我所知,HTTP流(通过Apache)和RTMP流(通过Red5)之间的区别在于流媒体服务器提供缓冲和提前控制,如搜索等.我是对的吗?
我可以只传输来自RT5服务器(如Red5)的Flash视频吗?如果我必须传输不同格式的文件,我是否必须使用HTTP流?我可以使用像xuggler这样的工具来动态转码文件并根据Red5服务器的请求发送吗?
我提出了所有这些疑虑,因为我必须为所有移动客户端提供流媒体 - iPhone,黑莓,Android - iPhone不支持闪存,所以去Red5是个好主意吗?
我正在编写一个基于C#.Net的应用程序,该应用程序需要将视频和音频流发布到Red 5 Media Server,并在本地网络上的另一个应用程序中检索相同的已发布流,然后再在Internet上检索.
简而言之,我打算使用Red5作为两个客户端之间视频和音频数据传输的中间或代理.
[客户端1] < - 视频和音频 - > < - 视频和音频 - > [客户端2]
我正在寻找RTMP协议的.NET实现(库),它可以帮助我将流发布到Media Server并重新生成已发布的流并在我的应用程序上播放它.
我搜索了SOF并找到了以下选项:
每个都有一些限制.
Borrocoli RTMP Library仅对音频/视频流提供plyback支持,但没有选择将视频/音频流发布到媒体服务器.我玩过图书馆并看过它的例子,但没有用.如果我错了,请纠正我.
FlourinFx.Net表示支持NetStream.Publish(),NetStream.AttachAudio()和NetStream.AttachVideo()方法.但在最新的代码快照中,没有这样的东西.他们的产品发布也是如此.NetStream类没有所述方法和/或没有任何方法可以帮助将流内容发布到媒体服务器.
WebOrb.Net:我没有对它进行过探讨,但从许可页面可以看出,免费版仅适用于IIS.企业版似乎对发布流媒体视频有所有支持......
问题:
如果我们需要编写一个支持播放和播放RTMP视频流的跨平台移动应用程序.我知道可以使用Android原生库,而Objective C也有一些.但是,如果不使用不受支持的Flash,Adobe AIR或其他外部组件,我们是否可以真正实现跨平台?
哪种方式可以编写跨平台(至少Android> = 4 + iOS; WP,黑莓 - 很不错)支持RTMP/RTSP的移动应用程序?
大约要求:
在应用程序页面上播放一个或多个RTMP流,延迟时间最短(最长1-3秒 - 这就是为什么延迟高达10-20秒的HLS不适合的原因)
从移动设备摄像头广播到RTSP服务器
编写PhoneGap插件是否适合这项任务?这种插件的正确方法是什么 - 尝试将livu lib RTMP客户端(或其他RTMPy客户端)嵌入到插件代码中,比如使用带有phonegap的livu(lib)? 或插件内的操作系统版本并使用一些编译的本机视频流工具?
PS:如果你在github的某个地方使用过这样的插件,或者有一些使用跨平台框架进行视频流的经验 - 请分享你的经验.如果你有一个现成的流媒体插件,并愿意出售它,或者可以写它 - 请同时评论,我很乐意支付它.
我想使用H264编解码器使用OpenCV从网络摄像头流式传输实时视频,然后将其转换为FLV,然后通过RTMP服务器流式传输,并使用flv.js在浏览器中捕获流.基本上我有一切工作,除了我无法读取flv.js中的流.我可以打开流,ffplay
所以我认为至少大多数事情都设置正确.
我目前的实施:
#include <iostream>
#include <vector>
#include <opencv2/highgui.hpp>
#include <opencv2/video.hpp>
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/avutil.h>
#include <libavutil/pixdesc.h>
#include <libavutil/imgutils.h>
#include <libswscale/swscale.h>
}
void stream_video(double width, double height, int fps, int camID)
{
av_register_all();
avformat_network_init();
const char *output = "rtmp://localhost/live/stream";
const AVRational dst_fps = {fps, 1};
int ret;
// initialize video capture device
cv::VideoCapture cam(camID);
if (!cam.isOpened())
{
std::cout << "Failed to open video capture device!" << std::endl;
exit(1);
}
cam.set(cv::CAP_PROP_FRAME_WIDTH, width);
cam.set(cv::CAP_PROP_FRAME_HEIGHT, height);
// …
Run Code Online (Sandbox Code Playgroud) 我已经设置了服务器和视频流,以便我可以使用以下命令行使用ffplay连接到流:
ffplay rtmp://<IP>/path
Run Code Online (Sandbox Code Playgroud)
是否可以使用QMediaPlayer QMediaContent或其他东西连接到此流?
或者也许我可以使用ffserver创建任何其他类型的流.
使用与ffplay相同的路径导致"不支持的url方案!"
通过进一步的实验,我尝试了ffserver http服务器流,但结果是在MFStreamer :: doRead()中Qt崩溃
显然它应该为MFStreamer调用BeginRead,但事实并非如此.
如何使用QMediaPlayer播放视频流?
编辑:这是我的代码
videotest.cpp
#include "videotest.h"
#include <QVBoxLayout>
#include <QVideoWidget>
#include <qmediaplayer.h>
#include <QMediaContent>
#include <QNetworkAccessManager>
#include <QNetworkReply>
struct VideoTest::Private
{
QMediaPlayer * mediaPlayer;
QNetworkAccessManager * networkAccessManager;
QNetworkReply * reply;
};
VideoTest::VideoTest(QWidget *parent)
: QMainWindow(parent)
{
d = new Private;
d->mediaPlayer = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
d->networkAccessManager = new QNetworkAccessManager(this);
ui.setupUi(this);
QVideoWidget * videoWidget = new QVideoWidget(ui.centralWidget);
videoWidget->show();
QPalette palette = videoWidget->palette();
palette.setColor(QPalette::Background, QColor(0, 0, 0));
videoWidget->setPalette(palette);
ui.videoLayout->addWidget(videoWidget);
d->mediaPlayer->setVideoOutput(videoWidget);
connect(ui.playButton, …
Run Code Online (Sandbox Code Playgroud)