我使用 DDMS 从我的 Android 手机获取屏幕截图,我需要一种有效的方法来将它们转换为视频并通过网络流式传输视频。
我有一个 RawImage,其中填充了屏幕截图的数据:
RawImage mRawImage;
直到知道我使用 SWT 创建图像并保存它:
PaletteData paletteData = new PaletteData(
mRawImage.getRedMask(),
mRawImage.getGreenMask(),
mRawImage.getBlueMask());
ImageData imageData = new ImageData(
mRawImage.width,
mRawImage.height,
mRawImage.bpp,
paletteData,
1,
mRawImage.data);
ImageLoader s = new ImageLoader();
s.data = new ImageData[] {imageData};
s.save("temp.jpg",SWT.IMAGE_JPEG);
我找到了 NanoHTTPD可用于流式传输,但如何将图像转换和压缩为视频?
我找到了一个很好的Tutorial使用 FFMPEG 和 video4linux2 流式传输您的网络摄像头。
是否可以将 RawImage 中的 bytes 发送到 FFMPEG 以转换为实时视频流?
实际代码:
$ffmpeg -f video4linux2 -i /dev/video0 http://78.47.18.19:8090/cam1.ffm
将其替换为类似的内容:
$ffmpeg -f video4linux2 -i **<add here java stream>** http://78.47.18.19:8090/cam1.ffm
有什么建议吗?
谢谢
PS:我希望有一个解决方案可以帮助我将图像转换为压缩视频,然后通过网络流式传输视频以便使用 HTML5 或 Flash Player 播放
最佳答案
有两种方法可以解决这个问题:
1) 在设备上捕获、编码和流式传输
或
2) 在设备上捕获、编码并从服务器流式传输
我不知道您的所有要求,但我认为选项 2 是可行的方法。您将拥有更好的性能和更广泛的工具来实现您的最终目标。
捕捉 几乎完全按照您描述的方式捕获 JPEG 图像。除了为每个索引添加一个索引,这样你就有 FILE1.JPG FILE2.JPG FILE3.JPG FILE4.jpg 等。
现在,根据您的要求,每隔一段时间,将这些图像上传到服务器。
编码 使用 mencode 设置有损压缩率,如下所示:
mencoder "./*.jpg"-mf fps=5 -o yourvideo.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800
完成后,您就可以使用 ffmpeg 像这样创建 MP4:
ffmpeg -r 5 -b 1800 -i %01d.jpg yourvideo.mp4
流媒体 现在为了通过网络流式传输 mp4,我将设置一个网页,如:
http://myserver/androidStream
它加载动态写入的 M3U 播放列表,因此它始终指向要流式传输的最新视频。根据您使用的播放器,您可以将 M3U 播放列表指向将加载下一个视频的“下一个”M3U 播放列表。根据您的要求,您可能还想查看其他播放列表格式,例如 ASX 或 PLS。
参见:http://en.wikipedia.org/wiki/Advanced_Stream_Redirector和 http://en.wikipedia.org/wiki/PLS_(file_format)作为其他非 M3U 播放列表格式的示例。
使用上述一般步骤,您将拥有一个系统,其中设备以每分钟 n 张图像的速率捕获图像,然后将这些图像上传到服务器进行编码。一旦这些图像被编码,您可以通过引用文件直接流式传输电影,或者您可以设置一个 M3U 类型的播放列表,这将允许播放器在可用时从“当前”视频移动到“下一个”视频。
关于java - 存储、转换为视频流 Android 屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505498/
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我