有没有办法将VLC媒体播放器嵌入Android应用程序?我有几个问题:
1)我有一个视频流摄像头(来自RTSP),我不能在我的常规视频视频面板上播放它(抱歉,这个视频无法播放错误).但是,我安装了Android的VLC应用程序(测试版),我能够播放它.2)我的主要目标是移植使用VLC插件到Android的桌面java应用程序.我想用最少的努力完成这项任务(我有一些时间问题).
另一种方法是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为使用我的视频,结果会根据视频的格式而有所不同.我可以在我的视频视频中播放通过RTSP流式播放的其他视频.
我通过互联网搜索并找到了一个"libvlc",但也有一些关于android的libvlc未完成的注释(但这些注释属于过去的时间,即使在stackoverflow中也是如此).
我想知道是否可以在同一布局中使用两个表面并同时查看每个表面.将来我会看一个视频视图的网格视图,但每个视频视图都使用vlc.
我使用片段修改此示例(android-vlc-sample).
结果是我只看到一个视频......我该如何解决?
从log-cat我没有看到重要的错误,但我认为android UIThread存在渲染问题
Java编码
public class MultipleVideoPlayFragmentActivity extends FragmentActivity {
public final static String LOCATION = "com.compdigitec.libvlcandroidsample.MultipleVideoPlayFragmentActivity.location";
private static final String TAG = "MediaPlayer";
public String mFilePatha;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_multiple_video_play_fragment);
Intent intent = getIntent();
mFilePatha = intent.getExtras().getString(LOCATION);
}
public static class VideoFragment extends Fragment implements
SurfaceHolder.Callback, IVideoPlayer {
public final static String TAG = "LibVLCAndroidSample/VideoActivity";
public final static String LOCATION = "com.compdigitec.libvlcandroidsample.VideoFragment.location";
private String mFilePath;
// display surface
private SurfaceView mSurface; …
Run Code Online (Sandbox Code Playgroud) 使用LibVLC,我正在尝试在播放时保存流.这是python代码:
import os
import sys
import vlc
if __name__ == '__main__':
filepath = <either-some-url-or-local-path>
movie = os.path.expanduser(filepath)
if 'http://' not in filepath:
if not os.access(movie, os.R_OK):
print ( 'Error: %s file is not readable' % movie )
sys.exit(1)
instance = vlc.Instance("--sub-source marq --sout=file/ps:example.mpg")
try:
media = instance.media_new(movie)
except NameError:
print ('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1],
vlc.__version__, vlc.libvlc_get_version()))
sys.exit(1)
player = instance.media_player_new()
player.set_media(media)
player.play()
#dont exit!
while(1):
continue
Run Code Online (Sandbox Code Playgroud)
它将视频流保存到文件中example.mpg
.根据此文档,保存流的命令是:
--sout=file/ps:example.mpg
Run Code Online (Sandbox Code Playgroud)
我在创建实例时使用的vlc.Instance …
我正在使用LibVLC,并希望在内存中渲染视频像素,这样我就可以拍摄帧的快照,而无需在窗口中绘制视频(默认情况下).
如果我理解正确,可以通过调用libvlc_video_set_callbacks和libvlc_video_set_format_callbacks来实现.在第一个函数中,我必须指定类型为libvlc_video_lock_cb的回调 ,其中我将初始化三个平面中的一个,我理解的是将绘制像素的缓冲区.
我的问题是每个像素使用的字节数以及必须初始化的平面数取决于视频色度.虽然我知道如何获得这个色度的四个字母的标识符,但我不知道如何获得它的这些特殊属性; 如果没有这些信息,我不知道我需要分配的缓冲区大小,以及有多少个平面.
有谁知道如何做到这一点?还是我理解错误的东西?
目标:我想使用VLC作为本地服务器来扩大与创建一个应用程序的视频功能Adobe AIR
,Flex
和Actionscript
.我正在使用VLC
流式传输stdout
并从我的应用程序中读取该输出.
VLC流媒体功能
VLC Flash视频
流VLC到网站的asf和Flash
状态:我可以VLC
作为后台进程启动并通过其远程控制界面控制它(更多细节).我可以加载,转码和流式传输本地视频文件.下面的示例应用程序是一个准确证明这一点的准系统测试平台.
问题:我正在将数据输入到我的应用程序中,但它不会呈现为视频.我不知道我的VLC命令或写入/读取是否有问题stdout
.这种从stdout
AIR 中读取的技术(ffmpeg
例如).
我试过的各种转码命令之一:
-I rc // remote control interface
-vvv // verbose debuging
--sout // transcode, stream to stdout
"#transcode{vcodec=FLV1}:std{access=file,mux=ffmpeg{mux=flv},dst=-}"
Run Code Online (Sandbox Code Playgroud)
这将导致数据进入到我的应用程序,但由于某种原因,使用时未呈现,视频appendBytes
与NetStream
实例.
相反,如果我将数据写入.flv文件,则会创建一个有效的文件 - 因此损坏的部分似乎正在写入stdout
.有一点我注意到:我没有通过stdout`方法获取元数据.如果我播放使用以下命令创建的文件,我会看到元数据.
// writing to a file
var output:File = File.desktopDirectory.resolvePath("stream.flv");
var outputPath:String = output.nativePath;
"#transcode{vcodec=FLV1}:std{access=file,mux=ffmpeg{mux=flv},dst=" + …
Run Code Online (Sandbox Code Playgroud) 在使用VLC Python绑定时,我无法附加事件处理程序以告知歌曲何时播放完毕.event_attach函数抱怨回调类型.
def __init__(self):
self.vlc = vlc.Instance()
self.vlc_playlist = self.vlc.media_list_new()
self.vlc_player = self.vlc.media_list_player_new()
self.vlc_player.set_media_list(self.vlc_playlist)
self.vlc_events = self.vlc_player.event_manager()
self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1)
....
def SongFinished(self, *args, **kwargs):
pass
Run Code Online (Sandbox Code Playgroud)
错误:
self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1)
return libvlc_event_attach(self, i_event_type, f_callback, user_data)
ArgumentError: argument 3: <type 'exceptions.TypeError'>: wrong type
Run Code Online (Sandbox Code Playgroud) 我一直在努力使用Android-LibVLC运行一个演示应用程序.
我只能找到linux的文档,无法让应用程序在我的设备上运行(尽管它编译).
当我启动应用程序时,它会记录:
12-16 15:58:19.572 9121-9121/? E/VLC/LibVLC? Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null
12-16 15:58:19.667 9135-9135/com.compdigitec.libvlcandroidsample E/VLC/LibVLC? Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null
Run Code Online (Sandbox Code Playgroud)
我已经使用org.videolan.libvlc目录类编译了项目APK作为源根目录的一部分,并且在同一模块中使用了jni目录并且失败了,我还将整个VLC模块作为单独的库模块包含在内这是一种依赖,这也失败了.
有没有人有一个成熟的方法来配置/构建一个Android项目与LibVLC,从Windows?或指示/文档的链接?(我找不到任何东西).
目标是将我的Android MediaPlayer依赖类替换为支持更多文件类型/编解码器的库/实现.
我正在尝试为小型影院制作一个简单的视频播放脚本,以自动播放视频和控制投影仪,声音和照明系统.我有两个视频输出,一个到投影室的监视器,另一个直接到投影仪.我希望在监视器上放置控件和小(~1/4屏幕)预览时,将全屏视频(并且仅视频)播放到投影仪.这将允许放映员观看正在输出的视频并从展位中的监视器控制回放,而所有观众都看到的是视频输出.
我目前正在使用Python来控制VLC播放器(使用libvlc Python绑定)来播放视频.我的一切工作正常,除了我无法弄清楚如何在投影机输出上全屏播放的视频预览(直接复制)到我的GUI中.
我尝试过使用克隆过滤器,但我无法让克隆窗口自动显示全屏,也不能在我的GUI中显示.克隆过滤器似乎是合乎逻辑的选择,但在指定目标屏幕,全屏等时似乎非常不灵活.我必须能够在投影仪显示器上全屏打开视频窗口.职业化是关键,如果放映员不得不拖动一个窗口并在电影开始时双击它,那将会很糟糕.
目前使用:
我想继续使用Python,因为我已经拥有控制投影仪,声音处理器,照明和窗帘编写和测试的代码.我之所以选择VLC是因为它在视频播放方面确实看起来很防弹,但我还没有继续使用它.由于过去的经验,我还为我的GUI选择了wxWidgets,但我也没有坚持.
我希望使用VLC作为我在C#中编写的应用程序中的视频播放器的基础(因为VLC是能够正确解码我正在使用的格式的少数播放器之一),但是我需要它的主要任务表演是:
现在我通过VLC扩展LUA脚本执行此操作,但VLC通过vlc.var.get返回的时间(输入,"时间")缺乏精度,并且可能因同一视频文件中的同一帧而异文件读数.帧浏览也不太可靠.另外,以这种方式接收的值不能自动转发到另一个应用程序.
我尝试使用libVLC的LibVLC.NET包装器,但我仍然无法在帧之间浏览,并且返回的毫秒计数值相当奇怪.这几乎就像VLC(libVLC)在回放期间没有返回实际时间值,而是某种舍入值,当读取精度低至毫秒时,该值有很大的延迟.标准VLC接口既不能显示精确的时间值,也不能显示毫秒,也不能在帧之间浏览.
有没有可行的方法通过以某种方式从使用.NET编写的应用程序运行VLC来执行VLC的上述两个任务?或者我应该考虑其他选择?
我想在我的应用程序中使用MobileVLCKit for iOS.我按照@ Building the Framework for iOS给出了步骤.我在我的Xcode 5中将deploymet目标设置为iOS 7.
我使用命令./buildMobileVLCKit.sh -f -l
编译shell文件以获得iOS框架.
我的终端应用程序出现以下错误.
The following build commands failed:
Libtool build/MobileVLCKit.build/Release-iphoneos/MobileVLCKit.build/Objects-normal/armv7/libMobileVLCKit.a normal armv7
Libtool build/MobileVLCKit.build/Release-iphoneos/MobileVLCKit.build/Objects-normal/armv7s/libMobileVLCKit.a normal armv7s
CreateUniversalBinary build/Release-iphoneos/libMobileVLCKit.a normal armv7\ armv7s
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样的方法谷歌,但它没有奏效.在尝试了一整天后,我提出了这个问题.如果你以前用过这个,请帮忙.