经过几天搜索SO和google我开始放弃了,所以我想我也可以在这里发帖.
我正在创建一个应该提供某种视频聊天的Android应用程序.由于这应该是尽可能接近到实时的,我也读到了各种协议,并决定尝试MJPEG对于初学者(不与音频有关现在).
现在流式传输数据让我疯狂.连接建立后,应用程序开始将相机预览帧写入流,但VLC和mplayer都不会开始播放视频.监视连接显示数据已到达.
连接 此代码由异步任务执行,成功通知侦听器:
try
{
ServerSocket server = new ServerSocket(8080);
socket = server.accept();
server.close();
Log.i(TAG, "New connection to :" + socket.getInetAddress());
stream = new DataOutputStream(socket.getOutputStream());
prepared = true;
}
catch (IOException e)
{
Log.e(TAG, e.getMessage();
}
Run Code Online (Sandbox Code Playgroud)
在我的电脑上,我执行'mplayer http://tabletIP:8080
',平板电脑注册一个连接(从而启动我的流光和相机预览).这也适用于VLC.
Streaming将标头写入流:
if (stream != null)
{
try
{
// send the header
stream.write(("HTTP/1.0 200 OK\r\n" +
"Server: iRecon\r\n" +
"Connection: close\r\n" +
"Max-Age: 0\r\n" +
"Expires: 0\r\n" +
"Cache-Control: no-cache, private\r\n" +
"Pragma: no-cache\r\n" +
"Content-Type: multipart/x-mixed-replace; " …
Run Code Online (Sandbox Code Playgroud) 我有一个android项目,我使用本机代码来处理SIP(使用libosip2和libeXosip2).我的本机代码与库的源一起编译到一个模块中.
代码编译得很好,生成的库具有我期望它拥有的所有符号,但是当我尝试加载生成的库时,我收到以下错误:
E/eXosip.loadLibrary(9210): java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1307]: 1941 cannot locate 'srand'...
Run Code Online (Sandbox Code Playgroud)
我的Application.mk看起来像这样:
APP_STL := gnustl_shared
APP_ABI := armeabi-v7a
APP_CPPFLAGS += -fexceptions
Run Code Online (Sandbox Code Playgroud)
我确实使用ndk-depends检查了未捕获的依赖项,这给了我
libeXosip_jni.so
libstdc++.so
liblog.so
libgnustl_shared.so
libm.so
libdl.so
libc.so
Run Code Online (Sandbox Code Playgroud)
添加loadLibrary("gnustl_shared")没有帮助(这是在"libs/armeabi-v7 /"中也找到的唯一一个提到的库).
我的Android.mk:
LOCAL_PATH := $(call my-dir)
$(shell (cd $(LOCAL_PATH); sh extract_stuff.sh; cd $(OLDPWD)))
include $(CLEAR_VARS)
OSIP := libosip2-4.1.0
EXOSIP := libeXosip2-4.1.0
LOCAL_MODULE := eXosip
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(OSIP)/include \
$(LOCAL_PATH)/$(EXOSIP)/include
LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(OSIP)/src/osipparser2/*.c)) \
$(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(OSIP)/src/osip2/*.c)) \
$(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(EXOSIP)/src/*.c))
LOCAL_CFLAGS …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Android应用程序,其中包括从台式PC发送和接收视频流.为了使应用程序正常工作,我们需要尽可能少的延迟,必要时牺牲视频质量.我们正在gstreamer 1.45
两端使用,但是对于当前的管道,我们在Galaxy Note S2上至少有0.5秒的延迟,那就是两个设备都在同一网络上(后来这应该通过VPN工作).
该发件人管道
appsrc name=vs_src format=time do-timestamp=true
caps="video/x-raw, format=(string)RGB, width=(int)640, height=(int)480, framerate=(fraction)15/1000"
! videoconvert
! x264enc speed-preset=ultrafast tune=zerolatency byte-stream=true threads=1 key-int-max=15 intra-refresh=true ! h264parse ! rtph264pay pt=96
! queue ! udpsink name=vs_sink host=%s port=%d async=false
Run Code Online (Sandbox Code Playgroud)
该接收器管道
udpsrc name=vr_src
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, payload=(int)96, encoding-name=(string)H264"
! rtpjitterbuffer
! rtph264depay ! h264parse ! avdec_h264
! videorate ! videoconvert
! glimagesink name=vr_sink async=false
Run Code Online (Sandbox Code Playgroud)
设置threads=2
或更高会发出gstreamer警告,表明它是在没有多线程支持的情况下编译的.我知道有些设备提供硬件解码器,但可靠地访问它们的唯一方法似乎是通过encodebin
/ decodebin
.我已经尝试使用decodebin
但由于某种原因它抱怨它无法找到所需的插件(例如No decoder to handle …
我正在尝试创建一个小演示,以了解使用 ffmpeg 以编程方式流式传输的感觉。我正在使用这个问题中的代码作为基础。我可以编译我的代码,但是当我尝试运行它时,我总是收到此错误:
[rtp @ 0xbeb480] 未设置时基
问题是,我已经设置了时基参数。我什至尝试为流(以及与流关联的编解码器)设置它们,尽管据我所知这不是必需的。这是我的代码中的相关部分:
AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext* c = avcodec_alloc_context3(codec);
c->pix_fmt = AV_PIX_FMT_YUV420P;
c->flags = CODEC_FLAG_GLOBAL_HEADER;
c->width = WIDTH;
c->height = HEIGHT;
c->time_base.den = FPS;
c->time_base.num = 1;
c->gop_size = FPS;
c->bit_rate = BITRATE;
avcodec_open2(c, codec, NULL);
struct AVStream* stream = avformat_new_stream(avctx, codec);
// TODO: causes an error
avformat_write_header(avctx, NULL);
Run Code Online (Sandbox Code Playgroud)
在接近末尾调用“avformat_write_header”时发生错误。检查所有可能失败的方法(如 avcodec_open2),我只是删除了检查以使代码更具可读性。
挖掘谷歌和 ffmpeg 源代码没有产生任何有用的结果。我认为这真的很基本,但我被卡住了。谁能帮我?
我在多个时间分辨率下跟踪多个离散时间序列,产生SxRxB矩阵,其中S是时间序列的数量,R是不同分辨率的数量,B是缓冲区,即每个系列记住的值.每个系列都是离散的,并使用有限范围的自然数来表示其值.我会在这里称这些"符号".
对于每个系列,我想计算在所有测量中,任何先前测量符号直接在任何当前测量符号之前的频率.我已经用如下所示的for循环解决了这个问题,但是出于显而易见的原因想要对其进行矢量化.
我不确定我的数据结构方式是否有效,所以我愿意接受那些建议.特别是我认为比率矩阵可以做得与众不同.
提前致谢!
def supports_loop(data, num_series, resolutions, buffer_size, vocab_size):
# For small test matrices we can calculate the complete matrix without problems
indices = []
indices.append(xrange(num_series))
indices.append(xrange(vocab_size))
indices.append(xrange(num_series))
indices.append(xrange(vocab_size))
indices.append(xrange(resolutions))
# This is huge! :/
# dimensions:
# series and value for which we calculate,
# series and value which precedes that measurement,
# resolution
ratios = np.full((num_series, vocab_size, num_series, vocab_size, resolutions), 0.0)
for idx in itertools.product(*indices):
s0, v0 = idx[0],idx[1] # the series and symbol for which we …
Run Code Online (Sandbox Code Playgroud)