我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频

Posted

技术标签:

【中文标题】我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频【英文标题】:I want a simple code to play video from rtmp stream for my android application project 【发布时间】:2012-09-12 11:15:32 【问题描述】:

我有关于通过 android TV Box 进行视频点播的项目。我有问题,我找不到 RTMP 播放器的开源。有没有人可以帮助我或指导我有关 rtmp 播放器源代码的信息?

我使用 red5 为 android 2.2(froyo) 流式传输和构建。

【问题讨论】:

我的android应用程序如何连接到android播放器以及android播放器如何连接到流媒体服务器?非常感谢。@droidhot 您可以使用启用了 javascript 和 flashplayer 支持的 webview 来使用 RTMP 播放 非常感谢。我今晚会试试看。@droidhot @R_Hear 你应该和我们分享你的源代码吗.. 【参考方案1】:

使用 RTSP

 public class PlayVideoRemote extends Activity
 
private VideoView vView;
private String vSource;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
 
    //sets the Bundle
    super.onCreate(savedInstanceState);
    //sets the context 
    setContentView(R.layout.main);

    //get the VideoView from the layout file
    vView = (VideoView)findViewById(R.id.vview);

    //use this to get touch events
    vView.requestFocus();

    //loads video from remote server
    //set the video path
    vSource ="rtsp://v6.cache1.c.youtube.com/CjYLENy73wIaLQnF4qJzpSt4nhMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYMDFmvL1wMysTQw=/0/0/0/video.3gp";
    //set the video URI, passing the vSource as a URI
    vView.setVideoURI(Uri.parse(vSource));

    //enable this if you want to enable video controllers, such as pause and forward
    vView.setMediaController(new MediaController(this));

    //plays the movie
    vView.start();


RTMP 参考这个Convert video Input Stream to RTMP

【讨论】:

谢谢。但它不能播放视频。我用red5串流,只能在rtmp上串流。 这是关于使用 rtmp 而不是 rtsp @SudiptaforAndroid...该代码现在是否正常工作,因为我收到“无法加载插件”【参考方案2】:

rtmp 实时流可以在嵌入 Flash 播放器的 Android webview 中播放。下面给出播放rtmp的完整源代码。

虽然你必须通过这个网址 http://www.adobe.com/devnet-apps/flashruntimes/certified-devices.html 这里列出了支持闪存的设备。所以在这样一个支持闪存的设备上测试代码。

public class WebViewPlayer extends Activity 

    WebView webView;

    Utils utils;
    String bodyHtml;
    String rtmpUrl;
    String fileName;
    String htmlVideoEmbedCode ;

    String htmlPost = "</body></html>";
    String htmlPre = "<!DOCTYPE html>" 
            + "<html lang=\"en\">"
            + "<head><meta charset=\"utf-8\">" 
            + "</head>"
            + "<body style='margin:0; pading:0;"
            + " background-color: #71D5CA;'>";

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.flash_player);
        RegisterActivities.registerActivity(this);

        utils = new Utils(this);

        if(! utils.isConnectionPossible())

            utils.getMessageDialogBox("Alert", "The Device cannot connect to the internet."
                    + "Please make sure internet is available.", "OK",
            true)
            .show();

        

        rtmpUrl = YOUR_RTMP_URL);
        fileName = YOUR_FILE_NAME);

        htmlVideoEmbedCode = getVideoEmbedCode();

        webView = (WebView) findViewById(R.id.webView1);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setPluginsEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setAppCacheEnabled(true);

        webView.setWebChromeClient(new WebChromeClient()

             public void onProgressChanged(WebView view, int progress) 
                 if(progress == 100)
                     ((ProgressBar)findViewById(R.id.progressBarWebView))
                     .setVisibility(View.INVISIBLE);
             
        );

        refreshFileName();
    

    @Override
    protected void onResume() 
        super.onResume();
        webView.refreshPlugins(true);
    

    private String getVideoEmbedCode() 
        return "<embed " 
                + "type=\"application/x-shockwave-flash\""
                + "id=\"player1\" " + "name=\"player1\" "
                + "src=\"http://www.c-span.org/"
                + "cspanVideoHD.swf\""
                + "width=\""+utils.getDisplayWidth()+"\""
                + "height=\""+(utils.getDisplayHeight()+40)+"\"" + " flashvars=@FILESRC@"
                + "allowfullscreen=\"true\"" 
                + "allowscripaccess=\"always\""
                + "/>";
    

    private void refreshFileName() 

        if (fileName.endsWith(".flv")) 
            fileName = "flv:" + fileName;
        

        bodyHtml = htmlVideoEmbedCode ;
        bodyHtml = bodyHtml.replaceAll("@FILESRC@", 
                "\"file=" + fileName
                + "&streamer=" + rtmpUrl + "\"");
        webView.loadDataWithBaseURL("http://127.0.0.1",
                htmlPre + bodyHtml
                + htmlPost, "text/html", "UTF-8", null);
    

    @Override
    protected void onDestroy() 
        // TODO Auto-generated method stub
        super.onDestroy();
        webView.stopLoading();
        webView.destroy();
//      webView = null;
    


【讨论】:

非常感谢,但我在 -Utils utils 上遇到错误; -RegisterActivity.registerActivity(this); - + "width=\""+utils.getDisplayWidth()+"\"" + "height=\""+(utils.getDisplayHeight()+40)+"\"" +" flashvars=@FILESRC@" 错误在 utils 上我怎么能弄明白。 utils 是用户定义类的对象,其中定义了 getDisplayHeight()/Width()...所以您只需忽略这些方法..您可以改为放置任何高度或宽度.. 非常感谢。 ^_^ @SudiptaforAndroid 如何用这个播放实时 rtmp 流?我尝试了每一种组合,但它只是播放 C-span 中的一些东西......有人可以帮助我吗? :) 这里的 Utils 是什么? RegisterActivities abd Utils 给我错误.. 我需要一些外部库吗??

以上是关于我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频的主要内容,如果未能解决你的问题,请参考以下文章

我需要哪些工具来为我的 python 应用程序创建多平台安装程序? [复制]

Android Studio 设计选项卡灰显

防止应用程序在 Android 中卸载

TextViews 不显示在 Android 中

类型错误网格搜索

我可以使用 DRF 重新创建 ORO CRM API 来为我的项目获取自定义功能吗